本页面介绍如何使用机密 Google Kubernetes Engine 节点强制加密节点和工作负载内使用中的数据。
概览
机密 GKE 节点是使用 AMD 安全加密虚拟化 (SEV) 在 Compute Engine 机密虚拟机的基础上构建的,可对使用中虚拟机的内存内容进行加密。使用中加密是端到端加密的三种状态之一。
在集群或节点池上启用机密 GKE 节点时,机密节点上运行的工作负载中的数据会进行使用中加密。如需了解控制平面,请使用 Access Transparency。
您可以在执行以下任一操作时启用机密 GKE 节点:
- 创建新集群
- 创建新的节点池
- 更新现有节点池
您无法更新现有集群来更改集群级机密 GKE 节点设置。
下表展示了在集群级或节点池级启用机密 GKE 节点时应用的 GKE 行为:
机密 GKE 节点设置 | 如何配置 | 行为 |
---|---|---|
集群级 | 创建新集群 | 任何节点池的集群中的所有节点均使用机密 GKE 节点。您无法执行以下操作:
|
节点池级层 |
|
只有在集群级停用此功能时才能为节点池配置机密 GKE 节点。 |
价格
部署机密 GKE 节点无需额外费用,但需要支付 Compute Engine 机密虚拟机的费用。但是,机密 GKE 节点在启动时生成的日志数据可能比标准节点生成的日志数据要多一点。如需了解日志价格,请参阅 Google Cloud Observability 的价格。
可用性
机密 GKE 节点适用于以下情况:
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
在集群上启用机密 GKE 节点
您可以使用 gcloud CLI 或 Google Cloud 控制台创建启用了机密 GKE 节点的新集群。如果在集群级层启用机密 GKE 节点,则集群中的所有节点均为机密虚拟机。
gcloud
创建新集群时,请在 gcloud CLI 中指定 --enable-confidential-nodes
选项:
gcloud container clusters create CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--enable-confidential-nodes
替换以下内容:
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击 add_box 创建。
在标准部分中,点击配置。
在导航窗格的集群下,点击安全。
选中启用机密 GKE 节点复选框。
根据需要配置集群。
点击创建。
如需详细了解如何创建集群,请参阅创建区域性集群。
创建具有机密 GKE 节点的集群后,在此集群中创建的所有节点池都只能使用机密节点。您无法在启用了机密 GKE 节点的集群中创建常规节点池。您也无法在集群级启用机密 GKE 节点时在单个节点池上停用机密 GKE 节点。
在节点池上启用机密 GKE 节点
如果在集群级层停用机密 GKE 节点,您可以在特定节点池上启用机密 GKE 节点。
创建新的节点池
如需创建启用机密 GKE 节点的新节点池,请运行以下命令:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--enable-confidential-nodes
替换以下内容:
更新现有节点池
您可以在使用 N2D 机器类型或 C2D 机器类型的现有节点池上启用机密 GKE 节点。运行以下命令:
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--enable-confidential-nodes
替换以下内容:
- NODE_POOL_NAME:节点池的名称。
- CLUSTER_NAME:您的集群的名称。
验证是否已启用机密 GKE 节点
在集群上
您可以使用 gcloud CLI 或 Google Cloud 控制台来验证集群正在使用机密 GKE 节点。
gcloud
描述集群:
gcloud container clusters describe CLUSTER_NAME
如果启用了机密 GKE 节点,则该命令的输出包括以下行:
confidentialNodes:
enabled: true
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击您要检查的集群的名称。
在安全下的机密 GKE 节点字段中,验证机密 GKE 节点已启用。
在节点池上
如需验证您的节点池使用的是否是机密 GKE 节点,请运行以下命令:
gcloud container node-pools describe NODE_POOL_NAME \
--cluster=CLUSTER_NAME
如果启用了机密 GKE 节点,则输出类似于以下内容:
confidentialNodes:
enabled: true
节点上
如需验证特定节点的机密性,您可以执行以下操作:
在机密 GKE 节点上运行应用
Google 的机密计算方法是为现有应用启用轻松的直接原样迁移。您当前运行的 GKE 工作负载无需更改代码即可在机密 GKE 节点上运行。
(可选)如果要以声明方式表明工作负载只能在具有机密 GKE 节点的集群上运行,您可以使用 cloud.google.com/gke-confidential-nodes
节点选择器。以下是使用此选择器的 Pod 规范示例:
apiVersion: v1
kind: Pod
spec:
containers:
- name: my-confidential-app
image: us-docker.pkg.dev/myproject/myrepo/my-confidential-app
nodeSelector:
cloud.google.com/gke-confidential-nodes: "true"
设置组织政策限制条件
您可以定义组织政策限制条件,以确保整个组织中创建的所有虚拟机资源都是机密虚拟机实例。对于 GKE,您可以自定义限制非机密计算限制条件,以要求在启用机密 GKE 节点的情况下创建所有新集群。强制执行组织政策限制条件时,将 container.googleapis.com
API 服务名称添加到拒绝列表,例如:
gcloud resource-manager org-policies deny \
constraints/compute.restrictNonConfidentialComputing compute.googleapis.com container.googleapis.com \
--project=PROJECT_ID
将 PROJECT_ID 替换为您的项目 ID。
为适用于平衡 Hyperdisk 的机密模式创建 PersistentVolume
如需获得允许的吞吐量或 IOPS 值指南,请参阅规划 Hyperdisk 卷的性能级别。
以下示例展示了如何为每种 Hyperdisk 类型创建适用于平衡 Hyperdisk StorageClass 的机密模式:
平衡 Hyperdisk
将以下清单保存在名为
confidential-hdb-example-class.yaml
的文件中:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: balanced-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-balanced provisioned-throughput-on-create: "250Mi" provisioned-iops-on-create: "7000" enable-confidential-storage: true disk-encryption-kms-key: "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/HSM_KEY_NAME"
替换以下内容:
KMS_PROJECT_ID
:拥有 Cloud KMS 密钥的项目REGION
:磁盘所在的区域KEY_RING
:包含密钥的密钥环的名称HSM_KEY_NAME
:用于加密磁盘的 HSM 密钥的名称
创建 StorageClass:
kubectl create -f hdb-example-class.yaml
创建适用于 GKE 的 Hyperdisk 永久性卷声明,该声明使用适用于平衡 Hyperdisk 卷的机密模式。
如需查找集群中可用的 StorageClass 的名称,请运行以下命令:
kubectl get sc
限制
机密 GKE 节点具有以下限制:
- Compute Engine 机密虚拟机实例的所有限制均适用于机密 GKE 节点。
- 具有 C2D 机器类型的机密 GKE 节点只能在 GKE 1.24 版或更高版本中使用节点自动预配功能。
- 机密 GKE 节点仅支持由永久性磁盘支持的 PersistentVolumes,前提是您的控制平面运行 GKE 1.22 版或更高版本。如需了解相关说明,请参阅使用 Compute Engine 永久性磁盘 CSI 驱动程序。
- 机密 GKE 节点与 GPU 不兼容。
- 机密 GKE 节点与单租户节点不兼容。
- 机密 GKE 节点仅支持使用本地 SSD 上的临时存储设备,但一般不支持使用本地 SSD。
- 仅支持 Container-Optimized OS 节点。不支持 Ubuntu 和 Windows 节点。
- Autopilot 集群不支持机密 GKE 节点。
- 如需了解平衡 Hyperdisk 的机密模式的更多信息,请参阅限制部分。
实时迁移限制
某些 Compute Engine 机密虚拟机机器类型支持实时迁移,这可最大限度地减少主机维护事件对工作负载造成的干扰。实时迁移发生在以下 GKE 版本中:
- 1.27.10-gke.1218000 及更高版本
- 1.28.6-gke.1393000 及更高版本
- 1.29.1-gke.1621000 及更高版本
如果您的节点池在添加实时迁移时已运行受支持的版本,请手动将节点池升级到相同或其他受支持的版本。升级节点会触发节点重新创建,并且新节点已启用实时迁移。
如需详细了解哪些 Compute Engine 机器类型支持实时迁移,请参阅受支持的配置。
如果在不支持实时迁移的节点上发生主机维护事件,则该节点会进入 NotReady
状态。运行 Pod 将会中断,直到节点再次准备就绪为止。如果维护时间超过五分钟,GKE 可能会尝试在其他节点上重新创建 Pod。
停用机密 GKE 节点
停用机密 GKE 节点仅适用于已启用机密 GKE 节点的节点池。如果集群是使用机密 GKE 节点创建的,则无法停用该功能。运行以下命令以停用节点池上的机密 GKE 节点:
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--no-enable-confidential-nodes
后续步骤
- 详细了解机密虚拟机。
- 详细了解节点映像。
- 详细了解 Google Cloud 静态加密。
- 详细了解 Google Cloud 传输加密。
- 详细了解 CMEK(客户管理的加密密钥)。
- 详细了解应用层 Secret 加密。