8.10. GCP Workload Identity を使用した Red Hat OpenShift の cert-manager Operator の認証
クラウド認証情報を使用して、GCP Workload Identity クラスターで Red Hat OpenShift の cert-manager Operator を認証できます。クラウド認証情報は、ccoctl バイナリーを使用して設定できます。
8.10.1. GCP Workload Identity を使用して Red Hat OpenShift の cert-manager Operator のクラウド認証情報を設定
ccoctl バイナリーを使用して、Red Hat OpenShift の cert-manager Operator のクラウド認証情報を生成します。次に、それらを GCP Workload Identity クラスターに適用します。
前提条件
-
ccoctlバイナリーを抽出して準備している。 - cert-manager Operator for Red Hat OpenShift 1.11.1 以降がインストールされている。
- Cloud Credential Operator を手動モードで使用し、GCP Workload Identity で OpenShift Container Platform クラスターを設定している。
手順
次のコマンドを実行して、
CredentialsRequestリソース YAML ファイルを保存するディレクトリーを作成します。$ mkdir credentials-request
credentials-requestディレクトリーに、次のCredentialsRequestマニフェストを含む YAML ファイルを作成します。apiVersion: cloudcredential.openshift.io/v1 kind: CredentialsRequest metadata: name: cert-manager namespace: openshift-cloud-credential-operator spec: providerSpec: apiVersion: cloudcredential.openshift.io/v1 kind: GCPProviderSpec predefinedRoles: - roles/dns.admin secretRef: name: gcp-credentials namespace: cert-manager serviceAccountNames: - cert-manager注記dns.adminロールは、Google Cloud DNS リソースを管理するための管理者権限をサービスアカウントに付与します。最小限の権限を持つサービスアカウントで cert-manager が実行されるようにするには、次の権限を持つカスタムロールを作成できます。-
dns.resourceRecordSets.* -
dns.changes.* -
dns.managedZones.list
-
次のコマンドを実行し、
ccoctlツールを使用してCredentialsRequestオブジェクトを処理します。$ ccoctl gcp create-service-accounts \ --name <user_defined_name> --output-dir=<path_to_output_dir> \ --credentials-requests-dir=<path_to_credrequests_dir> \ --workload-identity-pool <workload_identity_pool> \ --workload-identity-provider <workload_identity_provider> \ --project <gcp_project_id>コマンドの例
$ ccoctl gcp create-service-accounts \ --name abcde-20230525-4bac2781 --output-dir=/home/outputdir \ --credentials-requests-dir=/home/credentials-requests \ --workload-identity-pool abcde-20230525-4bac2781 \ --workload-identity-provider abcde-20230525-4bac2781 \ --project openshift-gcp-devel次のコマンドを実行して、クラスターのマニフェストディレクトリーに生成されたシークレットを適用します。
$ ls <path_to_output_dir>/manifests/*-credentials.yaml | xargs -I{} oc apply -f {}次のコマンドを実行して、cert-manager Operator for Red Hat OpenShift のサブスクリプションオブジェクトを更新します。
$ oc -n cert-manager-operator patch subscription openshift-cert-manager-operator --type=merge -p '{"spec":{"config":{"env":[{"name":"CLOUD_CREDENTIALS_SECRET_NAME","value":"gcp-credentials"}]}}}'
検証
次のコマンドを実行して、再デプロイされた cert-manager コントローラー Pod の名前を取得します。
$ oc get pods -l app.kubernetes.io/name=cert-manager -n cert-manager
出力例
NAME READY STATUS RESTARTS AGE cert-manager-bd7fbb9fc-wvbbt 1/1 Running 0 15m39s
次のコマンドを実行して、cert-manager コントローラー Pod が、
mountPathで指定されたパスの下にマウントされている GCP ワークロードアイデンティティー認証情報ボリュームで更新されていることを確認します。$ oc get -n cert-manager pod/<cert-manager_controller_pod_name> -o yaml
出力例
spec: containers: - args: ... volumeMounts: - mountPath: /var/run/secrets/openshift/serviceaccount name: bound-sa-token ... - mountPath: /.config/gcloud name: cloud-credentials ... volumes: - name: bound-sa-token projected: ... sources: - serviceAccountToken: audience: openshift ... path: token - name: cloud-credentials secret: ... items: - key: service_account.json path: application_default_credentials.json secretName: gcp-credentials