6.7. 在 kube-system 项目中存储管理员级别的 secret 的替代方案


默认情况下,管理员 secret 存储在 kube-system 项目中。如果您在 install-config.yaml 文件中将 credentialsMode 参数配置为 Manual,则必须使用以下替代方案之一:

6.7.1. 手动创建长期凭证

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

流程

  1. 在安装程序使用的 GCP 帐户中添加以下粒度权限:

    例 6.3. 所需的 GCP 权限

    • 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
  2. 如果您没有将 install-config.yaml 配置文件中的 credentialsMode 参数设置为 Manual,请修改值,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...

  3. 如果您之前还没有创建安装清单文件,请运行以下命令:

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

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

  4. 运行以下命令,使用安装文件中的发行镜像设置 $RELEASE_IMAGE 变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  5. 运行以下命令,从 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
    1
    --included 参数仅包含特定集群配置所需的清单。
    2
    指定 install-config.yaml 文件的位置。
    3
    指定要存储 CredentialsRequest 对象的目录的路径。如果指定的目录不存在,这个命令会创建它。

    此命令为每个 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
      ...

  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
          ...
      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.7.2. 将 GCP 集群配置为使用短期凭证

要安装配置为使用 GCP Workload Identity 的集群,您必须配置 CCO 实用程序并为集群创建所需的 GCP 资源。

6.7.2.1. 配置 Cloud Credential Operator 工具

当 Cloud Credential Operator(CCO)以手动模式运行时,要从集群外部创建和管理云凭证,提取并准备 CCO 实用程序(ccoctl)二进制文件。

注意

ccoctl 工具是在 Linux 环境中运行的 Linux 二进制文件。

先决条件

  • 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
  • 已安装 OpenShift CLI(oc)。
  • 您已在安装程序使用的 GCP 帐户中添加了以下身份验证选项之一:

    • IAM Workload Identity Pool Admin 角色。
    • 以下粒度权限:

      例 6.4. 所需的 GCP 权限

      • 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

流程

  1. 运行以下命令,为 OpenShift Container Platform 发行镜像设置变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 运行以下命令,从 OpenShift Container Platform 发行镜像获取 CCO 容器镜像:

    $ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
    注意

    确保 $RELEASE_IMAGE 的架构与将使用 ccoctl 工具的环境架构相匹配。

  3. 运行以下命令,将 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 的主机指定这个值。
  4. 运行以下命令更改权限以使 ccoctl 可执行:

    $ chmod 775 ccoctl.<rhel_version>

验证

  • 要验证 ccoctl 是否准备就绪,可以尝试显示帮助文件。运行命令时使用相对文件名,例如:

    $ ./ccoctl.rhel9

    输出示例

    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
      nutanix      Manage credentials objects for Nutanix
    
    Flags:
      -h, --help   help for ccoctl
    
    Use "ccoctl [command] --help" for more information about a command.

6.7.2.2. 使用 Cloud Credential Operator 实用程序创建 GCP 资源

您可以使用 ccoctl gcp create-all 命令自动创建 GCP 资源。

注意

默认情况下,ccoctl 在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir 标志。此流程使用 <path_to_ccoctl_output_dir> 来引用这个目录。

先决条件

您必须:

  • 提取并准备好 ccoctl 二进制文件。

流程

  1. 运行以下命令,使用安装文件中的发行镜像设置 $RELEASE_IMAGE 变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 运行以下命令,从 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
    1
    --included 参数仅包含特定集群配置所需的清单。
    2
    指定 install-config.yaml 文件的位置。
    3
    指定要存储 CredentialsRequest 对象的目录的路径。如果指定的目录不存在,这个命令会创建它。
    注意

    此命令可能需要一些时间才能运行。

  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
    1
    为用于跟踪的所有创建 GCP 资源指定用户定义的名称。
    2
    指定在其中创建云资源的 GCP 区域。
    3
    指定在其中创建云资源的 GCP 项目 ID。
    4
    指定包含 CredentialsRequest 清单文件的目录,以创建 GCP 服务帐户。
    注意

    如果您的集群使用 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

    您可以通过查询 GCP 来验证是否已创建 IAM 服务帐户。如需更多信息,请参阅有关列出 IAM 服务帐户的 GCP 文档。

6.7.2.3. 整合 Cloud Credential Operator 实用程序清单

要为单个组件在集群外实现短期安全凭证,您必须将创建 Cloud Credential Operator 实用程序 (ccoctl) 的清单文件移到安装程序的正确目录中。

先决条件

  • 您已使用托管集群的云平台配置了帐户。
  • 您已配置了 Cloud Credential Operator 实用程序 (ccoctl)。
  • 已使用 ccoctl 工具创建了集群所需的云供应商资源。

流程

  1. 在安装程序使用的 GCP 帐户中添加以下粒度权限:

    例 6.5. 所需的 GCP 权限

    • 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
  2. 如果您没有将 install-config.yaml 配置文件中的 credentialsMode 参数设置为 Manual,请修改值,如下所示:

    配置文件片段示例

    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...

  3. 如果您之前还没有创建安装清单文件,请运行以下命令:

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

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

  4. 运行以下命令,将 ccoctl 工具生成的清单复制到安装程序创建的 manifests 目录中:

    $ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
  5. 将包含私钥的 tls 目录复制到安装目录中:

    $ cp -a /<path_to_ccoctl_output_dir>/tls .
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.