×

您可以通过更新控制平面机器集中的值来更改 Google Cloud Platform (GCP) 控制平面机器的配置并启用功能。保存对控制平面机器集的更新后,控制平面机器集运算符将根据您配置的更新策略更新控制平面机器。

配置 Google Cloud Platform 集群的示例 YAML

以下示例 YAML 代码片段显示了 GCP 集群的提供程序规范和故障域配置。

示例 GCP 提供程序规范

为现有集群创建控制平面机器集时,提供程序规范必须与安装程序创建的控制平面机器自定义资源 (CR) 中的 providerSpec 配置匹配。您可以忽略 CR 的故障域部分中设置的任何字段。

使用 OpenShift CLI 获取的值

在以下示例中,您可以使用 OpenShift CLI 获取集群的一些值。

基础架构 ID

<cluster_id> 字符串是基础架构 ID,基于您配置集群时设置的集群 ID。如果您已安装 OpenShift CLI,则可以通过运行以下命令获取基础架构 ID:

$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
镜像路径

<path_to_image> 字符串是用于创建磁盘的镜像路径。如果您已安装 OpenShift CLI,则可以通过运行以下命令获取镜像路径:

$ oc -n openshift-machine-api \
  -o jsonpath='{.spec.template.machines_v1beta1_machine_openshift_io.spec.providerSpec.value.disks[0].image}{"\n"}' \
  get ControlPlaneMachineSet/cluster
GCP providerSpec 示例值
apiVersion: machine.openshift.io/v1
kind: ControlPlaneMachineSet
metadata:
  name: cluster
  namespace: openshift-machine-api
spec:
# ...
  template:
# ...
      spec:
        providerSpec:
          value:
            apiVersion: machine.openshift.io/v1beta1
            canIPForward: false
            credentialsSecret:
              name: gcp-cloud-credentials (1)
            deletionProtection: false
            disks:
            - autoDelete: true
              boot: true
              image: <path_to_image> (2)
              labels: null
              sizeGb: 200
              type: pd-ssd
            kind: GCPMachineProviderSpec (3)
            machineType: e2-standard-4
            metadata:
              creationTimestamp: null
            metadataServiceOptions: {}
            networkInterfaces:
            - network: <cluster_id>-network
              subnetwork: <cluster_id>-master-subnet
            projectID: <project_name> (4)
            region: <region> (5)
            serviceAccounts: (6)
            - email: <cluster_id>-m@<project_name>.iam.gserviceaccount.com
              scopes:
              - https://www.googleapis.com/auth/cloud-platform
            shieldedInstanceConfig: {}
            tags:
            - <cluster_id>-master
            targetPools:
            - <cluster_id>-api
            userDataSecret:
              name: master-user-data (7)
            zone: "" (8)
1 指定集群的密钥名称。请勿更改此值。
2 指定用于创建磁盘的镜像路径。

要使用 GCP Marketplace 镜像,请指定要使用的产品:

  • OpenShift Container Platform:https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-ocp-413-x86-64-202305021736

  • OpenShift Platform Plus:https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-opp-413-x86-64-202305021736

  • OpenShift Kubernetes Engine:https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-oke-413-x86-64-202305021736

3 指定云提供商平台类型。请勿更改此值。
4 指定您用于集群的 GCP 项目名称。
5 指定集群的 GCP 区域。
6 指定单个服务帐号。不支持多个服务帐号。
7 指定控制平面用户数据密钥。请勿更改此值。
8 此参数在故障域中配置,此处显示为空值。如果此参数的指定值与故障域中的值不同,则 Operator 将使用故障域中的值覆盖它。

GCP 故障域配置示例

故障域的控制平面机器集概念类似于现有的 GCP 概念区域ControlPlaneMachineSet CR 会尽可能地在多个故障域中分配控制平面机器。

在控制平面机器集中配置 GCP 故障域时,必须指定要使用的区域名称。

GCP 故障域示例值
apiVersion: machine.openshift.io/v1
kind: ControlPlaneMachineSet
metadata:
  name: cluster
  namespace: openshift-machine-api
spec:
# ...
  template:
# ...
    machines_v1beta1_machine_openshift_io:
      failureDomains:
        gcp:
        - zone: <gcp_zone_a> (1)
        - zone: <gcp_zone_b> (2)
        - zone: <gcp_zone_c>
        - zone: <gcp_zone_d>
        platform: GCP (3)
# ...
1 指定第一个故障域的 GCP 区域。
2 指定附加故障域。其他故障域的添加方式相同。
3 指定云提供商平台名称。请勿更改此值。

为控制平面机器启用 Google Cloud Platform 功能

您可以通过更新控制平面机器集中的值来启用功能。

使用机器集配置持久性磁盘类型

您可以通过编辑机器集 YAML 文件来配置机器集在哪些类型的持久性磁盘上部署机器。

有关持久性磁盘类型、兼容性、区域可用性和限制的更多信息,请参阅有关持久性磁盘的 GCP Compute Engine 文档。

步骤
  1. 在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新文件。

  2. 编辑providerSpec字段下的以下行:

    apiVersion: machine.openshift.io/v1
    kind: ControlPlaneMachineSet
    ...
    spec:
      template:
        spec:
          providerSpec:
            value:
              disks:
                type: pd-ssd (1)
    1 控制平面节点必须使用pd-ssd磁盘类型。
验证
  • 使用 Google Cloud 控制台,查看机器集部署的机器的详细信息,并验证Type字段是否与配置的磁盘类型匹配。

使用机器集配置机密虚拟机

通过编辑机器集 YAML 文件,您可以配置机器集为其部署的机器使用的机密虚拟机选项。

有关机密虚拟机功能、功能和兼容性的更多信息,请参阅有关机密虚拟机的 GCP Compute Engine 文档。

目前,64 位 ARM 架构不支持机密虚拟机。

OpenShift Container Platform 4.17 不支持某些机密计算功能,例如具有 AMD 安全加密虚拟化安全嵌套分页 (SEV-SNP) 的机密虚拟机。

步骤
  1. 在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新文件。

  2. 编辑providerSpec字段下的以下部分:

    apiVersion: machine.openshift.io/v1
    kind: ControlPlaneMachineSet
    ...
    spec:
      template:
        spec:
          providerSpec:
            value:
              confidentialCompute: Enabled (1)
              onHostMaintenance: Terminate (2)
              machineType: n2d-standard-8 (3)
    ...
    1 指定是否启用机密虚拟机。有效值为DisabledEnabled
    2 指定在主机维护事件(例如硬件或软件更新)期间 VM 的行为。对于使用机密虚拟机的机器,此值必须设置为Terminate,这将停止 VM。机密虚拟机不支持实时 VM 迁移。
    3 指定支持机密虚拟机的机器类型。机密虚拟机支持 N2D 和 C2D 系列机器类型。
验证
  • 在 Google Cloud 控制台中,查看机器集部署的机器的详细信息,并验证机密虚拟机选项是否与您配置的值匹配。

使用机器集配置 Shielded VM 选项

通过编辑机器集 YAML 文件,您可以配置机器集为其部署的机器使用的 Shielded VM 选项。

有关 Shielded VM 功能和功能的更多信息,请参阅有关Shielded VM的 GCP Compute Engine 文档。

步骤
  1. 在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新文件。

  2. 编辑providerSpec字段下的以下部分:

    apiVersion: machine.openshift.io/v1
    kind: ControlPlaneMachineSet
    # ...
    spec:
      template:
        spec:
          providerSpec:
            value:
              shieldedInstanceConfig: (1)
                integrityMonitoring: Enabled (2)
                secureBoot: Disabled (3)
                virtualizedTrustedPlatformModule: Enabled (4)
    # ...
    1 在本节中,指定您想要的任何 Shielded VM 选项。
    2 指定是否启用完整性监控。有效值为DisabledEnabled

    启用完整性监控时,您不得禁用虚拟可信平台模块 (vTPM)。

    3 指定是否启用 UEFI 安全启动。有效值为DisabledEnabled
    4 指定是否启用 vTPM。有效值为DisabledEnabled
验证
  • 使用 Google Cloud 控制台,查看机器集部署的机器的详细信息,并验证 Shielded VM 选项是否与您配置的值匹配。

为机器集启用客户管理的加密密钥

Google Cloud Platform (GCP) Compute Engine 允许用户提供加密密钥来加密静止磁盘上的数据。密钥用于加密数据加密密钥,而不是加密客户的数据。默认情况下,Compute Engine 使用 Compute Engine 密钥加密此数据。

您可以在使用机器 API 的集群中启用客户管理密钥的加密。您必须首先创建 KMS 密钥并为服务帐号分配正确的权限。需要 KMS 密钥名称、密钥环名称和位置才能允许服务帐号使用您的密钥。

如果您不想为 KMS 加密使用专用服务帐号,则改为使用 Compute Engine 默认服务帐号。如果您不使用专用服务帐号,则必须授予默认服务帐号访问密钥的权限。Compute Engine 默认服务帐号名称遵循service-<project_number>@compute-system.iam.gserviceaccount.com模式。

步骤
  1. 要允许特定服务帐号使用您的 KMS 密钥并向服务帐号授予正确的 IAM 角色,请使用您的 KMS 密钥名称、密钥环名称和位置运行以下命令:

    $ gcloud kms keys add-iam-policy-binding <key_name> \
      --keyring <key_ring_name> \
      --location <key_ring_location> \
      --member "serviceAccount:service-<project_number>@compute-system.iam.gserviceaccount.com” \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter
  2. 在机器集 YAML 文件中的providerSpec字段下配置加密密钥。例如:

    apiVersion: machine.openshift.io/v1
    kind: ControlPlaneMachineSet
    ...
    spec:
      template:
        spec:
          providerSpec:
            value:
              disks:
              - type:
                encryptionKey:
                  kmsKey:
                    name: machine-encryption-key (1)
                    keyRing: openshift-encrpytion-ring (2)
                    location: global (3)
                    projectID: openshift-gcp-project (4)
                  kmsKeyServiceAccount: openshift-service-account@openshift-gcp-project.iam.gserviceaccount.com (5)
    1 用于磁盘加密的客户管理加密密钥的名称。
    2 KMS 密钥所属的 KMS 密钥环的名称。
    3 KMS 密钥环所在的 GCP 位置。
    4 可选:KMS 密钥环所在的项目的 ID。如果未设置项目 ID,则使用创建机器集的机器集projectID
    5 可选:用于给定 KMS 密钥的加密请求的服务帐号。如果未设置服务帐号,则使用 Compute Engine 默认服务帐号。

    使用更新的providerSpec 对象配置创建新机器时,磁盘加密密钥将使用 KMS 密钥进行加密。