9.10. cert-manager Operator for Red Hat OpenShift と Istio-CSR の統合
cert-manager Operator for Red Hat OpenShift は、Red Hat OpenShift Service Mesh または Istio のワークロードとコントロールプレーンコンポーネントを保護するための強化されたサポートを提供します。これには、相互 TLS (mTLS) を有効にする証明書のサポートが含まれます。この証明書は cert-manager の発行者を使用して署名、配信、更新されます。cert-manager Operator for Red Hat OpenShift で管理される Istio-CSR エージェントを使用して、Istio ワークロードとコントロールプレーンコンポーネントを保護できます。
この Istio-CSR 統合により、Istio は cert-manager Operator for Red Hat OpenShift から証明書を取得できるようになります。これにより、セキュリティーと証明書管理が簡素化されます。
9.10.1. cert-manager Operator for Red Hat OpenShift を介した Istio-CSR エージェントのインストール リンクのコピーリンクがクリップボードにコピーされました!
9.10.1.1. Istio-CSR エージェントのルート CA 発行者の作成 リンクのコピーリンクがクリップボードにコピーされました!
Istio-CSR エージェントの証明書署名を有効にするには、cert-manager Operator for Red Hat OpenShift を使用してルート CA 発行者を設定します。Cert-manager Operator for Red Hat OpenShift を使用することで、信頼できるルートを確立し、ワークロード間の安全な通信を確保できます。
サポートされている他の発行者も使用できます。ただし、ACME はサポートされていません。詳細は、「cert-manager Operator for Red Hat OpenShift の発行者プロバイダー」を参照してください。
手順
以下の設定例を参考に、
発行者オブジェクトと証明書オブジェクトを定義する YAML ファイルを作成します。apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: selfsigned namespace: <istio_project_name> spec: selfSigned: {} --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: istio-ca namespace: <istio_project_name> 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_project_name> spec: ca: secretName: istio-caここでは、以下のようになります。
Issuer-
発行者またはクラスター発行者を指定します。 <istio_project_name>- Istio プロジェクトの名前を指定します。
検証
次のコマンドを実行して、発行者が作成され、使用できる状態になっていることを確認します。
$ oc get issuer istio-ca -n <istio_project_name>出力例
NAME READY AGE istio-ca True 3m
9.10.1.2. IstioCSR カスタムリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
通信を保護するには、cert-manager Operator for Red Hat OpenShift を介して IstioCSR カスタムリソースを作成し、Istio-CSR エージェントをインストールしてください。
前提条件
-
cluster-admin権限でクラスターにアクセスできる。 - Istio-CSR 機能を有効にした。
Istio-CSR エージェントの証明書を生成するために必要な
IssuerまたはClusterIssuerリソースを作成した。注記Issuerリソースを使用している場合は、Red Hat OpenShift Service Mesh またはIstiodnamespace にIssuerおよびCertificateリソースを作成してください。証明書リクエストが同じ namespace に生成され、それに応じてロールベースのアクセス制御 (RBAC) が設定されます。
手順
次のコマンドを実行して、Istio-CSR をインストールするための新しいプロジェクトを作成します。Istio-CSR をインストールするための既存のプロジェクトがある場合は、この手順をスキップしてください。
$ oc new-project <istio_csr_project_name>IstioCSRカスタムリソースを作成して、cert-manager Operator for Red Hat OpenShift によって管理される Istio-CSR エージェントを有効にし、Istio ワークロードとコントロールプレーンの証明書署名要求を処理できるようにします。注記一度にサポートされる
IstioCSRカスタムリソース (CR) は 1 つだけです。複数のIstioCSRCR が作成された場合、アクティブになるのは 1 つだけです。IstioCSRのstatusサブリソースを使用して、リソースが未処理かどうかを確認してください。-
複数の
IstioCSRCR が同時に作成された場合、いずれも処理されません。 -
複数の
IstioCSRCR が連続して作成された場合、最初の CR のみが処理されます。 -
新しい要求が拒否されないように、未処理の
IstioCSRCR を削除します。 -
IstioCSR用に作成されたオブジェクトが、Operator によって自動的に削除されることはありません。アクティブなIstioCSRリソースが削除され、以前のデプロイメントを削除せずに別の namespace に新しいリソースが作成されると、複数のistio-csrデプロイメントがアクティブなままになる可能性があります。この動作は推奨されておらず、サポートされていません。
次の例を参考に、
IstioCSRオブジェクトを定義する YAML ファイルを作成します。apiVersion: operator.openshift.io/v1alpha1 kind: IstioCSR metadata: name: default namespace: <istio_csr_project_name> spec: istioCSRConfig: certManager: issuerRef: name: istio-ca kind: Issuer group: cert-manager.io istiodTLSConfig: trustDomain: cluster.local istio: namespace: <istio_project_name>ここでは、以下のようになります。
name-
発行者またはクラスター発行者の名前を指定します。issuer.yamlファイルで定義されている CA 発行者と同じ名前にする必要があります。 kind-
発行者またはクラスター発行者の種類を指定します。issuer.yamlファイルで定義されている CA 発行者と同じ種類である必要があります。
次のコマンドを実行して、
IstioCSRカスタムリソースを作成します。$ oc create -f IstioCSR.yaml
-
複数の
検証
次のコマンドを実行して、Istio-CSR デプロイメントの準備ができていることを確認します。
$ oc get deployment -n <istio_csr_project_name>出力例
NAME READY UP-TO-DATE AVAILABLE AGE cert-manager-istio-csr 1/1 1 1 24s次のコマンドを実行して、Istio-CSR の Pod が実行されていることを確認します。
$ oc get pod -n <istio_csr_project_name>出力例
NAME READY STATUS RESTARTS AGE cert-manager-istio-csr-5c979f9b7c-bv57w 1/1 Running 0 45s次のコマンドを実行して、Istio-CSR の Pod がログにエラーを報告していないことを確認します。
$ oc -n <istio_csr_project_name> logs <istio_csr_pod_name>次のコマンドを実行して、cert-manager Operator for Red Hat OpenShift の Pod がエラーを報告していないことを確認します。
$ oc -n cert-manager-operator logs <cert_manager_operator_pod_name>
9.10.1.3. istio-csr コンポーネントのログレベルの設定 リンクのコピーリンクがクリップボードにコピーされました!
istio-csr コンポーネントのログレベルを設定して、ログメッセージの詳細度と形式を制御できます。
前提条件
-
cluster-admin権限でクラスターにアクセスできる。 -
IstioCSRカスタムリソース (CR) を作成した。
手順
次のコマンドを実行して、
IstioCSRCR を編集します。$ oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name>1 <istio_csr_project_name>は、IstioCSRCR を作成した namespace に置き換えます。spec.istioCSRConfigセクションで、以下の設定例を使用してログレベルとフォーマットを設定します。apiVersion: operator.openshift.io/v1alpha1 kind: IstioCSR ... spec: istioCSRConfig: logFormat: text logLevel: 2 # ...ここでは、以下のようになります。
logFormat-
ログ出力形式を指定します。このフィールドは
textまたはjsonのいずれかに設定できます。 logLevel-
ログレベルを指定します。サポートされている値は、Kubernetes ロギングガイドラインで定義されているように、
1から5までの値です。デフォルト値は1です。
- 変更を適用するために、エディターを保存して閉じます。変更が適用されると、cert-manager Operator が istio-csr オペランドのログ設定を更新します。
9.10.1.4. CA バンドルを配布するための namespace セレクターの設定 リンクのコピーリンクがクリップボードにコピーされました!
Istio-CSR エージェントは、CA バンドルを含む istio-ca-root-cert ConfigMap 作成および更新します。この CA バンドルは、サービスメッシュ内のワークロードが Istio コントロールプレーンへの接続を検証するために使用します。namespace セレクターを設定すると、Istio-CSR エージェントがこの ConfigMap を作成する namespace を指定できます。セレクターを設定しない場合、Istio-CSR エージェントはすべての namespace に ConfigMap を作成します。
前提条件
-
cluster-admin権限でクラスターにアクセスできる。 -
IstioCSRカスタムリソース (CR) を作成した。
手順
次のコマンドを実行して、
IstioCSRCR を編集します。oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name><istio_csr_project_name>は、IstioCSRCR を作成した namespace に置き換えます。名前空間セレクターを設定するには、
spec.istioCSRConfig.istioDataPlaneNamespaceSelectorセクションを設定します。以下の例を参照してください。apiVersion: operator.openshift.io/v1alpha1 kind: IstioCSR ... spec: istioCSRConfig: istioDataPlaneNamespaceSelector: maistra.io/member-of=istio-system # ...maistra.io/member-of=istio-system名前空間セレクターは、サービスメッシュ内の名前空間を識別するラベルのキーと値を定義します。< キー >=< 値 > の形式を使用してください。注記istio-csr コンポーネントは、設定されたセレクターと一致しない namespace 内の
ConfigMapオブジェクトは削除または管理しません。IstioCSRCR をデプロイした後にセレクターを作成または更新する場合、または namespace からラベルを削除する場合は、競合を避けるためにこれらのConfigMapオブジェクトを手動で削除する必要があります。次のコマンドを実行すると、セレクターに一致する namespace にない
ConfigMapオブジェクトをリスト表示できます。この例では、セレクターはmaistra.io/member-of=istio-systemです。printf "%-25s %10s\n" "ConfigMap" "Namespace"; \ for ns in $(oc get namespaces -l "maistra.io/member-of!=istio-system" -o=jsonpath='{.items[*].metadata.name}'); do \ oc get configmaps -l "istio.io/config=true" -n $ns --no-headers -o jsonpath='{.items[*].metadata.name}{"\t"}{.items[*].metadata.namespace}{"\n"}' --ignore-not-found; \ done- 変更を適用するために、エディターを保存して閉じます。変更が適用されると、cert-manager Operator for Red Hat OpenShift が istio-csr オペランドの namespace セレクター設定を更新します。
9.10.1.5. Istio サーバーの CA 証明書の設定 リンクのコピーリンクがクリップボードにコピーされました!
Istio ワークロードが Istio サーバー証明書を検証するために使用する CA バンドルを含む ConfigMap を設定できます。設定されていない場合、cert-manager Operator for Red Hat OpenShift が、設定されている発行者内と、Istio 証明書を含む Kubernetes シークレット内で CA 証明書を検索します。
前提条件
-
cluster-admin権限でクラスターにアクセスできる。 -
IstioCSRカスタムリソース (CR) を作成した。
手順
次のコマンドを実行して、
IstioCSRCR を編集します。$ oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name><istio_csr_project_name>は、IstioCSRCR を作成した namespace に置き換えます。spec.istioCSRConfig.certManagerセクションを編集して、CA バンドルを設定します。以下の例を参照してください。apiVersion: operator.openshift.io/v1alpha1 kind: IstioCSR ... spec: istioCSRConfig: certManager: istioCACertificate: key: <key_in_the_configmap> name: <configmap_name> namespace: <configmap_namespace>ここでは、以下のようになります。
<configmap 内のキー >-
CA バンドルを含む
ConfigMap内のキー名を指定します。 <configmap_name>-
ConfigMapの名前を指定します。このフィールドを更新する前に、参照されるConfigMapとキーが存在することを確認してください。 <configmap_namespace>オプション:
ConfigMap が存在する名前空間を指定します。このフィールドを設定しなかった場合、IstioCSRCR をインストールした namespace で、cert-manager Operator for Red Hat OpenShift によってConfigMapが検索されます。注記CA 証明書がローテーションされるたびに、最新の証明書を使用して
ConfigMapを手動で更新する必要があります。
-
変更を適用するために、エディターを保存して閉じます。変更が適用されると、cert-manager Operator が
istio-csrオペランドの CA バンドルを更新します。