在Kubernetes(GKE)中实现HTTPS通信的方法
关于本篇文章
我总结了在Google Cloud Platform的Kubernetes(GKE)上进行HTTPS通信的方法。
首先
为了使Kubernetes能够与外部进行通信,需要进行如下操作:
-
- Serviceによる方法
- Ingressによる方法
有两种方法可以选择。
-
- https://cloud.google.com/kubernetes-engine/docs/tutorials/configuring-domain-name-static-ip?hl=ja
- https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer?hl=ja#background
通过该服务,外部IP直接连接到GCP负载均衡器,并且外部数据将通过负载均衡器的功能分发给Kubernetes的服务。负载均衡器只是简单地分发数据,因此外部数据将直接流向服务。因此,HTTPS处理必须由接收数据的Kubernetes内部Pod进行处理。
通过Ingress的方式,外部IP连接到Kubernetes的路由器,Ingress根据设置将数据分配给Kubernetes的服务。Ingress在内部使用nginx创建,并且可以根据通信内容进行路由,例如将外部的HTTPS转换成HTTP并传输给服务。
本記事では、Ingressを使ったHTTPS通信を行い、IngressでHTTPSをHTTPに変換し、KubernetesにはHTTPを送るように設定します。
程序
公网IP
Ingress的外部IP需为“全球”才能正常运行,而“区域性”的IP则不可行。因此我们会提供“全球”的静态IP。
创建秘密
首先,在Kubernetes中将证书和密钥的组合作为密钥集合注册,并创建Ingress以引用该密钥集合。
首先,我们要创建密钥集合。
kubectl create secret tls <シークレット名> \
--key <鍵ファイル> \
--cert <証明書ファイル>
创造Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.allow-http: "false"
kubernetes.io/ingress.global-static-ip-name: "<外部IP名>"
labels:
app: ingress
spec:
tls:
- secretName: <シークレット名>
backend:
serviceName: <接続先Service名>
servicePort: <接続先ポート番号>
只允许HTTPS,并禁止HTTP通信。
用「ingress.yaml」文件创建Ingress。
kubectl create -f ingress.yaml
确认健康检查
一旦创建了Ingress,它就能够通过HTTPS与外部进行通信。
创建Ingress后,Kubernetes会创建一台负载均衡器,并进行健康检查的设置。
- [GCP]-[ネットワークサービス]-[負荷分散]-[<ロードバランサー名>]-[ヘルスチェック]
您可以查看有关健康检查的详细信息。
如果不通过此健康检查,则数据将不会流向入口,并且不能正常工作,所以请注意。
默认的健康检查是通过HTTP检查“/”路径是否可访问,请确保连接目标Service时可以通过HTTP访问“/”路径。
相关文章
- Kubernetes(GKE)でHTTPS通信する方法(Ingress編)