2.13.6. Service Mesh と cert-manager および istio-csr の統合について
cert-manager ツールは、Kubernetes での X.509 証明書管理のソリューションです。Vault、Google Cloud Certificate Service、Let’s Encrypt などのプロバイダーなどの秘密鍵または公開鍵基盤 (PKI) とアプリケーションを統合するための統合 API を提供します。
cert-manager ツールは、証明書の有効期限が切れる前に、設定された時間に証明書の更新を試行することで、証明書が有効で最新であることを確認します。
Istio ユーザーの場合、cert-manager は、Istio プロキシーからの証明書署名要求 (CSR) を処理する認証局 (CA) サーバーである istio-csr との統合も提供します。次に、サーバーは署名を cert-manager に委任し、設定された CA サーバーに CSR を転送します。
Red Hat は、istio-csr および cert-manager との統合のサポートを提供します。Red Hat は istio-csr またはコミュニティー cert-manager コンポーネントに対する直接サポートを提供しません。ここで示すコミュニティー cert-manager の使用は、デモンストレーションのみを目的としています。
前提条件
cert-manager の次のいずれかのバージョン:
- Red Hat OpenShift 1.10 以降の cert-manager Operator
- コミュニティー cert-manager Operator 1.11 以降
- cert-manager 1.11 以降
- OpenShift Service Mesh Operator 2.4 以降
-
istio-csr0.6.0 以降
istio-csr サーバーが jetstack/cert-manager-istio-csr Helm チャートとともにインストールされているときに、すべての namespace で config map が作成されないようにするには、istio-csr.yaml ファイル内の app.controller.configmapNamespaceSelector: "maistra.io/member-of: <istio-namespace>" 設定を使用します。
2.13.6.1. cert-manager のインストール リンクのコピーリンクがクリップボードにコピーされました!
cert-manager ツールをインストールすると、TLS 証明書のライフサイクルを管理し、証明書が有効で最新であることを確認できます。環境内で Istio を実行している場合は、Istio プロキシーからの証明書署名要求 (CSR) を処理する istio-csr 認証局 (CA) サーバーをインストールすることもできます。istio-csr CA は署名を cert-manager ツールに委任し、cert-manager ツールは設定された CA に委任します。
手順
ルートクラスターの発行者を作成します。
次の例のように
cluster-issuerオブジェクトを作成します。cluster-issuer.yamlの例apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: selfsigned-root-issuer namespace: cert-manager spec: selfSigned: {} --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: root-ca namespace: cert-manager spec: isCA: true duration: 21600h # 900d secretName: root-ca commonName: root-ca.my-company.net subject: organizations: - my-company.net issuerRef: name: selfsigned-root-issuer kind: Issuer group: cert-manager.io --- apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: root-ca spec: ca: secretName: root-ca注記root-caがクラスター発行者であるため、selfsigned-root-issuerの発行者とroot-ca証明書の namespace はcert-managerです。そのため、cert-manager は参照されるシークレットを独自の namespace で検索します。Red Hat OpenShift の cert-manager Operator の場合、namespace の名前はcert-managerです。次のコマンドを使用してオブジェクトを作成します。
$ oc apply -f cluster-issuer.yaml次の例のように
istio-caオブジェクトを作成します。istio-ca.yamlの例apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: istio-ca namespace: istio-system spec: isCA: true duration: 21600h secretName: istio-ca commonName: istio-ca.my-company.net subject: organizations: - my-company.net issuerRef: name: root-ca kind: ClusterIssuer group: cert-manager.io --- apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: istio-ca namespace: istio-system spec: ca: secretName: istio-ca次のコマンドを使用してオブジェクトを作成します。
$ oc apply -n istio-system -f istio-ca.yaml
istio-csrをインストールします。$ helm install istio-csr jetstack/cert-manager-istio-csr \ -n istio-system \ -f deploy/examples/cert-manager/istio-csr/istio-csr.yamlistio-csr.yamlの例replicaCount: 2 image: repository: quay.io/jetstack/cert-manager-istio-csr tag: v0.6.0 pullSecretName: "" app: certmanager: namespace: istio-system issuer: group: cert-manager.io kind: Issuer name: istio-ca controller: configmapNamespaceSelector: "maistra.io/member-of=istio-system" leaderElectionNamespace: istio-system istio: namespace: istio-system revisions: ["basic"] server: maxCertificateDuration: 5m tls: certificateDNSNames: # This DNS name must be set in the SMCP spec.security.certificateAuthority.cert-manager.address - cert-manager-istio-csr.istio-system.svcSMCP をデプロイメントします。
$ oc apply -f mesh.yaml -n istio-system例
mesh.yamlapiVersion: maistra.io/v2 kind: ServiceMeshControlPlane metadata: name: basic spec: addons: grafana: enabled: false kiali: enabled: false prometheus: enabled: false proxy: accessLogging: file: name: /dev/stdout security: certificateAuthority: cert-manager: address: cert-manager-istio-csr.istio-system.svc:443 type: cert-manager dataPlane: mtls: true identity: type: ThirdParty tracing: type: None --- apiVersion: maistra.io/v1 kind: ServiceMeshMemberRoll metadata: name: default spec: members: - httpbin - sleep
security.identity.type: ThirdParty は security.certificateAuthority.type: cert-manager が設定されている場合に設定する必要があります。
検証
サンプル httpbin サービスと sleep アプリを使用して、イングレスゲートウェイからの mTLS トラフィックをチェックし、cert-manager ツールがインストールされていることを確認します。
HTTP アプリと
sleepアプリをデプロイします。$ oc new-project <namespace>$ oc apply -f https://raw.githubusercontent.com/maistra/istio/maistra-2.4/samples/httpbin/httpbin.yaml$ oc apply -f https://raw.githubusercontent.com/maistra/istio/maistra-2.4/samples/sleep/sleep.yamlsleepがhttpbinサービスにアクセスできることを確認します。$ oc exec "$(oc get pod -l app=sleep -n <namespace> \ -o jsonpath={.items..metadata.name})" -c sleep -n <namespace> -- \ curl http://httpbin.<namespace>:8000/ip -s -o /dev/null \ -w "%{http_code}\n"出力例
200Ingress ゲートウェイから
httpbinサービスへの mTLS トラフィックを確認します。$ oc apply -n <namespace> -f https://raw.githubusercontent.com/maistra/istio/maistra-2.4/samples/httpbin/httpbin-gateway.yamlistio-ingressgatewayルートを取得します。INGRESS_HOST=$(oc -n istio-system get routes istio-ingressgateway -o jsonpath='{.spec.host}')Ingress ゲートウェイから
httpbinサービスへの mTLS トラフィックを確認します。$ curl -s -I http://$INGRESS_HOST/headers -o /dev/null -w "%{http_code}" -s