独自の TLS 証明書の使用

このページでは、マネージド TLS 証明書機能を使用しない場合に、独自の SSL / TLS 証明書を使用するように Cloud Run for Anthos を設定する方法について説明します。

Istio Ingress Gateway は、証明書を Kubernetes Secret に格納し、それを Istio Ingress Gateway 仕様で指定すると、証明書の TLS プロトコルをサポートします。

始める前に

以下の手順は、独自の TLS 証明書がすでにあることを前提としています。

TLS 証明書 / 秘密鍵を Kubernetes Secret に保存する

証明書を Secret に保存するには:

  1. 証明書を現在のディレクトリにコピーします。

  2. 次のコマンドを使用して、証明書を格納する 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 の仕様を変更します。

  1. 編集する共有ゲートウェイの仕様を開きます。

    kubectl edit gateway gke-system-gateway --namespace knative-serving
  2. 前に作成した 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
    
  3. 変更を保存します。

変更後、デプロイ済みのサービスに HTTPS プロトコルでアクセスできるようになります。