6.3. 为 AWS 手动创建 IAM

在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system 命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。

6.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。如果没有凭证,则可能会阻止升级。

其他资源

6.3.2. 手动创建 IAM

在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system 命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。

流程

  1. 运行以下命令,切换到包含安装程序的目录并创建 install-config.yaml 文件:

    $ openshift-install create install-config --dir <installation_directory>

    其中 <installation_directory> 是安装程序在其中创建文件的目录。

  2. 编辑 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
  3. 从包含安装程序的目录中运行以下命令来生成清单:

    $ openshift-install create manifests --dir <installation_directory>

    其中 <installation_directory> 是安装程序在其中创建文件的目录。

  4. 在包含安装程序的目录中,运行以下命令来获取构建 openshift-install 二进制文件的 OpenShift Container Platform 发行镜像的详情:

    $ openshift-install version

    输出示例

    release image quay.io/openshift-release-dev/ocp-release:4.y.z-x86_64

  5. 运行以下命令,找到此发行版本镜像中的所有 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: "*"
      ...

  6. 在之前生成的 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-set: TechPreviewNoUpgrade 注解来识别这些对象。

    • 如果不使用这些功能,请不要为这些对象创建 secret。为不使用的技术预览功能创建 secret 可能会导致安装失败。
    • 如果使用这些功能,必须为对应的对象创建 secret。
    • 要使用 TechPreviewNoUpgrade 注解查找 CredentialsRequest 对象,请运行以下命令:

      $ grep "release.openshift.io/feature-set" *

      输出示例

      0000_30_capi-operator_00_credentials-request.yaml:  release.openshift.io/feature-set: TechPreviewNoUpgrade

  7. 从包含安装程序的目录中,开始创建集群:

    $ openshift-install create cluster --dir <installation_directory>
    重要

    在升级使用手动维护凭证的集群前,您必须确保 CCO 处于可升级状态。

6.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 中。

6.3.4. 带有删除或轮转管理员级别的凭证的 Mint 模式

目前,只有 AWS 和 GCP 支持这个模式。

在这个模式中,用户使用管理员级别的凭证安装 OpenShift Container Platform,就像正常的 mint 模式一样。但是,这个过程会在安装后从集群中删除管理员级别的凭证 secret。

管理员可以让 Cloud Credential Operator 自行请求只读凭证,许它验证所有 CredentialsRequest 对象是否有其所需的权限。因此,除非需要更改内容,否则不需要管理员级别的凭证。删除关联的凭证后,可以根据需要在底层云中删除或取消激活它。

注意

在非 z-stream 升级前,您必须使用管理员级别的凭证重新恢复凭证 secret。如果没有凭证,则可能会阻止升级。

管理员级别的凭证不会永久存储在集群中。

按照以下步骤,在短时间内仍然需要集群中的管理员级别的凭证。它还需要使用每次升级的管理员级别的凭证手动重新生成 secret。

6.3.5. 后续步骤