9.11. 使用 GCP Workload Identity 为 Red Hat OpenShift 验证 cert-manager Operator
您可以使用云凭证在 GCP Workload Identity 集群中为 Red Hat OpenShift 验证 cert-manager Operator。您可以使用 ccoctl
二进制文件配置云凭证。
9.11.1. 使用 GCP Workload Identity 为 Red Hat OpenShift 配置云凭证
使用 ccoctl
二进制文件为 Red Hat OpenShift 生成 cert-manager Operator 的云凭证。然后,将它们应用到 GCP Workload Identity 集群。
先决条件
-
已提取并准备好
ccoctl
二进制文件。 - 您已为 Red Hat OpenShift 安装了 cert-manager Operator 版本 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
运行以下命令应用在集群 manifests 目录中生成的 secret:
$ ls <path_to_output_dir>/manifests/*-credentials.yaml | xargs -I{} oc apply -f {}
运行以下命令,为 Red Hat OpenShift 更新 cert-manager Operator 的订阅对象:
$ 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