4.8. 在 kube-system 项目中存储管理员级别的 secret 的替代方案
				默认情况下,管理员 secret 存储在 kube-system 项目中。如果您在 install-config.yaml 文件中将 credentialsMode 参数配置为 Manual,则必须使用以下替代方案之一:
			
- 要手动管理长期云凭证,请按照手动创建长期凭证中的步骤操作。
- 要实现在集群外为各个组件管理的短期凭证,请按照配置 GCP 集群以使用短期凭证中的步骤操作。
4.8.1. 手动创建长期凭证
					在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system 命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。
				
流程
- 在安装程序使用的 GCP 帐户中添加以下粒度权限: - 例 4.3. 所需的 GCP 权限 - compute.machineTypes.list
- compute.regions.list
- compute.zones.list
- dns.changes.create
- dns.changes.get
- dns.managedZones.create
- dns.managedZones.delete
- dns.managedZones.get
- dns.managedZones.list
- dns.networks.bindPrivateDNSZone
- dns.resourceRecordSets.create
- dns.resourceRecordSets.delete
- dns.resourceRecordSets.list
 
- 如果您没有将 - install-config.yaml配置文件中的- credentialsMode参数设置为- Manual,请修改值,如下所示:- 配置文件片段示例 - apiVersion: v1 baseDomain: example.com credentialsMode: Manual # ... - apiVersion: v1 baseDomain: example.com credentialsMode: Manual # ...- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 如果您之前还没有创建安装清单文件,请运行以下命令: - openshift-install create manifests --dir <installation_directory> - $ openshift-install create manifests --dir <installation_directory>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 其中 - <installation_directory>是安装程序在其中创建文件的目录。
- 运行以下命令,使用安装文件中的发行镜像设置 - $RELEASE_IMAGE变量:- RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')- $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,从 OpenShift Container Platform 发行镜像中提取 - CredentialsRequest自定义资源 (CR) 列表:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 此命令为每个 - CredentialsRequest对象创建一个 YAML 文件。- CredentialsRequest对象示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在之前生成的 - openshift-install清单目录中为 secret 创建 YAML 文件。secret 必须使用在- spec.secretRef中为每个- CredentialsRequest定义的命名空间和 secret 名称存储。- 带有 secret 的 - CredentialsRequest对象示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - Secret对象示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
在升级使用手动维护凭证的集群前,您必须确保 CCO 处于可升级状态。
4.8.2. 将 GCP 集群配置为使用短期凭证
要安装配置为使用 GCP Workload Identity 的集群,您必须配置 CCO 实用程序并为集群创建所需的 GCP 资源。
4.8.2.1. 配置 Cloud Credential Operator 工具
						当 Cloud Credential Operator(CCO)以手动模式运行时,要从集群外部创建和管理云凭证,提取并准备 CCO 实用程序(ccoctl)二进制文件。
					
							ccoctl 工具是在 Linux 环境中运行的 Linux 二进制文件。
						
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
- 
								已安装 OpenShift CLI(oc)。
- 您已在安装程序使用的 GCP 帐户中添加了以下身份验证选项之一: - IAM Workload Identity Pool Admin 角色。
- 以下粒度权限: - 例 4.4. 所需的 GCP 权限 - compute.projects.get
- iam.googleapis.com/workloadIdentityPoolProviders.create
- iam.googleapis.com/workloadIdentityPoolProviders.get
- iam.googleapis.com/workloadIdentityPools.create
- iam.googleapis.com/workloadIdentityPools.delete
- iam.googleapis.com/workloadIdentityPools.get
- iam.googleapis.com/workloadIdentityPools.undelete
- iam.roles.create
- iam.roles.delete
- iam.roles.list
- iam.roles.undelete
- iam.roles.update
- iam.serviceAccounts.create
- iam.serviceAccounts.delete
- iam.serviceAccounts.getIamPolicy
- iam.serviceAccounts.list
- iam.serviceAccounts.setIamPolicy
- iam.workloadIdentityPoolProviders.get
- iam.workloadIdentityPools.delete
- resourcemanager.projects.get
- resourcemanager.projects.getIamPolicy
- resourcemanager.projects.setIamPolicy
- storage.buckets.create
- storage.buckets.delete
- storage.buckets.get
- storage.buckets.getIamPolicy
- storage.buckets.setIamPolicy
- storage.objects.create
- storage.objects.delete
- storage.objects.list
 
 
流程
- 运行以下命令,为 OpenShift Container Platform 发行镜像设置变量: - RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')- $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,从 OpenShift Container Platform 发行镜像获取 CCO 容器镜像: - CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret) - $ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 确保 - $RELEASE_IMAGE的架构与将使用- ccoctl工具的环境架构相匹配。
- 运行以下命令,将 CCO 容器镜像中的 - ccoctl二进制文件提取到 OpenShift Container Platform 发行镜像中:- oc image extract $CCO_IMAGE \ --file="/usr/bin/ccoctl.<rhel_version>" \ -a ~/.pull-secret - $ oc image extract $CCO_IMAGE \ --file="/usr/bin/ccoctl.<rhel_version>" \- 1 - -a ~/.pull-secret- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 对于<rhel_version>,请指定与主机使用的 Red Hat Enterprise Linux (RHEL) 版本对应的值。如果没有指定值,则默认使用ccoctl.rhel8。以下值有效:- 
												rhel8: 为使用 RHEL 8 的主机指定这个值。
- 
												rhel9:为使用 RHEL 9 的主机指定这个值。
 
- 
												
 
- 运行以下命令更改权限以使 - ccoctl可执行:- chmod 775 ccoctl.<rhel_version> - $ chmod 775 ccoctl.<rhel_version>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
验证
- 要验证 - ccoctl是否准备就绪,可以尝试显示帮助文件。运行命令时使用相对文件名,例如:- ./ccoctl.rhel9 - $ ./ccoctl.rhel9- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
4.8.2.2. 使用 Cloud Credential Operator 实用程序创建 GCP 资源
						您可以使用 ccoctl gcp create-all 命令自动创建 GCP 资源。
					
							默认情况下,ccoctl 在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir 标志。此流程使用 <path_to_ccoctl_output_dir> 来引用这个目录。
						
先决条件
您必须:
- 
								提取并准备好 ccoctl二进制文件。
流程
- 运行以下命令,使用安装文件中的发行镜像设置 - $RELEASE_IMAGE变量:- RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')- $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,从 OpenShift Container Platform 发行镜像中提取 - CredentialsRequest对象列表:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 此命令可能需要一些时间才能运行。 
- 运行以下命令,使用 - ccoctl工具处理所有- CredentialsRequest对象:- ccoctl gcp create-all \ --name=<name> \ --region=<gcp_region> \ --project=<gcp_project_id> \ --credentials-requests-dir=<path_to_credentials_requests_directory> - $ ccoctl gcp create-all \ --name=<name> \- 1 - --region=<gcp_region> \- 2 - --project=<gcp_project_id> \- 3 - --credentials-requests-dir=<path_to_credentials_requests_directory>- 4 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 如果您的集群使用 - TechPreviewNoUpgrade功能集启用的技术预览功能,则必须包含- --enable-tech-preview参数。
验证
- 要验证 OpenShift Container Platform secret 是否已创建,列出 - <path_to_ccoctl_output_dir>/manifests目录中的文件:- ls <path_to_ccoctl_output_dir>/manifests - $ ls <path_to_ccoctl_output_dir>/manifests- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 您可以通过查询 GCP 来验证是否已创建 IAM 服务帐户。如需更多信息,请参阅有关列出 IAM 服务帐户的 GCP 文档。 
4.8.2.3. 整合 Cloud Credential Operator 实用程序清单
						要为单个组件在集群外实现短期安全凭证,您必须将创建 Cloud Credential Operator 实用程序 (ccoctl) 的清单文件移到安装程序的正确目录中。
					
先决条件
- 您已使用托管集群的云平台配置了帐户。
- 
								您已配置了 Cloud Credential Operator 实用程序 (ccoctl)。
- 
								已使用 ccoctl工具创建了集群所需的云供应商资源。
流程
- 在安装程序使用的 GCP 帐户中添加以下粒度权限: - 例 4.5. 所需的 GCP 权限 - compute.machineTypes.list
- compute.regions.list
- compute.zones.list
- dns.changes.create
- dns.changes.get
- dns.managedZones.create
- dns.managedZones.delete
- dns.managedZones.get
- dns.managedZones.list
- dns.networks.bindPrivateDNSZone
- dns.resourceRecordSets.create
- dns.resourceRecordSets.delete
- dns.resourceRecordSets.list
 
- 如果您没有将 - install-config.yaml配置文件中的- credentialsMode参数设置为- Manual,请修改值,如下所示:- 配置文件片段示例 - apiVersion: v1 baseDomain: example.com credentialsMode: Manual # ... - apiVersion: v1 baseDomain: example.com credentialsMode: Manual # ...- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 如果您之前还没有创建安装清单文件,请运行以下命令: - openshift-install create manifests --dir <installation_directory> - $ openshift-install create manifests --dir <installation_directory>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 其中 - <installation_directory>是安装程序在其中创建文件的目录。
- 运行以下命令,将 - ccoctl工具生成的清单复制到安装程序创建的- manifests目录中:- cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/ - $ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 将包含私钥的 - tls目录复制到安装目录中:- cp -a /<path_to_ccoctl_output_dir>/tls . - $ cp -a /<path_to_ccoctl_output_dir>/tls .- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow