【问题标题】:How to access a kubernetes service through https?如何通过 https 访问 Kubernetes 服务?
【发布时间】:2017-06-24 02:02:04
【问题描述】:

这是我的集群信息

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>

我可以像这样http://129.146.34.181:30000/v2/catalog这样通过pod所在节点的公网IP访问服务。

那我想看看能不能通过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 公开服务,理想的解决方案是什么?

【问题讨论】:

  • 您找到这个问题的答案了吗?可以分享吗?

标签: kubernetes


【解决方案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,谷歌负载均衡器,否则它会配置一个本地 nginx 实例来完成这个任务。)

【讨论】:

  • 但我什至无法访问该服务。购买受信任的证书和域是我希望在我的开发环境之外进行设置的时候。 Kubernetes 有一个自签名证书,我现在可以使用它。我要指出的问题是,我什至可以通过主服务器从外部访问服务,就像它完成的方式一样,例如kub-dns 服务。
  • 你能在这里看看我的问题吗:stackoverflow.com/questions/61914106/…? + 用于引用 kubernetes 根证书。
【解决方案2】:

文档说它需要端口名称而不是编号。您是否尝试过以下方法?

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 2017-12-01
  • 2018-08-29
  • 2017-12-23
  • 2018-10-21
  • 1970-01-01
  • 2021-03-16
相关资源
最近更新 更多