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-systemYAML ファイルに
Issuerオブジェクトを作成して、ルート発行者を作成します。次の例のような
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 ---次のコマンドを実行してオブジェクトを作成します。
$ oc apply -f issuer.yaml次のコマンドを実行して、
istio-ca証明書に "Ready" というステータスの状態が含まれるまで待ちます。$ oc wait --for=condition=Ready certificates/istio-ca -n istio-system
istio-ca証明書をcert-managernamespace にコピーして、istio-csr で使用できるようにします。次のコマンドを実行して、シークレットをローカルファイルにコピーします。
$ oc get -n istio-system secret istio-ca -o jsonpath='{.data.tls\.crt}' | base64 -d > ca.pem次のコマンドを実行して、
cert-managernamespace のローカル証明書ファイルからシークレットを作成します。$ oc create secret generic -n cert-manager istio-root-ca --from-file=ca.pem=ca.pem
次のステップ
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次のコマンドを実行して
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.updateStrategy を RevisionBased に変更する予定の場合は、この手順に従ってください。
手順
-
istio-csrデプロイメントにすべての Istio リビジョンを指定します。「istio-csr デプロイメント」を参照してください。 次のコマンドを実行して、Jetstack チャートをローカル Helm リポジトリーに追加します。
$ helm repo add jetstack https://charts.jetstack.io --force-update次のコマンドを実行して、リビジョン名で
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-24-3}"注記リビジョン名は、
<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オブジェクトの例apiVersion: sailoperator.io/v1 kind: Istio metadata: name: default spec: version: v1.24.3 namespace: istio-system values: global: caAddress: cert-manager-istio-csr.cert-manager.svc:443 pilot: env: ENABLE_CA_SERVER: "false"注記リビジョンベースの更新ストラテジーを使用して CSR エージェントをインストールした場合は、
Istioオブジェクト YAML に以下を追加する必要があります。kind: Istio metadata: name: default spec: updateStrategy: type: RevisionBased次のコマンドを実行して
Istioリソースを作成します。$ oc apply -f istio.yaml次のコマンドを実行して、
Istioオブジェクトの準備が整うまで待ちます。$ oc wait --for=condition=Ready istios/default -n istio-system
4.2.4. cert-manager のインストールの確認 リンクのコピーリンクがクリップボードにコピーされました!
サンプルの httpbin サービスと sleep アプリケーションを使用して、ワークロード間の通信を確認できます。プロキシーのワークロード証明書をチェックして、cert-manager ツールが正しくインストールされていることを確認することもできます。
手順
次のコマンドを実行して
samplenamespace を作成します。$ oc new-project sample次のコマンドを実行して、アクティブな Istio リビジョンを見つけます。
$ oc get istios default -o jsonpath='{.status.activeRevisionName}'次のコマンドを実行して、アクティブなリビジョンのインジェクションラベルを
samplenamespace に追加します。$ oc label namespace sample istio.io/rev=<your-active-revision-name> --overwrite=true次のコマンドを実行して、サンプル
httpbinサービスをデプロイします。$ oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/httpbin/httpbin.yaml次のコマンドを実行して、サンプルの
sleepアプリケーションをデプロイします。$ oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/sleep/sleep.yaml次のコマンドを実行して、両方のアプリケーションの準備が完了するまで待ちます。
$ oc rollout status -n sample deployment httpbin sleep次のコマンドを実行して、
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次のコマンドを実行して、
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