第5章 OpenShift Service Mesh と cert-manager


cert-manager ツールは、Kubernetes での X.509 証明書管理のソリューションです。Vault、Google Cloud Certificate Authority Service、Let’s Encrypt などのプロバイダーといった秘密鍵または公開鍵基盤 (PKI) とアプリケーションを統合するための統合 API を提供します。

cert-manager ツールは、証明書の有効期限が切れる前に、設定された時間に証明書の更新を試行することで、証明書が有効で最新であることを確認します。

重要

Istio リソースを作成してインストールする前に、cert-manager ツールをインストールする必要があります。

5.1. cert-manager Operator istio-csr エージェントについて

重要

cert-manager Operator for Red Hat OpenShift と istio-csr の統合は、テクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

cert-manager Operator for Red Hat OpenShift は、Red Hat OpenShift Service Mesh および Istio のワークロードとコントロールプレーンコンポーネントを保護するための証明書管理を強化します。cert-manager 発行者を通じて相互 Transport Layer Security (mTLS) に使用される証明書の発行、配信、および更新をサポートします。

Istio を cert-manager Operator によって管理される istio-csr エージェントと統合することで、Istio が証明書を直接要求および管理するように有効化されます。この統合により、セキュリティー設定が簡素化され、クラスター内の証明書管理が一元化されます。

注記

Istio リソースを作成してインストールする前に、cert-manager Operator for Red Hat OpenShift をインストールする必要があります。

5.1.1. istio-csr エージェントを使用して Service Mesh と cert-manager Operator を統合する

istio-csr エージェントをデプロイし、istio-csr エージェントを使用してワークロードとコントロールプレーンの証明書署名要求を処理する Istio リソースを設定することで、cert-manager Operator を OpenShift Service Mesh と統合できます。次の手順では、自己署名 issuer オブジェクトを作成します。

前提条件

  • cert-manager Operator for Red Hat OpenShift バージョン 1.15.1 がインストールされている。
  • OpenShift Container Platform 4.14 以降にログインしている。
  • OpenShift Service Mesh Operator がインストールされている。
  • クラスター内で IstioCNI インスタンスが実行されている。
  • istioctl コマンドがインストールされている。

手順

  1. 次のコマンドを実行して、istio-system namespace を作成します。

    $ oc create namespace istio-system
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、cert-manager Operator にパッチを適用し、istio-csr エージェントをインストールします。

    $ oc -n cert-manager-operator patch subscription openshift-cert-manager-operator \
      --type='merge' -p \
      '{"spec":{"config":{"env":[{"name":"UNSUPPORTED_ADDON_FEATURES","value":"IstioCSR=true"}]}}}'
    Copy to Clipboard Toggle word wrap
  3. istio-csr エージェントの Issuer オブジェクトを作成して、ルート認証局 (CA) 発行者を作成します。

    1. 次のコマンドを実行して、istio-csr エージェントをインストールするための新しいプロジェクトを作成します。

      $ oc new-project istio-csr
      Copy to Clipboard Toggle word wrap
    2. 次の例のような Issuer オブジェクトを作成します。

      注記

      selfSigned 発行者は、デモンストレーション、テスト、または概念実証環境を対象としています。実稼働環境でのデプロイメントでは、セキュアかつ信頼できる CA を使用します。

      issuer.yaml ファイルの例

      apiVersion: cert-manager.io/v1
      kind: Issuer
      metadata:
        name: selfsigned
        namespace: istio-system
      spec:
        selfSigned: {}
      ---
      apiVersion: cert-manager.io/v1
      kind: Certificate
      metadata:
        name: istio-ca
        namespace: istio-system
      spec:
        isCA: true
        duration: 87600h
        secretName: istio-ca
        commonName: istio-ca
        privateKey:
          algorithm: ECDSA
          size: 256
        subject:
          organizations:
            - cluster.local
            - cert-manager
        issuerRef:
          name: selfsigned
          kind: Issuer
          group: cert-manager.io
      ---
      apiVersion: cert-manager.io/v1
      kind: Issuer
      metadata:
        name: istio-ca
        namespace: istio-system
      spec:
        ca:
          secretName: istio-ca
      Copy to Clipboard Toggle word wrap

    3. 次のコマンドを実行してオブジェクトを作成します。

      $ oc apply -f issuer.yaml
      Copy to Clipboard Toggle word wrap
    4. 次のコマンドを実行して、istio-ca 証明書に "Ready" というステータスの状態が含まれるまで待ちます。

      $ oc wait --for=condition=Ready certificates/istio-ca -n istio-system
      Copy to Clipboard Toggle word wrap
  4. IstioCSR カスタムリソースを作成します。

    1. 次の例のような IstioCSR カスタムリソースを作成します。

      istioCSR.yaml ファイルの例

      apiVersion: operator.openshift.io/v1alpha1
      kind: IstioCSR
      metadata:
        name: default
        namespace: istio-csr
      spec:
        istioCSRConfig:
          certManager:
            issuerRef:
              name: istio-ca
              kind: Issuer
              group: cert-manager.io
          istiodTLSConfig:
            trustDomain: cluster.local
          istio:
            namespace: istio-system
      Copy to Clipboard Toggle word wrap

    2. 次のコマンドを実行して、istio-csr エージェントを作成します。

      $ oc create -f istioCSR.yaml
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して、istio-csr デプロイメントの準備ができていることを確認します。

      $ oc get deployment -n istio-csr
      Copy to Clipboard Toggle word wrap
  5. istio リソースをインストールします。

    注記

    この設定により、Istio の組み込み CA サーバーが無効になり、証明書署名要求が istiod から istio-csr エージェントに転送されます。istio-csr エージェントは、cert-manager Operator から istiod とメッシュワークロードの両方の証明書を取得します。istio-csr エージェントによって生成される istiod TLS 証明書は、使用するために既知の場所の Pod にマウントされます。

    1. 次の例のような Istio オブジェクトを作成します。

      istio.yaml ファイルの例

      apiVersion: sailoperator.io/v1
      kind: Istio
      metadata:
        name: default
      spec:
        version: v1.24-latest
        namespace: istio-system
        values:
          global:
            caAddress: cert-manager-istio-csr.istio-csr.svc:443
          pilot:
            env:
              ENABLE_CA_SERVER: "false"
      Copy to Clipboard Toggle word wrap

    2. 次のコマンドを実行して Istio リソースを作成します。

      $ oc apply -f istio.yaml
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して、istio リソースに "Ready" ステータス条件が表示されていることを確認します。

      $ oc wait --for=condition=Ready istios/default -n istio-system
      Copy to Clipboard Toggle word wrap

5.1.2. istio-csr エージェントを使用して cert-manager Operator で Service Mesh を確認する

サンプルの httpbin サービスと sleep アプリケーションを使用して、ワークロード間のトラフィックを検証できます。ワークロードプロキシー証明書をチェックして、cert-manager Operator が正しくインストールされていることを確認します。

  1. namespace を作成します。

    1. 次のコマンドを実行して、apps-1 namespace を作成します。

      $ oc new-project apps-1
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、apps-2 namespace を作成します。

      $ oc new-project apps-2
      Copy to Clipboard Toggle word wrap
  2. namespace に istio-injection=enabled ラベルを追加します。

    1. 次のコマンドを実行して、apps-1 namespace に istio-injection=enabled ラベルを追加します。

      $ oc label namespaces apps-1 istio-injection=enabled
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、apps-2 namespace に istio-injection=enabled ラベルを追加します。

      $ oc label namespaces apps-2 istio-injection=enabled
      Copy to Clipboard Toggle word wrap
  3. namespace に httpbin アプリケーションをデプロイします。

    1. 次のコマンドを実行して、apps-1 namespace に httpbin アプリケーションをデプロイします。

      $ oc apply -n apps-1 -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/httpbin/httpbin.yaml
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、apps-2 namespace に httpbin アプリケーションをデプロイします。

      $ oc apply -n apps-2 -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/httpbin/httpbin.yaml
      Copy to Clipboard Toggle word wrap
  4. namespace に sleep アプリケーションをデプロイします。

    1. 次のコマンドを実行して、apps-1 namespace に sleep アプリケーションをデプロイします。

      $ oc apply -n apps-1 -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/sleep/sleep.yaml
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、apps-2 namespace に sleep アプリケーションをデプロイします。

      $ oc apply -n apps-2 -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/sleep/sleep.yaml
      Copy to Clipboard Toggle word wrap
  5. 作成されたアプリケーションにサイドカーが挿入されていることを確認します。

    1. 次のコマンドを実行して、作成されたアプリケーションに apps-1 namespace のサイドカーが挿入されていることを確認します。

      $ oc get pods -n apps-1
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、作成されたアプリケーションに apps-2 namespace のサイドカーが挿入されていることを確認します。

      $ oc get pods -n apps-2
      Copy to Clipboard Toggle word wrap
  6. 次の例のような、メッシュ全体の厳格な相互 Transport Layer Security (mTLS) ポリシーを作成します。

    注記

    厳密な mTLS モードで PeerAuthentication を有効にすると、証明書が正しく配布され、ワークロード間で mTLS 通信が機能することが確認されます。

    peer_auth.yaml ファイルの例

    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
      name: default
      namespace: istio-system
    spec:
      mtls:
        mode: STRICT
    Copy to Clipboard Toggle word wrap

  7. 次のコマンドを実行して、mTLS ポリシーを適用します。

    $ oc apply -f peer_auth.yaml
    Copy to Clipboard Toggle word wrap
  8. 次のコマンドを実行して、apps-1/sleep アプリケーションが apps-2/httpbin サービスにアクセスできることを確認します。

    $ oc -n apps-1 exec "$(oc -n apps-1 get pod \
      -l app=sleep -o jsonpath={.items..metadata.name})" \
      -c sleep -- curl -sIL http://httpbin.apps-2.svc.cluster.local:8000
    Copy to Clipboard Toggle word wrap

    出力例

    HTTP/1.1 200 OK
    access-control-allow-credentials: true
    access-control-allow-origin: *
    content-security-policy: default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' camo.githubusercontent.com
    content-type: text/html; charset=utf-8
    date: Wed, 18 Jun 2025 09:20:55 GMT
    x-envoy-upstream-service-time: 14
    server: envoy
    transfer-encoding: chunked
    Copy to Clipboard Toggle word wrap

  9. 次のコマンドを実行して、apps-2/sleep アプリケーションが apps-1/httpbin サービスにアクセスできることを確認します。

    $ oc -n apps-2 exec "$(oc -n apps-1 get pod \
      -l app=sleep -o jsonpath={.items..metadata.name})" \
      -c sleep -- curl -sIL http://httpbin.apps-2.svc.cluster.local:8000
    Copy to Clipboard Toggle word wrap

    出力例

    HTTP/1.1 200 OK
    access-control-allow-credentials: true
    access-control-allow-origin: *
    content-security-policy: default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' camo.githubusercontent.com
    content-type: text/html; charset=utf-8
    date: Wed, 18 Jun 2025 09:21:23 GMT
    x-envoy-upstream-service-time: 16
    server: envoy
    transfer-encoding: chunked
    Copy to Clipboard Toggle word wrap

  10. 次のコマンドを実行して、httpbin ワークロード証明書が期待どおりに一致することを確認します。

    $ istioctl proxy-config secret -n apps-1 \
      $(oc get pods -n apps-1 -o jsonpath='{.items..metadata.name}' --selector app=httpbin) \
      -o json | jq -r '.dynamicActiveSecrets[0].secret.tlsCertificate.certificateChain.inlineBytes' \
      | base64 --decode | openssl x509 -text -noout
    Copy to Clipboard Toggle word wrap

    出力例

    ...
    Issuer: O = cert-manager + O = cluster.local, CN = istio-ca
    ...
    X509v3 Subject Alternative Name:
    URI:spiffe://cluster.local/ns/apps-1/sa/httpbin
    Copy to Clipboard Toggle word wrap

5.1.3. istio-csr エージェントを使用して cert-manager Operator で Service Mesh をアンインストールする

以下の手順を実行すると、OpenShift Service Mesh で cert-manager Operator をアンインストールできます。以下のリソースを削除する前に、Red Hat OpenShift Service Mesh または Istio コンポーネントが Istio-CSR エージェントまたはそれが発行した証明書を参照していないことを確認してください。これらのリソースを使用中に削除すると、メッシュの機能が中断される可能性があります。

手順

  1. 次のコマンドを実行して、IstioCSR カスタムリソースを削除します。

    $ oc -n <istio-csr_project_name> delete istiocsrs.operator.openshift.io default
    Copy to Clipboard Toggle word wrap
  2. 関連するリソースを削除します。

    1. 次のコマンドを実行して、クラスタースコープのリソースをリスト表示します。

      $ oc get clusterrolebindings,clusterroles -l "app=cert-manager-istio-csr,app.kubernetes.io/name=cert-manager-istio-csr"
      Copy to Clipboard Toggle word wrap

      後で参照できるように、リスト表示されたリソースの名前を保存します。

    2. 次のコマンドを実行して、istio-csr エージェントがデプロイされている namespace 内のリソースをリスト表示します。

      $ oc get certificate,deployments,services,serviceaccounts -l "app=cert-manager-istio-csr,app.kubernetes.io/name=cert-manager-istio-csr" -n <istio_csr_project_name>
      Copy to Clipboard Toggle word wrap

      後で参照できるように、リスト表示されたリソースの名前を保存します。

    3. 次のコマンドを実行して、Red Hat OpenShift Service Mesh または Istio でデプロイされている namespace 内のリソースをリスト表示します。

      $ oc get roles,rolebindings \
        -l "app=cert-manager-istio-csr,app.kubernetes.io/name=cert-manager-istio-csr" \
        -n <istio_csr_project_name>
      Copy to Clipboard Toggle word wrap

      後で参照できるように、リスト表示されたリソースの名前を保存します。

    4. 前の手順でリスト表示された各リソースに対して、次のコマンドを実行してリソースを削除します。

      $ oc -n <istio_csr_project_name> delete <resource_type>/<resource_name>
      Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

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

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

会社概要

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

Theme

© 2025 Red Hat