5.3. 为 AWS 手动创建 IAM
在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system
命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。
5.3.1. 在 kube-system 项目中存储管理员级别的 secret 的替代方案
Cloud Credential Operator(CCO)将云供应商凭证作为 Kubernetes 自定义资源定义(CRD)进行管理。您可以通过在 install-config.yaml
文件中为 credentialsMode
参数设置不同的值,将 CCO 配置为满足机构的安全要求。
如果您不希望在集群 kube-system
项目中存储管理员级别的凭证 secret,您可以在安装 OpenShift Container Platform 时选择以下选项之一:
使用 Amazon Web Services 安全令牌服务 :
您可以使用 CCO 实用程序(
ccoctl
)将集群配置为使用 Amazon Web Services 安全令牌服务(AWS STS)。当 CCO 工具用于为 STS 配置集群时,它会分配 IAM 角色,为组件提供短期、有限权限的安全凭证。注意此凭证策略只支持新的 OpenShift Container Platform 集群,且必须在安装过程中进行配置。您无法重新配置使用不同凭证策略的现有集群,以使用此功能。
手动管理云凭证:
您可以将 CCO
的 credentialsMode
参数设置为Manual
以手动管理云凭证。使用手动模式可允许每个集群组件只拥有所需的权限,而无需在集群中存储管理员级别的凭证。如果您的环境没有连接到云供应商公共 IAM 端点,您还可以使用此模式。但是,每次升级都必须手动将权限与新发行镜像协调。您还必须手动为每个请求它们的组件提供凭证。使用 mint 模式安装 OpenShift Container Platform 后删除管理员级别的凭证 secret :
如果您使用 CCO,并将
credentialsMode
参数设置为Mint
,您可以在安装 OpenShift Container Platform 后删除或轮转管理员级别的凭证。Mint 模式是 CCO 的默认配置。这个选项需要在安装过程中存在管理员级别的凭证。在安装过程中使用管理员级别的凭证来最小化授予某些权限的其他凭证。原始凭证 secret 不会永久存储在集群中。
在非 z-stream 升级前,您必须使用管理员级别的凭证重新恢复凭证 secret。如果没有凭证,则可能会阻止升级。
其他资源
-
要了解如何使用 CCO 实用程序 (
ccoctl
) 将 CCO 配置为使用 AWS STS,请参阅使用 STS 使用手动模式。
- 要了解如何在安装 OpenShift Container Platform 后轮转或删除管理员级别的凭证 secret,请参阅轮转或删除云供应商凭证。
- 有关所有可用 CCO 凭证模式及其支持的平台的详细信息,请参阅关于 Cloud Credential Operator。
5.3.2. 手动创建 IAM
在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system
命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。
流程
运行以下命令,切换到包含安装程序的目录并创建
install-config.yaml
文件:$ openshift-install create install-config --dir <installation_directory>
其中
<installation_directory>
是安装程序在其中创建文件的目录。编辑
install-config.yaml
配置文件,使其包含将credentialsMode
参数设置为Manual
。install-config.yaml
配置文件示例apiVersion: v1 baseDomain: cluster1.example.com credentialsMode: Manual 1 compute: - architecture: amd64 hyperthreading: Enabled ...
- 1
- 添加这一行将
credentialsMode
参数设置为Manual
。
从包含安装程序的目录中运行以下命令来生成清单:
$ openshift-install create manifests --dir <installation_directory>
其中
<installation_directory>
是安装程序在其中创建文件的目录。在包含安装程序的目录中,运行以下命令来获取构建
openshift-install
二进制文件的 OpenShift Container Platform 发行镜像的详情:$ openshift-install version
输出示例
release image quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64
运行以下命令,找到此发行版本镜像中的所有
CredentialsRequest
对象:$ oc adm release extract quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64 \ --credentials-requests \ --cloud=aws
此命令为每个
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: AWSProviderSpec statementEntries: - effect: Allow action: - iam:GetUser - iam:GetUserPolicy - iam:ListAccessKeys resource: "*" ...
在之前生成的
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 kind: AWSProviderSpec statementEntries: - effect: Allow action: - s3:CreateBucket - s3:DeleteBucket resource: "*" ... secretRef: name: <component-secret> namespace: <component-namespace> ...
Secret
对象示例apiVersion: v1 kind: Secret metadata: name: <component-secret> namespace: <component-namespace> data: aws_access_key_id: <base64_encoded_aws_access_key_id> aws_secret_access_key: <base64_encoded_aws_secret_access_key>
重要发行镜像包含通过
TechPreviewNoUpgrade
功能集启用的技术预览功能的CredentialsRequest
对象。您可以使用release.openshift.io/feature-gate: TechPreviewNoUpgrade
注解来识别这些对象。- 如果不使用这些功能,请不要为这些对象创建 secret。为不使用的技术预览功能创建 secret 可能会导致安装失败。
- 如果使用这些功能,必须为对应的对象创建 secret。
要使用
TechPreviewNoUpgrade
注解查找CredentialsRequest
对象,请运行以下命令:$ grep "release.openshift.io/feature-gate" *
输出示例
0000_30_capi-operator_00_credentials-request.yaml: release.openshift.io/feature-gate: TechPreviewNoUpgrade
从包含安装程序的目录中,开始创建集群:
$ openshift-install create cluster --dir <installation_directory>
重要在升级使用手动维护凭证的集群前,您必须确保 CCO 处于可升级状态。
5.3.3. Mint 模式
Mint 模式是支持它的 OpenShift Container Platform 的默认 Cloud Credential Operator(CCO)凭证模式。在这个模式中,CCO 使用提供的管理员级云凭证来运行集群。AWS 和 GCP 支持 Mint 模式。
在 mint 模式中,admin 凭证
存储在 kube-system
命名空间中,然后由 CCO 使用来处理集群中的 CredentialsRequest
对象,并为每个对象创建具有特定权限的用户。
mint 模式的好处包括:
- 每个集群组件只有其所需的权限
- 云凭证的自动、持续协调,包括升级可能需要的额外凭证或权限
mint 模式的一个缺点是,admin 凭证
存储到集群 kube-system
secret 中。
5.3.4. 带有删除或轮转管理员级别的凭证的 Mint 模式
目前,只有 AWS 和 GCP 支持这个模式。
在这个模式中,用户使用管理员级别的凭证安装 OpenShift Container Platform,就像正常的 mint 模式一样。但是,这个过程会在安装后从集群中删除管理员级别的凭证 secret。
管理员可以让 Cloud Credential Operator 自行请求只读凭证,许它验证所有 CredentialsRequest
对象是否有其所需的权限。因此,除非需要更改内容,否则不需要管理员级别的凭证。删除关联的凭证后,可以根据需要在底层云中删除或取消激活它。
在非 z-stream 升级前,您必须使用管理员级别的凭证重新恢复凭证 secret。如果没有凭证,则可能会阻止升级。
管理员级别的凭证不会永久存储在集群中。
按照以下步骤,在短时间内仍然需要集群中的管理员级别的凭证。它还需要使用每次升级的管理员级别的凭证手动重新生成 secret。
5.3.5. 后续步骤
安装 OpenShift Container Platform 集群: