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-csr 0.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 に委任します。

手順

  1. ルートクラスターの発行者を作成します。

    1. 次の例のように 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 です。

    2. 次のコマンドを使用してオブジェクトを作成します。

      $ oc apply -f cluster-issuer.yaml
    3. 次の例のように 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

    4. 次のコマンドを使用してオブジェクトを作成します。

      $ oc apply -n istio-system -f istio-ca.yaml
  2. istio-csr をインストールします。

    $ helm install istio-csr jetstack/cert-manager-istio-csr \
        -n istio-system \
        -f deploy/examples/cert-manager/istio-csr/istio-csr.yaml

    istio-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.svc

  3. SMCP をデプロイメントします。

    $ oc apply -f mesh.yaml -n istio-system

    mesh.yaml

    apiVersion: 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: ThirdPartysecurity.certificateAuthority.type: cert-manager が設定されている場合に設定する必要があります。

検証

サンプル httpbin サービスと sleep アプリを使用して、イングレスゲートウェイからの mTLS トラフィックをチェックし、cert-manager ツールがインストールされていることを確認します。

  1. 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.yaml
  2. sleephttpbin サービスにアクセスできることを確認します。

    $ 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"

    出力例

    200

  3. Ingress ゲートウェイから httpbin サービスへの mTLS トラフィックを確認します。

    $ oc apply -n <namespace> -f https://raw.githubusercontent.com/maistra/istio/maistra-2.4/samples/httpbin/httpbin-gateway.yaml
  4. istio-ingressgateway ルートを取得します。

    INGRESS_HOST=$(oc -n istio-system get routes istio-ingressgateway -o jsonpath='{.spec.host}')
  5. Ingress ゲートウェイから httpbin サービスへの mTLS トラフィックを確認します。

    $ curl -s -I http://$INGRESS_HOST/headers -o /dev/null -w "%{http_code}" -s
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る