第 19 章 管理云供应商凭证
19.1. 关于 Cloud Credential Operator
Cloud Credential Operator(CCO) 将云供应商凭证作为自定义资源定义 (CRD) 进行管理。CredentialsRequest
自定义资源(CR)的 CCO 同步,允许 OpenShift Container Platform 组件使用集群运行所需的特定权限请求云供应商凭证。
通过在 install-config.yaml
文件中为 credentialsMode
参数设置不同的值,可将 CCO 配置为以几种不同模式操作。如果没有指定模式,或将 credentialsMode
参数被设置为空字符串(""
)。
19.1.1. 模式
通过在 install-config.yaml
文件中为 credentialsMode
参数设置不同的值,可将 CCO 配置为在 mint、passthrough 或 manual 模式下操作。这些选项为 CCO 使用云凭证处理集群中的 credentialsRequest
CR 提供了透明性和灵活性,并允许配置 CCO 以适应您的机构的安全要求。不是所有 CCO 模式都支持所有云供应商。
- Mint:在 mint 模式中,CCO 使用提供的管理员级云凭证为集群中组件创建新凭证,且只具有所需的特定权限。
- Passthrough:在 passthrough 模式中,CCO 将提供的云凭证传递给请求云凭证的组件。
Manual:在手动模式中,用户管理云凭证而不是 CCO。
- 使用 AWS Security Token Service 手动:在手动模式中,您可以将 AWS 集群配置为使用 Amazon Web Services Security Token Service(AWS STS)。借助这一配置,CCO 对不同组件使用临时凭证。
- 使用 GCP Workload Identity: 在手动模式中,您可以将 GCP 集群配置为使用 GCP Workload Identity。借助这一配置,CCO 对不同组件使用临时凭证。
云供应商 | Mint | Passthrough | Manual |
---|---|---|---|
Alibaba Cloud | X | ||
Amazon Web Services (AWS) | X | X | X |
Microsoft Azure | X [1] | X | |
Google Cloud Platform (GCP) | X | X | X |
IBM Cloud | X | ||
Nutanix | X | ||
Red Hat OpenStack Platform(RHOSP) | X | ||
Red Hat Virtualization(RHV) | X | ||
VMware vSphere | X |
- 手动模式是唯一支持 Microsoft Azure Stack Hub 的 CCO 配置。
19.1.2. 确定 Cloud Credential Operator 模式
对于支持多个模式中使用 CCO 的平台,您可以使用 Web 控制台或 CLI 确定 CCO 要使用的模式。
图 19.1. 确定 CCO 配置
19.1.2.1. 使用 Web 控制台确定 Cloud Credential Operator 模式
您可以使用 Web 控制台确定 Cloud Credential Operator (CCO) 配置为使用哪种模式。
只有 Amazon Web Services (AWS)、全局 Microsoft Azure 和 Google Cloud Platform (GCP) 集群支持多个 CCO 模式。
先决条件
- 您可以使用集群管理员权限访问 OpenShift Container Platform 帐户。
流程
-
以具有
cluster-admin
角色的用户身份登录到 OpenShift Container Platform web 控制台。 -
导航至 Administration
Cluster Settings。 - 在 Cluster Settings 页面中,选择 Configuration 选项卡。
- 在 Configuration resource 下,选择 CloudCredential。
- 在 CloudCredential 详情页中,选择 YAML 选项卡。
在 YAML 块中,检查
spec.credentialsMode
的值。以下是可能的值,但它们可能并不会在所有平台上都被支持:-
''
:CCO 在默认模式下运行。在这个配置中,CCO 以 mint 或 passthrough 模式运行,具体取决于安装期间提供的凭证。 -
Mint
:CCO 在 mint 模式中运行。 -
Passthrough
:CCO 在 passthrough 模式运行。 -
Manual
:CCO 以手动模式运行。
重要要确定 AWS 或 GCP 集群的特定配置,其
spec.credentialsMode
为''
,Mint
, 或Manual
,您必须进一步调查。AWS 和 GCP 集群支持使用删除了 root secret 的 mint 模式。
使用手动模式的 AWS 或 GCP 集群可能会被配置为使用 AWS 安全令牌服务 (STS) 或 GCP Workload Identity 从集群外部创建和管理云凭证。您可以通过检查集群
Authentication
对象来确定集群是否使用了此策略。-
仅使用默认 (
''
) 的 AWS 或 GCP 集群 :要确定集群是否处于 mint 还是 passthrough 模式运行,请检查集群 root secret 上的注解:进入到 Workloads
Secrets,再查找云供应商的 root secret。 注意确保将 项目 下拉菜单设置为 All Projects。
平台 Secret 名称 AWS
aws-creds
GCP
gcp-credentials
要查看集群正在使用的 CCO 模式,请点 Annotations 下的
1 注解
,并检查 value 字段。可能会有以下值:-
Mint
:CCO 在 mint 模式中运行。 -
Passthrough
:CCO 在 passthrough 模式运行。
如果您的集群使用 mint 模式,您也可以确定集群是否在没有 root secret 的情况下运行。
-
只使用 mint 模式的 AWS 或 GCP 集群:要确定集群是否在没有 root secret 的情况下运行,请进入到 Workloads
Secrets 并为您的云供应商查找 root secret。 注意确保将 项目 下拉菜单设置为 All Projects。
平台 Secret 名称 AWS
aws-creds
GCP
gcp-credentials
- 如果您看到这些值之一,您的集群将使用 mint 或 passthrough 模式,并带有 root secret。
- 如果没有看到这些值,您的集群将以 mint 模式使用 CCO,并删除 root secret。
只使用手动模式的 AWS 或 GCP 集群 :要确定集群是否被配置为从集群外创建和管理云凭证,您必须检查 cluster
Authentication
对象 YAML 值。-
导航至 Administration
Cluster Settings。 - 在 Cluster Settings 页面中,选择 Configuration 选项卡。
- 在 Configuration resource 下,选择 Authentication。
- 在 Authentication details 页面中,选择 YAML 选项卡。
在 YAML 块中,检查
.spec.serviceAccountIssuer
参数的值。-
包含与云供应商关联的 URL 的值表示 CCO 在 AWS STS 或 GCP Workload Identity 中使用手动模式从集群外部创建和管理云凭证。这些集群使用
ccoctl
工具进行配置。 -
空值 (
''
) 表示集群在手动模式中使用 CCO,但没有使用ccoctl
工具进行配置。
-
包含与云供应商关联的 URL 的值表示 CCO 在 AWS STS 或 GCP Workload Identity 中使用手动模式从集群外部创建和管理云凭证。这些集群使用
-
导航至 Administration
19.1.2.2. 使用 CLI 确定 Cloud Credential Operator 模式
您可以使用 CLI 确定 Cloud Credential Operator (CCO) 配置为使用哪种模式。
只有 Amazon Web Services (AWS)、全局 Microsoft Azure 和 Google Cloud Platform (GCP) 集群支持多个 CCO 模式。
先决条件
- 您可以使用集群管理员权限访问 OpenShift Container Platform 帐户。
-
已安装 OpenShift CLI(
oc
)。
流程
-
以具有
cluster-admin
角色的用户身份登录到集群中的oc
。 要确定 CCO 被配置为使用的模式,请输入以下命令:
$ oc get cloudcredentials cluster \ -o=jsonpath={.spec.credentialsMode}
以下输出值可能,但并非所有平台上都不支持所有值:
-
''
:CCO 在默认模式下运行。在这个配置中,CCO 以 mint 或 passthrough 模式运行,具体取决于安装期间提供的凭证。 -
Mint
:CCO 在 mint 模式中运行。 -
Passthrough
:CCO 在 passthrough 模式运行。 -
Manual
:CCO 以手动模式运行。
重要要确定 AWS 或 GCP 集群的特定配置,其
spec.credentialsMode
为''
,Mint
, 或Manual
,您必须进一步调查。AWS 和 GCP 集群支持使用删除了 root secret 的 mint 模式。
使用手动模式的 AWS 或 GCP 集群可能会被配置为使用 AWS 安全令牌服务 (STS) 或 GCP Workload Identity 从集群外部创建和管理云凭证。您可以通过检查集群
Authentication
对象来确定集群是否使用了此策略。-
仅使用默认 (
''
) 的 AWS 或 GCP 集群 :要确定集群是否以 mint 还是 passthrough 模式运行,请运行以下命令:$ oc get secret <secret_name> \ -n kube-system \ -o jsonpath \ --template '{ .metadata.annotations }'
其中
<secret_name>
是 AWS 的aws-creds
或 GCP 的gcp-credentials
。此命令显示集群 root secret 对象中
.metadata.annotations
参数的值。可能会有以下输出值:-
Mint
:CCO 在 mint 模式中运行。 -
Passthrough
:CCO 在 passthrough 模式运行。
如果您的集群使用 mint 模式,您也可以确定集群是否在没有 root secret 的情况下运行。
-
仅使用 mint 模式的 AWS 或 GCP 集群:要确定集群是否在没有 root secret 的情况下运行,请运行以下命令:
$ oc get secret <secret_name> \ -n=kube-system
其中
<secret_name>
是 AWS 的aws-creds
或 GCP 的gcp-credentials
。如果存在 root secret,这个命令的输出会返回有关 secret 的信息。错误表示集群中不存在 root secret。
仅使用手动模式的 AWS 或 GCP 集群 :要确定集群是否被配置为从集群外部创建和管理云凭证,请运行以下命令:
$ oc get authentication cluster \ -o jsonpath \ --template='{ .spec.serviceAccountIssuer }'
此命令显示集群
Authentication
对象中.spec.serviceAccountIssuer
参数的值。-
包含与云供应商关联的 URL 的输出表示 CCO 在 AWS STS 或 GCP Workload Identity 中使用手动模式从集群外部创建和管理云凭证。这些集群使用
ccoctl
工具进行配置。 -
空输出表示集群以手动模式使用 CCO,但没有使用
ccoctl
工具进行配置。
-
包含与云供应商关联的 URL 的输出表示 CCO 在 AWS STS 或 GCP Workload Identity 中使用手动模式从集群外部创建和管理云凭证。这些集群使用
19.1.3. 默认行为
对于支持多个模式的平台(AWS、Azure 和 GCP),当 CCO 采用默认模式运行时,它会动态检查提供的凭证,以确定它们足以处理 credentialsRequest
CR 的模式。
默认情况下,CCO 决定凭证是否足以满足 mint 模式(首选操作模式),并使用这些凭证为集群中组件创建适当的凭证。如果凭据不足以满足 mint 模式,它会决定凭证是否足以满足 passthrough 模式。如果凭据不足以满足 passthrough 模式,则 CCO 无法正确处理 CredentialsRequest
CR。
如果确定提供的凭证在安装过程中不足,安装会失败。对于 AWS,安装程序在进程早期失败,并指示缺少哪些所需权限。在遇到错误之前,其他供应商可能不会提供有关错误原因的具体信息。
如果在安装成功后修改凭证,并且 CCO 确定新凭证不足,CCO 会给任何新的 CredentialsRequest
CR 设置条件,表示因为凭证不足而无法处理这些凭证。
要解决凭据不足的问题,请为凭证提供足够权限。如果在安装过程中出现错误,请尝试再次安装。对于新 CredentialsRequest
CR 的问题,请等待 CCO 尝试再次处理 CR。另外,您可以为 AWS、Azure 和 GCP 手动创建 IAM。