$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
您可以通过更新控制平面机器集中的值来更改 Google Cloud Platform (GCP) 控制平面机器的配置并启用功能。保存对控制平面机器集的更新后,控制平面机器集运算符将根据您配置的更新策略更新控制平面机器。
以下示例 YAML 代码片段显示了 GCP 集群的提供程序规范和故障域配置。
为现有集群创建控制平面机器集时,提供程序规范必须与安装程序创建的控制平面机器自定义资源 (CR) 中的 providerSpec
配置匹配。您可以忽略 CR 的故障域部分中设置的任何字段。
在以下示例中,您可以使用 OpenShift CLI 获取集群的一些值。
<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
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 镜像,请指定要使用的产品:
|
3 | 指定云提供商平台类型。请勿更改此值。 |
4 | 指定您用于集群的 GCP 项目名称。 |
5 | 指定集群的 GCP 区域。 |
6 | 指定单个服务帐号。不支持多个服务帐号。 |
7 | 指定控制平面用户数据密钥。请勿更改此值。 |
8 | 此参数在故障域中配置,此处显示为空值。如果此参数的指定值与故障域中的值不同,则 Operator 将使用故障域中的值覆盖它。 |
故障域的控制平面机器集概念类似于现有的 GCP 概念区域。ControlPlaneMachineSet
CR 会尽可能地在多个故障域中分配控制平面机器。
在控制平面机器集中配置 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 | 指定云提供商平台名称。请勿更改此值。 |
您可以通过更新控制平面机器集中的值来启用功能。
您可以通过编辑机器集 YAML 文件来配置机器集在哪些类型的持久性磁盘上部署机器。
有关持久性磁盘类型、兼容性、区域可用性和限制的更多信息,请参阅有关持久性磁盘的 GCP Compute Engine 文档。
在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新文件。
编辑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) 的机密虚拟机。 |
在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新文件。
编辑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 | 指定是否启用机密虚拟机。有效值为Disabled 或Enabled 。 |
2 | 指定在主机维护事件(例如硬件或软件更新)期间 VM 的行为。对于使用机密虚拟机的机器,此值必须设置为Terminate ,这将停止 VM。机密虚拟机不支持实时 VM 迁移。 |
3 | 指定支持机密虚拟机的机器类型。机密虚拟机支持 N2D 和 C2D 系列机器类型。 |
在 Google Cloud 控制台中,查看机器集部署的机器的详细信息,并验证机密虚拟机选项是否与您配置的值匹配。
通过编辑机器集 YAML 文件,您可以配置机器集为其部署的机器使用的 Shielded VM 选项。
有关 Shielded VM 功能和功能的更多信息,请参阅有关Shielded VM的 GCP Compute Engine 文档。
在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新文件。
编辑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 | 指定是否启用完整性监控。有效值为Disabled 或Enabled 。
|
||
3 | 指定是否启用 UEFI 安全启动。有效值为Disabled 或Enabled 。 |
||
4 | 指定是否启用 vTPM。有效值为Disabled 或Enabled 。 |
使用 Google Cloud 控制台,查看机器集部署的机器的详细信息,并验证 Shielded VM 选项是否与您配置的值匹配。
Google Cloud Platform (GCP) Compute Engine 允许用户提供加密密钥来加密静止磁盘上的数据。密钥用于加密数据加密密钥,而不是加密客户的数据。默认情况下,Compute Engine 使用 Compute Engine 密钥加密此数据。
您可以在使用机器 API 的集群中启用客户管理密钥的加密。您必须首先创建 KMS 密钥并为服务帐号分配正确的权限。需要 KMS 密钥名称、密钥环名称和位置才能允许服务帐号使用您的密钥。
如果您不想为 KMS 加密使用专用服务帐号,则改为使用 Compute Engine 默认服务帐号。如果您不使用专用服务帐号,则必须授予默认服务帐号访问密钥的权限。Compute Engine 默认服务帐号名称遵循 |
要允许特定服务帐号使用您的 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
在机器集 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 密钥进行加密。