如何通过https访问kubernetes服务?

6
这是我的集群信息。
kubectl cluster-info
Kubernetes master is running at https://129.146.10.66:6443
Heapster is running at https://129.146.10.66:6443/api/v1/proxy/namespaces/kube-system/services/heapster
KubeDNS is running at https://129.146.10.66:6443/api/v1/proxy/namespaces/kube-system/services/kube-dns

因此,我有一个名为mysqlbrokerservice的服务正在以NodePort形式运行,其配置如下:
kubectl describe svc mysqlbrokerservice
Name:                        mysqlbrokerservice
Namespace:                mysqlbroker
Labels:                        <none>
Annotations:                <none>
Selector:                app=mysqlbroker
Type:                        NodePort
IP:                        10.99.194.191
Port:                        mysqlbroker        8080/TCP
NodePort:                mysqlbroker        30000/TCP
Endpoints:                10.244.1.198:8080
Session Affinity:        None
Events:                        <none>

我可以通过运行 pod 的节点的公共 IP 访问服务,如下所示:http://129.146.34.181:30000/v2/catalog
然后我想看看是否可以通过 https 访问该服务。我按照https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/#manually-constructing-apiserver-proxy-urls中的指示进行操作。
我按照示例使用 curl 获取资源。以下是命令。129.146.10.66:6443 是我的主 IP。
curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET  https://129.146.10.66:6443/api/v1/namespaces/mysqlbroker/services/mysqlbrokerservice:8080/proxy/v2/catalog --header "Authorization: Bearer $TOKEN" --insecure
HTTP/1.0 200 Connection established

curl命令没有响应。我查看了我的pod日志,发现它并没有显示任何请求的接收。

有人可以解释一下我在这里做错了什么吗?如果我想通过https公开服务,理想的解决方案是什么?


你找到这个问题的答案了吗?可以分享一下吗? - turgos
2个回答

1

如果您单击kubectl cluster-info提供的任何URL,您将看到浏览器提示您接受不安全的TLS连接。

要使HTTPs在此特定地址上工作,您需要购买为主机名颁发的TLS证书(在本例中,是IP地址,您无法购买IP地址的证书)。另一个选择是将Kubernetes集群的根证书添加到计算机的受信任根目录中,但这不会使它在其他计算机上正常工作。

所以我猜你只是想让运行在Kubernetes上的应用程序可以通过HTTPs访问外部世界:

为此,我建议实际购买一个域名(或重复使用子域名),为该主机名购买SSL/TLS证书,并使用Ingress配置负载均衡器进行HTTPs终止。https://kubernetes.io/docs/concepts/services-networking/ingress/#tls (如果您在GKE上,则使用Google负载平衡器,否则会配置一个本地nginx实例来执行此任务。)


1
但我甚至无法访问该服务。购买可信证书和域名是在我想要在开发环境之外设置时进行的。Kubernetes具有自签名证书,我现在可以使用它。我指出的问题是如何通过主节点从外部访问服务,例如kub-dns服务的方式。 - user686730
你能否看看这里的问题: https://stackoverflow.com/questions/61914106/how-can-i-create-a-helm-https-service ? + 关于kubernetes根证书的参考。 - w0051977
在开发环境中应该有一种方法可以使其在没有证书的情况下工作。 - Storm

0
文档说期望端口名称而不是数字。你尝试过以下方法吗?
curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET  https://129.146.10.66:6443/api/v1/namespaces/mysqlbroker/services/mysqlbrokerservice:mysqlbroker/proxy/v2/catalog --header "Authorization: Bearer $TOKEN" --insecure

你能否看一下我的问题,链接在这里:https://stackoverflow.com/questions/61914106/how-can-i-create-a-helm-https-service - w0051977

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接