在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編)
广告
将在 10 秒后关闭
bannerAds