4.2. cert-manager のインストール


istio-csr をデプロイし、次に istio-csr エージェントを使用してワークロードとコントロールプレーンの証明書署名要求を処理する Istio リソースを作成して、cert-manager を OpenShift Service Mesh と統合できます。この例では、自己署名の Issuer を作成しますが、代わりに他の Issuer を使用することもできます。

重要

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

手順

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

    $ oc create namespace istio-system
  2. YAML ファイルに Issuer オブジェクトを作成して、ルート発行者を作成します。

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

      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 # 10 years
        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
      ---

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

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

      $ oc wait --for=condition=Ready certificates/istio-ca -n istio-system
  3. istio-ca 証明書を cert-manager namespace にコピーして、istio-csr で使用できるようにします。

    1. 次のコマンドを実行して、シークレットをローカルファイルにコピーします。

      $ oc get -n istio-system secret istio-ca -o jsonpath='{.data.tls\.crt}' | base64 -d > ca.pem
    2. 次のコマンドを実行して、cert-manager namespace のローカル証明書ファイルからシークレットを作成します。

      $ oc create secret generic -n cert-manager istio-root-ca --from-file=ca.pem=ca.pem

次のステップ

istio-csr をインストールするには、必要な更新ストラテジーの種類に応じた istio-csr インストール手順に従う必要があります。デフォルトでは、Istio リソースを作成してインストールするときに、spec.updateStrategyInPlace に設定されます。istio-csr をインストールした後、Istio リソースを作成してインストールします。

4.2.1. インプレース更新ストラテジーを使用して istio-csr エージェントをインストールする

Istio リソースは、デフォルトでインプレース更新ストラテジーを使用します。Istio リソースを作成してインストールするときに spec.updateStrategyInPlace のままにしておく場合は、この手順に従ってください。

手順

  1. 次のコマンドを実行して、Jetstack チャートリポジトリーをローカル Helm リポジトリーに追加します。

    $ helm repo add jetstack https://charts.jetstack.io --force-update
  2. 次のコマンドを実行して istio-csr チャートをインストールします。

    $ helm upgrade cert-manager-istio-csr jetstack/cert-manager-istio-csr \
        --install \
        --namespace cert-manager \
        --wait \
        --set "app.tls.rootCAFile=/var/run/secrets/istio-csr/ca.pem" \
        --set "volumeMounts[0].name=root-ca" \
        --set "volumeMounts[0].mountPath=/var/run/secrets/istio-csr" \
        --set "volumes[0].name=root-ca" \
        --set "volumes[0].secret.secretName=istio-root-ca" \
        --set "app.istio.namespace=istio-system"

4.2.2. リビジョンベースの更新ストラテジーを使用して istio-csr エージェントをインストールする

Istio リソースは、デフォルトでインプレース更新ストラテジーを使用します。Istio リソースを作成してインストールするときに spec.updateStrategyRevisionBased に変更する予定の場合は、この手順に従ってください。

手順

  1. istio-csr デプロイメントにすべての Istio リビジョンを指定します。「istio-csr デプロイメント」を参照してください。
  2. 次のコマンドを実行して、Jetstack チャートをローカル Helm リポジトリーに追加します。

    $ helm repo add jetstack https://charts.jetstack.io --force-update
  3. 次のコマンドを実行して、リビジョン名で istio-csr チャートをインストールします。

    $ helm upgrade cert-manager-istio-csr jetstack/cert-manager-istio-csr \
        --install \
        --namespace cert-manager \
        --wait \
        --set "app.tls.rootCAFile=/var/run/secrets/istio-csr/ca.pem" \
        --set "volumeMounts[0].name=root-ca" \
        --set "volumeMounts[0].mountPath=/var/run/secrets/istio-csr" \
        --set "volumes[0].name=root-ca" \
        --set "volumes[0].secret.secretName=istio-root-ca" \
        --set "app.istio.namespace=istio-system" \
        --set "app.istio.revisions={default-v1-23-0}"
    注記

    リビジョン名は、<istio-name>-v<major_version>-<minor_version>-<patch_version> という形式を使用します。たとえば、default-v1-23-0 です。

4.2.3. Istio リソースのインストール

インプレースまたはリビジョンベースの更新ストラテジーの手順に従って istio-csr をインストールした後、Istio リソースをインストールできます。

Istio の組み込み CA サーバーを無効にし、istio-csr CA サーバーを使用するように istiod に指示する必要があります。istio-csr CA サーバーは、istiod とユーザーワークロードの両方に対して証明書を発行します。

手順

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

    istio.yaml オブジェクトの例

    apiVersion: sailoperator.io/v1alpha1
    kind: Istio
    metadata:
      name: default
    spec:
      version: v1.23.0
      namespace: istio-system
      values:
        global:
          caAddress: cert-manager-istio-csr.cert-manager.svc:443
        pilot:
          env:
            ENABLE_CA_SERVER: "false"
          volumeMounts:
            - mountPath: /tmp/var/run/secrets/istiod/tls
              name: istio-csr-dns-cert
              readOnly: true

    注記

    リビジョンベースの更新ストラテジーを使用して CSR エージェントをインストールした場合は、Istio オブジェクト YAML に以下を追加する必要があります。

    kind: Istio
    metadata:
      name: default
    spec:
      updateStrategy:
        type: RevisionBased
  2. 次のコマンドを実行して Istio リソースを作成します。

    $ oc apply -f istio.yaml
  3. 次のコマンドを実行して、Istio オブジェクトの準備が整うまで待ちます。

    $ oc wait --for=condition=Ready istios/default -n istio-system

4.2.4. cert-manager のインストールの確認

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

手順

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

    $ oc new-project sample
  2. 次のコマンドを実行して、アクティブな Istio リビジョンを見つけます。

    $ oc get istiorevisions
  3. 次のコマンドを実行して、アクティブなリビジョンのインジェクションラベルを sample namespace に追加します。

    $ oc label namespace sample istio.io/rev=<your-active-revision-name> --overwrite=true
  4. 次のコマンドを実行して、サンプル httpbin サービスをデプロイします。

    $ oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/httpbin/httpbin.yaml
  5. 次のコマンドを実行して、サンプルの sleep アプリケーションをデプロイします。

    $ oc apply -n sample -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/sleep/sleep.yaml
  6. 次のコマンドを実行して、両方のアプリケーションの準備が完了するまで待ちます。

    $ oc rollout status -n sample deployment httpbin sleep
  7. 次のコマンドを実行して、sleep アプリケーションが httpbin サービスにアクセスできることを確認します。

    $ oc exec "$(oc get pod -l app=sleep -n sample \
         -o jsonpath={.items..metadata.name})" -c sleep -n sample -- \
         curl http://httpbin.sample:8000/ip -s -o /dev/null \
         -w "%{http_code}\n"

    成功した出力の例

    200

  8. 次のコマンドを実行して、httpbin サービスのワークロード証明書を出力し、その出力を確認します。

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

    出力例

    ...
    Issuer: O = cert-manager + O = cluster.local, CN = istio-ca
    ...
    X509v3 Subject Alternative Name:
      URI:spiffe://cluster.local/ns/sample/sa/httpbin

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.