独自の SSL/TLS 証明書を使用するように Knative serving を構成する方法を学びます。
または、マネージド TLS 証明書機能を使用することもできます。この機能によって、Let's Encrypt を通じて TLS 証明書が自動的に作成および更新されます。
独自の証明書を使用するには、TLS 証明書を Kubernetes Secret に保存し、対象の Secret を使用するように Cloud Service Mesh の Ingress ゲートウェイを構成します。
始める前に
- 以下の手順は、TLS 証明書をすでに取得していることを前提としています。
- カスタム ドメインを構成する必要があります。詳細については、カスタム ドメインのマッピングをご覧ください。
- Ingress ゲートウェイを使用して外部トラフィックを処理する Knative serving サービスをそれぞれ構成する必要があります。これらの外部向けサービスが TLS 証明書を使用するように構成されていない場合、サービスは HTTPS 接続を検証できないため、
ready
状態に到達しません。
TLS 証明書を Kubernetes Secret に保存する
証明書を Secret に保存するには:
ターミナルを開き、TLS 証明書があるディレクトリに移動します。
証明書を保存する Secret を作成するには、次のコマンドを使用します。
kubectl create --namespace INGRESS_NAMESPACE secret tls SECRET_NAME \ --key PRIVATE_KEY.pem \ --cert FULL_CHAIN.pem
次のように置き換えます。
- INGRESS_NAMESPACE は、Ingress サービスの名前空間である
istio-ingressgateway
に置き換えます。デフォルト構成を使用して Cloud Service Mesh をインストールした場合は、istio-system
名前空間を指定します。 - SECRET_NAME は、Kubernetes Secret で使用する名前に置き換えます。
- PRIVATE_KEY.pem は、証明書の秘密鍵を含むファイルの名前に置き換えます。
- FULL_CHAIN.pem は、公開証明書を含むファイルの名前に置き換えます。
- INGRESS_NAMESPACE は、Ingress サービスの名前空間である
これで、TLS 証明書に先ほど作成した Secret を使用するように Ingress ゲートウェイを構成できるようになりました。
証明書を使用するように Ingress ゲートウェイを構成する
TLS 証明書に作成した Secret を使用するように Cloud Service Mesh の Ingress ゲートウェイを変更します。
次のコマンドを実行して、Ingress ゲートウェイ YAML を編集モードで開きます。
kubectl edit gateway knative-ingress-gateway --namespace knative-serving
デフォルトの Ingress ゲートウェイ構成の例:
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP
hosts
、port
、tls
の各属性を既存の YAML に追加して、Secret を使用するように Ingress ゲートウェイを構成します。同じシークレットを使用するようにすべてのサービスを構成する: YAML 構成に以下の内容を追加し、
hosts
属性の値として"*"
を指定します。... # other skipped configuration ... - hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAME
SECRET_NAME は、作成した Secret の名前に置き換えます。
各サービスを個別に構成するには: YAML 構成に以下の内容を追加し、サービスの名前と名前空間を使用して
hosts
属性の値を指定します。サービスごとに、
hosts
、port
、tls
の属性の値を指定します。... # other skipped configuration ... - hosts: - SERVICE_NAME.SERVICE_NAMESPACE.CUSTOM_DOMAIN port: number: 443 name: https-SERVICE_NAME protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAME
次のように置き換えます。
- SERVICE_NAME は、Knative serving サービスの名前に置き換えます。上り(内向き)ゲートウェイを使用して外部トラフィックを処理するサービスはすべて個別に構成する必要があります。
- SERVICE_NAMESPACE は、サービスが実行されている名前空間の名前に置き換えます。
- CUSTOM_DOMAIN は、使用するサービスを構成したカスタム ドメインに置き換えます。
- SECRET_NAME は、サービスが使用する Secret の名前に置き換えます。一連の異なる TLS 証明書用に複数の Secret を作成した場合は、各サービスが使用する Secret を指定できます。
変更を保存します。
これで、HTTPS プロトコルを使用して、デプロイ済みの Knative serving サービスにアクセスできるようになりました。
例
- すべてのサービスを構成します。
この例では、
TLSsecret
Secret を使用するようにすべてのサービスを構成する方法を説明します。apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: ... # other skipped configuration ... 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: TLSsecret
- 個別のサービスを構成します。
この例では、インターネット トラフィックを処理する 3 つのサービスを個別に構成する方法を説明します。
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - "*" port: name: http number: 80 protocol: HTTP - hosts: - prodservice.prodnamespace.my-custom-domain.com port: number: 443 name: https-prodservice protocol: HTTPS tls: mode: SIMPLE credentialName: TLSsecret - hosts: - experiment.namespace.my-custom-domain.com port: number: 443 name: https-experiment protocol: HTTPS tls: mode: SIMPLE credentialName: TLSsecret - hosts: - fallbackservice.anothernamespace.my-custom-domain.com port: number: 443 name: https-fallbackservice protocol: HTTPS tls: mode: SIMPLE credentialName: anotherTLSsecret