独自の SSL/TLS 証明書を使用するように Knative serving を構成する方法を学びます。
あるいは、マネージド TLS 証明書機能を使用することもできます。この機能は、Let's Encrypt を通じて TLS 証明書を自動的に作成および更新します。
独自の証明書を使用するには、TLS 証明書を Kubernetes Secret に保存し、その Secret を使用するように Anthos Service Mesh の上り(内向き)ゲートウェイを構成します。
始める前に
- 以下の手順は、TLS 証明書をすでに取得していることを前提としています。
- カスタム ドメインを構成する必要があります。詳細については、カスタム ドメインのマッピングをご覧ください。
- Ingress ゲートウェイを使用して外部トラフィックを処理する Knative serving 提供サービスをそれぞれ構成する必要があります。これらの外部向けサービスが TLS 証明書を使用するように構成されていない場合、サービスは HTTPS 接続を検証できないため、
ready
状態に到達しません。
Kubernetes Secret に TLS 証明書を保存する
証明書を 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
に置き換えます。Anthos Service Mesh をデフォルトの構成を使用してインストールした場合は、istio-system
名前空間を指定します。 - SECRET_NAME は、Kubernetes Secret に使用する名前に置き換えます。
- PRIVATE_KEY.pem は、証明書の秘密鍵を保持するファイルの名前に置き換えます。
- FULL_CHAIN.pem は、公開証明書を保持するファイルの名前に置き換えます。
- INGRESS_NAMESPACE は、Ingress サービスの名前空間
TLS 証明書に作成した Secret を使用するように Ingress ゲートウェイを構成できます。
証明書を使用するように Ingress ゲートウェイを構成する
TLS 証明書用に作成した Secret を使用するように、Anthos Service Mesh の上り(内向き)ゲートウェイを変更します。
次のコマンドを実行して、編集ゲートウェイで 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
既存の YAML に
hosts
、port
、tls
の各属性を追加して、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 は、サービスで使用するシークレットの名前に置き換えます。異なる TLS 証明書のセットに対して複数のシークレットを作成した場合、各サービスが使用するシークレットを指定できます。
例を表示。
変更を保存します。
これで、HTTPS プロトコルを使用して、デプロイ済みの Knative serving サービスにアクセスできるようになりました。
例
- すべてのサービスを構成します。
次の例は、
TLSsecret
シークレットを使用するようにすべてのサービスを構成する方法を示しています。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