This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.18.6. 在 GCP Workload Identity 中使用手动模式
Google Cloud Platform (GCP) 支持使用 GCP Workload Identity 的手动模式。
此凭证策略只支持新的 OpenShift Container Platform 集群,且必须在安装过程中进行配置。您无法重新配置使用不同凭证策略的现有集群,以使用此功能。
18.6.1. 关于 GCP Workload Identity 的手动模式 复制链接链接已复制到粘贴板!
在 GCP Workload Identity 中,各个 OpenShift Container Platform 集群组件可以使用简短的、有限权限的凭证模拟 IAM 服务帐户。
使用正确配置的 OpenID Connect (OIDC) 身份提供程序以及 IAM 服务帐户来自动请求新的和刷新的凭证。OpenShift Container Platform 为服务帐户令牌签名,这些令牌由 GCP 信任,并可投射到 pod 中并用于身份验证。默认情况下,令牌会在一小时后刷新。
图 18.3. 工作负载身份身份验证流
在 GCP Workload Identity 中使用手动模式会更改提供给各个 OpenShift Container Platform 组件的 GCP 凭证的内容。
GCP secret 格式
使用长期凭证的 Base64 编码 service_account.json
文件的内容
使用 GCP Workload Identity 的 Base64 编码 service_account.json
文件的内容
在 OpenShift Container Platform 4.10.8 中,因为发现了一个对镜像 registry 有负面影响的问题,删除了使用 GCP Workload Identity 的镜像 registry 支持。要使用 Workload Identity 的 OpenShift Container Platform 4.10.8 集群上使用镜像 registry,您必须将镜像 registry 配置为使用长期凭证。
在 OpenShift Container Platform 4.10.21 中,恢复了对使用带有镜像 registry 的 GCP Workload Identity 的支持。如需有关 OpenShift Container Platform 4.10.8 和 4.10.20 中此功能状态的更多信息,请参阅相关的知识库文章。
要安装配置为在带有 GCP Workload Identity 的手动模式中使用 Cloud Credential Operator (CCO) 的集群:
因为在使用 GCP Workload Identity 时集群以手动模式运行,所以无法使用所需的权限为组件创建新凭证。当升级到 OpenShift Container Platform 的不同次要版本时,通常会有新的 GCP 权限要求。在升级使用 GCP Workload Identity 的集群前,集群管理员必须手动确保 GCP 权限足以满足现有组件并可供任何新组件使用。
18.6.2.1. 配置 Cloud Credential Operator 工具 复制链接链接已复制到粘贴板!
当 Cloud Credential Operator(CCO)以手动模式运行时,要从集群外部创建和管理云凭证,提取并准备 CCO 实用程序(ccoctl
)二进制文件。
ccoctl
工具是在 Linux 环境中运行的 Linux 二进制文件。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
-
已安装 OpenShift CLI(
oc
)。
流程
获取 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)
$ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE)
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" -a ~/.pull-secret
$ oc image extract $CCO_IMAGE --file="/usr/bin/ccoctl" -a ~/.pull-secret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改权限以使
ccoctl
可执行:chmod 775 ccoctl
$ chmod 775 ccoctl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证
ccoctl
是否可以使用,请显示帮助文件:ccoctl --help
$ ccoctl --help
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ccoctl --help
的输出Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.6.2.2. 使用 Cloud Credential Operator 实用程序创建 GCP 资源 复制链接链接已复制到粘贴板!
您可以使用 ccoctl gcp create-all
命令自动创建 GCP 资源。
默认情况下,ccoctl
在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir
标志。此流程使用 <path_to_ccoctl_output_dir>
来引用这个目录。
先决条件
您必须:
-
提取并准备好
ccoctl
二进制文件。
流程
运行以下命令,从 OpenShift Container Platform 发行镜像中提取
CredentialsRequest
对象列表:oc adm release extract \ --credentials-requests \ --cloud=gcp \ --to=<path_to_directory_with_list_of_credentials_requests>/credrequests \ --quay.io/<path_to>/ocp-release:<version>
$ oc adm release extract \ --credentials-requests \ --cloud=gcp \ --to=<path_to_directory_with_list_of_credentials_requests>/credrequests \
1 --quay.io/<path_to>/ocp-release:<version>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
credrequests
是存储CredentialsRequest
对象列表的目录。如果该目录不存在,此命令就会创建该目录。
注意运行此命令可能需要一些时间。
如果您的集群使用集群功能禁用一个或多个可选组件,请删除任何禁用组件的
CredentialsRequest
自定义资源。GCP 上的 OpenShift Container Platform 4.12 的
credrequests
目录的内容示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ccoctl
工具处理credrequests
目录中的所有CredentialsRequest
对象:ccoctl gcp create-all \ --name=<name> \ --region=<gcp_region> \ --project=<gcp_project_id> \ --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests
$ ccoctl gcp create-all \ --name=<name> \ --region=<gcp_region> \ --project=<gcp_project_id> \ --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
<gcp_region>
是所有用于跟踪的 GCP 资源的用户定义名称。 -
<gcp_region>
是要在其中创建云资源的 GCP 区域。 -
<gcp_project_id>
是将要在其中创建云资源的 GCP 项目 ID。 -
<path_to_directory_with_list_of_credentials_requests>/credrequests
是包含CredentialsRequest
清单文件的目录,以创建 GCP 服务帐户。
注意如果您的集群使用
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
您可以通过查询 GCP 来验证是否已创建 IAM 服务帐户。如需更多信息,请参阅有关列出 IAM 服务帐户的 GCP 文档。
18.6.2.3. 运行安装程序 复制链接链接已复制到粘贴板!
先决条件
- 使用托管集群的云平台配置帐户。
- 获取 OpenShift Container Platform 发行镜像。
流程
进入包含安装程序的目录并创建
install-config.yaml
文件:openshift-install create install-config --dir <installation_directory>
$ openshift-install create install-config --dir <installation_directory>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<installation_directory>
是安装程序在其中创建文件的目录。编辑
install-config.yaml
配置文件,使其包含将credentialsMode
参数设置为Manual
。install-config.yaml
配置文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 添加这一行将
credentialsMode
参数设置为Manual
。
创建所需的 OpenShift Container Platform 安装清单:
openshift-install create manifests
$ openshift-install create manifests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
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 将
ccoctl
在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 运行 OpenShift Container Platform 安装程序:
./openshift-install create cluster
$ ./openshift-install create cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.6.2.4. 验证安装 复制链接链接已复制到粘贴板!
- 连接到 OpenShift Container Platform 集群。
验证集群没有
root
凭证:oc get secrets -n kube-system gcp-credentials
$ oc get secrets -n kube-system gcp-credentials
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出应类似于:
Error from server (NotFound): secrets "gcp-credentials" not found
Error from server (NotFound): secrets "gcp-credentials" not found
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证组件是否假设 secret 清单中指定的服务帐户,而不是使用由 CCO 创建的凭证:
带有 Image Registry Operator 的命令示例
oc get secrets -n openshift-image-registry installer-cloud-credentials -o json | jq -r '.data."service_account.json"' | base64 -d
$ oc get secrets -n openshift-image-registry installer-cloud-credentials -o json | jq -r '.data."service_account.json"' | base64 -d
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出应显示组件使用的角色和 Web 身份令牌,如下所示:
带有 Image Registry Operator 的输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow