【发布时间】:2020-09-18 06:33:21
【问题描述】:
我正在尝试使用 GKE 集群创建一个公开服务 HTTPS 流量并且可通过 IP 地址(而非域)访问的 API。 Docker 镜像已经在本地进行了测试。他们能够自己提供 HTTPS,但据我所知,这对于我想象的设置来说不是必需的。
所以到目前为止,我想出的是让 Kubernetes 服务公开它的 8443 端口,并让 Ingress 负载均衡器映射到该端口,并使用使用 this tutorial - basic-ingress-secret 创建的自签名证书模板。我唯一跳过的是域绑定,因为我没有拥有域。我希望它将证书绑定到外部 IP,但不幸的是,情况并非如此(已尝试将 IP 附加到证书的 CN,正如一些用户所指出的 here)。
这是我的服务 yaml:
apiVersion: v1
kind: Service
metadata:
name: some-node
spec:
selector:
app: some
ports:
- protocol: "TCP"
port: 8443
targetPort: 8443
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: some-node-deploy
spec:
selector:
matchLabels:
app: some
replicas: 3
template:
metadata:
labels:
app: some
spec:
containers:
- name: some-container
image: "gcr.io/some-27417/some:latest"
这是我的 Ingress yaml:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: basic-ingress
annotations:
kubernetes.io/ingress.allow-http: "false"
spec:
tls:
- secretName: basic-ingress-secret
rules:
- http:
paths:
- path: /
backend:
serviceName: some-node
servicePort: 8443
【问题讨论】:
-
这取决于您的负载均衡器的配置方式。它可以终止 TLS(与您的后端说纯 HTTP),在较低级别运行(例如:TCP,在这种情况下您需要包含 LB DNS 的证书),或终止 TLS 并使用单独的 TLS 连接到您的后端。在所有情况下,您都需要有效的公开颁发的证书,或者您的应用程序可以验证的证书(已知的自签名 CA,或自签名证书的证书固定)。最简单的方法可能是在负载均衡器上终止 TLS 并与您的后端进行 HTTP 通信。
-
从前面评论的长度可以看出,这对于stackoverflow来说太宽泛了,
-
@Marc 感谢您的建议和 cmets,我已经更新了我的帖子。希望现在更清楚一点。
标签: ssl kubernetes https google-kubernetes-engine