6.8. 在 kube-system 项目中存储管理员级别的 secret 的替代方案
默认情况下,管理员 secret 存储在 kube-system 项目中。如果您在 install-config.yaml 文件中将 credentialsMode 参数配置为 Manual,则必须使用以下替代方案之一:
- 要手动管理长期云凭证,请按照手动创建长期凭证中的步骤操作。
- 要实现在集群外为各个组件管理的短期凭证,请按照配置 Google Cloud 集群以使用短期凭证中的步骤操作。
6.8.1. 手动创建长期凭证 复制链接链接已复制到粘贴板!
在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system 命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。
流程
在安装程序使用的 Google Cloud 帐户中添加以下粒度权限:
例 6.3. 所需的 Google Cloud 权限
- 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 # ...如果您之前还没有创建安装清单文件,请运行以下命令:
$ openshift-install create manifests --dir <installation_directory>其中
<installation_directory>是安装程序在其中创建文件的目录。运行以下命令,使用安装文件中的发行镜像设置
$RELEASE_IMAGE变量:$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')运行以下命令,从 OpenShift Container Platform 发行镜像中提取
CredentialsRequest自定义资源 (CR) 列表:$ oc adm release extract \ --from=$RELEASE_IMAGE \ --credentials-requests \ --included \1 --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2 --to=<path_to_directory_for_credentials_requests>3 此命令为每个
CredentialsRequest对象创建一个 YAML 文件。CredentialsRequest对象示例apiVersion: cloudcredential.openshift.io/v1 kind: CredentialsRequest metadata: name: <component_credentials_request> namespace: openshift-cloud-credential-operator ... spec: providerSpec: apiVersion: cloudcredential.openshift.io/v1 kind: GCPProviderSpec predefinedRoles: - roles/storage.admin - roles/iam.serviceAccountUser skipServiceCheck: true ...在之前生成的
openshift-install清单目录中为 secret 创建 YAML 文件。secret 必须使用在spec.secretRef中为每个CredentialsRequest定义的命名空间和 secret 名称存储。带有 secret 的
CredentialsRequest对象示例apiVersion: cloudcredential.openshift.io/v1 kind: CredentialsRequest metadata: name: <component_credentials_request> namespace: openshift-cloud-credential-operator ... spec: providerSpec: apiVersion: cloudcredential.openshift.io/v1 ... secretRef: name: <component_secret> namespace: <component_namespace> ...Secret对象示例apiVersion: v1 kind: Secret metadata: name: <component_secret> namespace: <component_namespace> data: service_account.json: <base64_encoded_gcp_service_account_file>
在升级使用手动维护凭证的集群前,您必须确保 CCO 处于可升级状态。
6.8.2. 将 Google Cloud 集群配置为使用短期凭证 复制链接链接已复制到粘贴板!
要安装配置为使用 Google Cloud Workload Identity 的集群,您必须配置 CCO 实用程序并为集群创建所需的 Google Cloud 资源。
6.8.2.1. 配置 Cloud Credential Operator 工具 复制链接链接已复制到粘贴板!
当 Cloud Credential Operator(CCO)以手动模式运行时,要从集群外部创建和管理云凭证,提取并准备 CCO 实用程序(ccoctl)二进制文件。
ccoctl 工具是在 Linux 环境中运行的 Linux 二进制文件。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
-
已安装 OpenShift CLI(
oc)。
您已在
ccoctl工具使用的 Google Cloud 帐户中添加以下身份验证选项之一:- IAM Workload Identity Pool Admin 角色
以下粒度权限:
-
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}')运行以下命令,从 OpenShift Container Platform 发行镜像获取 CCO 容器镜像:
$ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)注意确保
$RELEASE_IMAGE的架构与将使用ccoctl工具的环境架构相匹配。运行以下命令,将 CCO 容器镜像中的
ccoctl二进制文件提取到 OpenShift Container Platform 发行镜像中:$ oc image extract $CCO_IMAGE \ --file="/usr/bin/ccoctl.<rhel_version>" \1 -a ~/.pull-secret- 1
- 对于
<rhel_version>,请指定与主机使用的 Red Hat Enterprise Linux (RHEL) 版本对应的值。如果没有指定值,则默认使用ccoctl.rhel8。以下值有效:-
rhel8: 为使用 RHEL 8 的主机指定这个值。 -
rhel9:为使用 RHEL 9 的主机指定这个值。
-
注意ccoctl二进制文件在您执行此命令的目录中创建,而不是在/usr/bin/中创建。您必须重命名目录或将ccoctl.<rhel_version>二进制文件移到ccoctl。运行以下命令更改权限以使
ccoctl可执行:$ chmod 775 ccoctl
验证
要验证
ccoctl是否准备就绪,可以尝试显示帮助文件。运行命令时使用相对文件名,例如:$ ./ccoctl输出示例
OpenShift credentials provisioning tool Usage: ccoctl [command] Available Commands: aws Manage credentials objects for AWS cloud azure Manage credentials objects for Azure gcp Manage credentials objects for Google cloud help Help about any command ibmcloud Manage credentials objects for {ibm-cloud-title} nutanix Manage credentials objects for Nutanix Flags: -h, --help help for ccoctl Use "ccoctl [command] --help" for more information about a command.
您可以使用 ccoctl gcp create-all 命令自动创建 Google Cloud 资源。
默认情况下,ccoctl 在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir 标志。此流程使用 <path_to_ccoctl_output_dir> 来引用这个目录。
先决条件
您必须:
-
提取并准备好
ccoctl二进制文件。
流程
运行以下命令,使用安装文件中的发行镜像设置
$RELEASE_IMAGE变量:$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')运行以下命令,从 OpenShift Container Platform 发行镜像中提取
CredentialsRequest对象列表:$ oc adm release extract \ --from=$RELEASE_IMAGE \ --credentials-requests \ --included \1 --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2 --to=<path_to_directory_for_credentials_requests>3 注意此命令可能需要一些时间才能运行。
运行以下命令,使用
ccoctl工具处理所有CredentialsRequest对象:$ 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 注意如果您的集群使用
TechPreviewNoUpgrade功能集启用的技术预览功能,则必须包含--enable-tech-preview参数。
验证
要验证 OpenShift Container Platform secret 是否已创建,列出
<path_to_ccoctl_output_dir>/manifests目录中的文件:$ ls <path_to_ccoctl_output_dir>/manifests输出示例
cluster-authentication-02-config.yaml openshift-cloud-controller-manager-gcp-ccm-cloud-credentials-credentials.yaml openshift-cloud-credential-operator-cloud-credential-operator-gcp-ro-creds-credentials.yaml openshift-cloud-network-config-controller-cloud-credentials-credentials.yaml openshift-cluster-api-capg-manager-bootstrap-credentials-credentials.yaml openshift-cluster-csi-drivers-gcp-pd-cloud-credentials-credentials.yaml openshift-image-registry-installer-cloud-credentials-credentials.yaml openshift-ingress-operator-cloud-credentials-credentials.yaml openshift-machine-api-gcp-cloud-credentials-credentials.yaml您可以通过查询 Google Cloud 来验证是否已创建 IAM 服务帐户。如需更多信息,请参阅有关列出 IAM 服务帐户的 Google Cloud 文档。
6.8.2.3. 整合 Cloud Credential Operator 实用程序清单 复制链接链接已复制到粘贴板!
要为单个组件在集群外实现短期安全凭证,您必须将创建 Cloud Credential Operator 实用程序 (ccoctl) 的清单文件移到安装程序的正确目录中。
先决条件
- 您已使用托管集群的云平台配置了帐户。
-
您已配置了 Cloud Credential Operator 实用程序 (
ccoctl)。 -
已使用
ccoctl工具创建了集群所需的云供应商资源。
流程
在安装程序使用的 Google Cloud 帐户中添加以下粒度权限:
例 6.4. 所需的 Google Cloud 权限
- 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 # ...如果您之前还没有创建安装清单文件,请运行以下命令:
$ openshift-install create manifests --dir <installation_directory>其中
<installation_directory>是安装程序在其中创建文件的目录。运行以下命令,将
ccoctl工具生成的清单复制到安装程序创建的manifests目录中:$ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/将包含私钥的
tls目录复制到安装目录中:$ cp -a /<path_to_ccoctl_output_dir>/tls .