GKEでhttps通信に対応する

重要なことは2つ。
Ingressサービスで外部IPと証明書の指定をする。
マネージドSSL証明書を使用する場合3回のkubrctl applyが必要。



GKEのアプリケーションがブラウザで動作するところまでできていることを前提としている。以下を参照のこと。
https://trueman-developer.blogspot.com/2020/08/gkenodejs.html



NodePortサービスの作成



NodePortで外部からアクセスできるように設定していた場合記述を削除する必要がある。

service.yaml

kind: Service
apiVersion: v1
metadata:
  name: example-service
spec:
  type: NodePort
  selector:
    app: example-service
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000
  type: LoadBalancer
  loadBalancerIP: "35.xxx.xxx.9"

kubectl apply -f service.yaml

のちほどIngressで設定するため下二行(type, loadBalancerIP)を削除する。
port(80)は後ほど指定する必要があるので控えておく。


マネージド証明書の設定



証明書はGCPのサービスを利用できる。
自動更新、しかも無料。ベータ版なのが少しネックか。
内部的にLet's Encryptを使用しているらしい。

certificate-hata-free.yaml

apiVersion: networking.gke.io/v1beta2
kind: ManagedCertificate
metadata:
  name: certificate-app
spec:
  domains:
    - example.com

domainsは設定予定のドメイン。
nameは後ほどingressで指定する。
DNSの設定は基本的にどのタイミングでもいいがうまくいくまでTTLは短めにしておいた方がいいかもしれない。


kubectl apply -f certificate-hata-free.yaml



Ingressの構築



Ingressは負荷分散、SSL終端などの外部アクセスを制御する機能を持つ。

ingress.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-app
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "app-address"
    networking.gke.io/managed-certificates: certificate-app
spec:
  backend:
    serviceName: example-service
    servicePort: 80


kubernetes.io/ingress.global-static-ip-nameはグローバルIPアドレスリソースを指定する。
静的IPアドレスはGCPのVPCネットワークから予約可能。
名前をダブルクォーテーションで括り、グローバルでなければいけない。リージョンを指定していた場合作り直す必要がある。
DNSひも付けなどもしていた場合はそこも書き換えないといけない(TTLを短くしておいた方がいいというのはこのため)
以下参考
https://console.cloud.google.com/networking/addresses/list
外部IPアドレス → 静的アドレスを予約



赤く囲っているリージョン部分が空白である必要がある。
アドレス未使用の場合費用がかかるとのことなので注意。

networking.gke.io/managed-certificatesで証明書の自動設定が可能。マネージド証明書を設定したときのnameを指定する。
指定しない場合は自動で静的IPが割り振られる(VPCネットワークから確認可能)
serviceNameはサービス名と同じにすること。
servicePortはNodePortのサービスで設定していたport(80)と同じ値にすること。


kubectl apply -f ingress.yaml


自動で証明書発行まで行われるが少し時間がかかる。

kubectl get ingress
NAME                HOSTS   ADDRESS          PORTS   AGE
ingress-app   *       34.xxx.xxx.228   80      4h29m

で状態確認。

https://domain...にアクセスして確認する。

2020年9月5日土曜日