9.11. GCP Workload Identity を使用した cert-manager Operator for Red Hat OpenShift の認証
クラウド認証情報を使用して、GCP Workload Identity クラスターで cert-manager Operator for Red Hat OpenShift を認証できます。クラウド認証情報は、ccoctl
バイナリーを使用して設定できます。
9.11.1. GCP Workload Identity を使用して cert-manager Operator for Red Hat OpenShift のクラウド認証情報を設定
ccoctl
バイナリーを使用して、cert-manager Operator for Red Hat OpenShift のクラウド認証情報を生成します。次に、それらを 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