4.2. cert-manager のインストール
istio-csr をデプロイし、次に istio-csr エージェントを使用してワークロードとコントロールプレーンの証明書署名要求を処理する Istio リソースを作成して、cert-manager を OpenShift Service Mesh と統合できます。この例では、自己署名の Issuer を作成しますが、代わりに他の Issuer を使用することもできます。
Istio リソースをインストールする前に、cert-manager をインストールする必要があります。
手順
次のコマンドを実行して、
istio-systemnamespace を作成します。oc create namespace istio-system
$ oc create namespace istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow YAML ファイルに
Issuerオブジェクトを作成して、ルート発行者を作成します。次の例のような
Issuerオブジェクトを作成します。issuer.yamlファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してオブジェクトを作成します。
oc apply -f issuer.yaml
$ oc apply -f issuer.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
istio-ca証明書に "Ready" というステータスの状態が含まれるまで待ちます。oc wait --for=condition=Ready certificates/istio-ca -n istio-system
$ oc wait --for=condition=Ready certificates/istio-ca -n istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
istio-ca証明書をcert-managernamespace にコピーして、istio-csr で使用できるようにします。次のコマンドを実行して、シークレットをローカルファイルにコピーします。
oc get -n istio-system secret istio-ca -o jsonpath='{.data.tls\.crt}' | base64 -d > ca.pem$ oc get -n istio-system secret istio-ca -o jsonpath='{.data.tls\.crt}' | base64 -d > ca.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
cert-managernamespace のローカル証明書ファイルからシークレットを作成します。oc create secret generic -n cert-manager istio-root-ca --from-file=ca.pem=ca.pem
$ oc create secret generic -n cert-manager istio-root-ca --from-file=ca.pem=ca.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
istio-csr をインストールするには、必要な更新ストラテジーの種類に応じた istio-csr インストール手順に従う必要があります。デフォルトでは、Istio リソースを作成してインストールするときに、spec.updateStrategy は InPlace に設定されます。istio-csr をインストールした後、Istio リソースを作成してインストールします。
4.2.1. インプレース更新ストラテジーを使用して istio-csr エージェントをインストールする リンクのコピーリンクがクリップボードにコピーされました!
Istio リソースは、デフォルトでインプレース更新ストラテジーを使用します。Istio リソースを作成してインストールするときに spec.updateStrategy を InPlace のままにしておく場合は、この手順に従ってください。
手順
次のコマンドを実行して、Jetstack チャートリポジトリーをローカル Helm リポジトリーに追加します。
helm repo add jetstack https://charts.jetstack.io --force-update
$ helm repo add jetstack https://charts.jetstack.io --force-updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して
istio-csrチャートをインストールします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
4.2.2. リビジョンベースの更新ストラテジーを使用して istio-csr エージェントをインストールする リンクのコピーリンクがクリップボードにコピーされました!
Istio リソースは、デフォルトでインプレース更新ストラテジーを使用します。Istio リソースを作成してインストールするときに spec.updateStrategy を RevisionBased に変更する予定の場合は、この手順に従ってください。
手順
-
istio-csrデプロイメントにすべての Istio リビジョンを指定します。「istio-csr デプロイメント」を参照してください。 次のコマンドを実行して、Jetstack チャートをローカル Helm リポジトリーに追加します。
helm repo add jetstack https://charts.jetstack.io --force-update
$ helm repo add jetstack https://charts.jetstack.io --force-updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、リビジョン名で
istio-csrチャートをインストールします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記リビジョン名は、
<istio-name>-v<major_version>-<minor_version>-<patch_version>という形式を使用します。例:default-v1-24-3
関連情報
次のステップ
4.2.3. Istio リソースのインストール リンクのコピーリンクがクリップボードにコピーされました!
インプレースまたはリビジョンベースの更新ストラテジーの手順に従って istio-csr をインストールした後、Istio リソースをインストールできます。
Istio の組み込み CA サーバーを無効にし、istio-csr CA サーバーを使用するように istiod に指示する必要があります。istio-csr CA サーバーは、istiod とユーザーワークロードの両方に対して証明書を発行します。
手順
次の例に示すように、
Istioオブジェクトを作成します。istio.yamlオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記リビジョンベースの更新ストラテジーを使用して CSR エージェントをインストールした場合は、
Istioオブジェクト YAML に以下を追加する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して
Istioリソースを作成します。oc apply -f istio.yaml
$ oc apply -f istio.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Istioオブジェクトの準備が整うまで待ちます。oc wait --for=condition=Ready istios/default -n istio-system
$ oc wait --for=condition=Ready istios/default -n istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.4. cert-manager のインストールの確認 リンクのコピーリンクがクリップボードにコピーされました!
サンプルの httpbin サービスと sleep アプリケーションを使用して、ワークロード間の通信を確認できます。プロキシーのワークロード証明書をチェックして、cert-manager ツールが正しくインストールされていることを確認することもできます。
手順
次のコマンドを実行して
samplenamespace を作成します。oc new-project sample
$ oc new-project sampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、アクティブな Istio リビジョンを見つけます。
oc get istios default -o jsonpath='{.status.activeRevisionName}'$ oc get istios default -o jsonpath='{.status.activeRevisionName}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、アクティブなリビジョンのインジェクションラベルを
samplenamespace に追加します。oc label namespace sample istio.io/rev=<your-active-revision-name> --overwrite=true
$ oc label namespace sample istio.io/rev=<your-active-revision-name> --overwrite=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、サンプル
httpbinサービスをデプロイします。oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/httpbin/httpbin.yaml
$ oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/httpbin/httpbin.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、サンプルの
sleepアプリケーションをデプロイします。oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/sleep/sleep.yaml
$ oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/sleep/sleep.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、両方のアプリケーションの準備が完了するまで待ちます。
oc rollout status -n sample deployment httpbin sleep
$ oc rollout status -n sample deployment httpbin sleepCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
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"$ 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"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力の例
200
200Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
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$ 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 -nooutCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
... Issuer: O = cert-manager + O = cluster.local, CN = istio-ca ... X509v3 Subject Alternative Name: URI:spiffe://cluster.local/ns/sample/sa/httpbin
... Issuer: O = cert-manager + O = cluster.local, CN = istio-ca ... X509v3 Subject Alternative Name: URI:spiffe://cluster.local/ns/sample/sa/httpbinCopy to Clipboard Copied! Toggle word wrap Toggle overflow