OpenShift Service Mesh 3.0 is a Technology Preview feature only
Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process. This documentation is a work in progress and might not be complete or fully tested.4.2. cert-manager のインストール
istio-csr
をデプロイし、次に istio-csr
エージェントを使用してワークロードとコントロールプレーンの証明書署名要求を処理する Istio
リソースを作成して、cert-manager を OpenShift Service Mesh と統合できます。この例では、自己署名の Issuer
を作成しますが、代わりに他の Issuer
を使用することもできます。
Istio
リソースをインストールする前に、cert-manager をインストールする必要があります。
手順
次のコマンドを実行して、
istio-system
namespace を作成します。$ oc create namespace istio-system
YAML ファイルに
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-manager
namespace にコピーして、istio-csr で使用できるようにします。次のコマンドを実行して、シークレットをローカルファイルにコピーします。
$ oc get -n istio-system secret istio-ca -o jsonpath='{.data.tls\.crt}' | base64 -d > ca.pem
次のコマンドを実行して、
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.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-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 とユーザーワークロードの両方に対して証明書を発行します。
手順
次の例に示すように、
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
次のコマンドを実行して
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 ツールが正しくインストールされていることを確認することもできます。
手順
次のコマンドを実行して
sample
namespace を作成します。$ oc new-project sample
次のコマンドを実行して、アクティブな Istio リビジョンを見つけます。
$ oc get istiorevisions
次のコマンドを実行して、アクティブなリビジョンのインジェクションラベルを
sample
namespace に追加します。$ 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/istio/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