このページでは、マネージド TLS 証明書機能を使用しない場合に、独自の SSL / TLS 証明書を使用するように Cloud Run for Anthos を設定する方法について説明します。
Istio Ingress Gateway は、証明書を Kubernetes Secret に格納し、それを Istio Ingress Gateway 仕様で指定すると、証明書の TLS プロトコルをサポートします。
始める前に
以下の手順は、独自の TLS 証明書がすでにあることを前提としています。
TLS 証明書 / 秘密鍵を Kubernetes Secret に保存する
証明書を Secret に保存するには:
証明書を現在のディレクトリにコピーします。
次のコマンドを使用して、証明書を格納する Secret を作成します。ここで、
privkey.pem
には証明書の秘密鍵が含まれ、fullchain.pem
には公開証明書が含まれます。kubectl create --namespace gke-system secret tls SECRET_NAME \ --key privkey.pem \ --cert fullchain.pem
Istio Ingress Gateway に TLS 証明書を指定する
TLS 証明書を含む Kubernetes Secret を使用するように Istio Ingress Gateway の仕様を変更します。
編集する共有ゲートウェイの仕様を開きます。
kubectl edit gateway gke-system-gateway --namespace knative-serving
前に作成した Secret を使用して TLS 証明書を指定します。そのためには、次のセクションをゲートウェイの仕様に追加します。
- hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAME
ゲートウェイの仕様は次のようになります。
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: # ... skipped ... spec: selector: istio: ingressgateway servers: - hosts: - "*" port: name: http number: 80 protocol: HTTP - hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAME
異なる名前空間にある 2 つの異なるサービスに複数の TLS 証明書を追加する場合、ゲートウェイの仕様は次のようになります。
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: # ... skipped ... spec: selector: istio: ingressgateway servers: - hosts: - "*" port: name: http number: 80 protocol: HTTP - port: number: 443 name: https-SERVICE1_NAME protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET1_NAME hosts: - SERVICE1_NAME.NAMESPACE1.example.com - port: number: 443 name: https-SERVICE2_NAME protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET2_NAME hosts: - SERVICE2_NAME.NAMESPACE2.example.com
変更を保存します。
変更後、デプロイ済みのサービスに HTTPS プロトコルでアクセスできるようになります。