本页面介绍如何使用机密 Google Kubernetes Engine 节点强制加密节点和工作负载内使用中的数据。强制执行加密有助于提高工作负载的安全性。
本页面适用于在 GKE 上实施安全措施的安全专家。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务。
在阅读本页面之前,请确保您熟悉使用中的数据的概念。
什么是机密 GKE 节点?
您可以使用机密 GKE 节点或 Hyperdisk Balanced 的机密模式来加密工作负载。
机密 GKE 节点
机密 GKE 节点是在 Compute Engine 机密虚拟机的基础上构建的,可使用基于硬件的内存加密来保护使用中的数据。机密 GKE 节点支持以下机密计算技术:
- AMD 安全加密虚拟化 (SEV)
- AMD 安全加密虚拟化-安全嵌套分页 (SEV-SNP)
- Intel Trust Domain Extensions (TDX)
如需详细了解这些技术,并获得有关如何选择最符合您要求的技术的帮助,请参阅机密虚拟机概览。
机密 GKE 节点不会更改 GKE 对集群控制平面应用的安全措施。如需了解这些措施,请参阅控制平面安全。如需了解哪些人可以访问您的 Google Cloud项目中的控制平面,请使用 Access Transparency。
您可以执行以下操作来启用机密 GKE 节点:
- 创建新集群
- 使用节点自动预配功能部署工作负载
- 创建节点池
- 更新现有节点池
您无法通过更新现有集群来更改集群级机密 GKE 节点设置。
下表展示了在您启用机密 GKE 节点时应用的 GKE 行为:
机密 GKE 节点设置 | 如何配置 | 行为 |
---|---|---|
集群级层 | 创建新的 Autopilot 或 Standard 模式集群 | 所有节点均使用机密 GKE 节点。此操作不可撤销。您无法替换单个节点的设置。 在 GKE Autopilot 集群中,所有节点都会自动使用 Balanced 计算类的默认机器系列,即 N2D。 |
节点池级层 |
|
GKE 会加密该节点池中节点的内存内容。只有在集群级层停用机密 GKE 节点时,才能执行此操作。 |
Hyperdisk Balanced 的机密模式
您还可以在启动磁盘存储空间上启用Hyperdisk Balanced 的机密模式,以便在由硬件支持的其他隔离区上加密您的数据。
您可以在执行以下任一操作时为 Hyperdisk Balanced 启用机密模式:
- 创建新集群
- 创建新的节点池
您无法通过更新现有集群或节点池来更改 Hyperdisk Balanced 的机密模式设置。
下表展示了在集群级层或节点池级曾启用 Hyperdisk Balanced 的机密模式设置时应用的 GKE 行为:
Hyperdisk Balanced 的机密模式设置 | 如何配置 | 行为 |
---|---|---|
集群级 | 创建新集群 | 只有集群中的默认节点池会使用 Hyperdisk Balanced 的机密模式设置。您无法执行以下操作:
|
节点池级层 | 创建新的节点池 | 您可以在创建时为任何新节点池配置 Hyperdisk Balanced 的机密模式设置。您无法通过更新现有节点池来使用 Hyperdisk Balanced 的机密模式设置。 |
价格
适用以下价格:
Autopilot:
- 将根据 Balanced 计算类的价格收费,因为启用机密 GKE 节点会将集群中的默认机器系列更改为 N2D。如需详细了解价格信息,请参阅 Autopilot 价格。
- 除了 GKE Autopilot 价格之外,您还需要为机密 GKE 节点付费。如需了解详情,请参阅机密虚拟机价格中的“GKE Autopilot 上的机密 GKE 节点价格”部分。
Standard:部署机密 GKE 节点无需额外费用,但需要支付 Compute Engine 机密虚拟机的费用。但是,机密 GKE 节点在启动时生成的日志数据可能比标准节点生成的日志数据要多一点。如需了解日志价格,请参阅 Google Cloud Observability 的价格。
可用性
机密 GKE 节点具有以下可用性要求:
- 您的节点必须位于支持您所选的机密计算技术的可用区或区域中。如需了解详情,请参阅查看支持的区域。
- 您的 Autopilot 集群必须使用 GKE 1.30.2 或更高版本。
- 您的 Standard 节点池必须使用受支持的机器类型之一和 Container-Optimized OS 节点映像。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
要求
- 您的 Autopilot 集群必须使用 GKE 1.30.2 或更高版本。
- 您的 Standard 节点池必须使用受支持的机器类型之一和 Container-Optimized OS 节点映像。
您的 Standard 集群和节点池必须使用以下 GKE 版本之一,具体取决于您选择的机密计算技术:
- AMD SEV:任何可用的 GKE 版本。
- AMD SEV-SNP:1.32.2-gke.1297000 或更高版本。
- Intel TDX:1.32.2-gke.1297000 或更高版本。
在 Autopilot 中使用机密 GKE 节点
您可以为整个 Autopilot 集群启用机密 GKE 节点,这将使每个节点都成为机密节点。您的所有工作负载都将在机密节点上运行,且无需更改工作负载清单。启用机密 GKE 节点会将集群中的默认机器系列更改为 N2D。
在新的 Autopilot 集群上启用机密 GKE 节点
运行以下命令:
gcloud container clusters create-auto CLUSTER_NAME \
--location=LOCATION \
--enable-confidential-nodes
替换以下内容:
CLUSTER_NAME
:Autopilot 集群的名称。LOCATION
:集群的 Compute Engine 位置。
集群必须运行 1.30.2 或更高版本。如需在创建集群时设置特定版本,请参阅设置新的 Autopilot 集群的版本和发布渠道。
在 Standard 模式中使用机密 GKE 节点
在 Standard 模式中,您可以在集群级层或节点池级层启用机密 GKE 节点。
在 Standard 集群上启用机密 GKE 节点
您可以在创建集群时为节点指定机密计算技术。在创建集群时指定技术会产生以下所有影响:
- 您不能在该集群中创建不使用机密 GKE 节点的节点池。
- 您无法更新集群来停用机密 GKE 节点。
- 您无法在单个节点池中替换集群级机密计算技术。
一旦在集群级配置机密计算设置便无法更改。 因此,在创建集群之前,请考虑以下用例:
如需在集群中使用节点自动预配,您必须执行以下所有操作:
- 使用 gcloud CLI 创建集群,并在集群创建命令中指定
--enable-confidential-nodes
标志。 - 选择节点自动预配支持的机密计算技术。
如需了解详情,请参阅将机密 GKE 节点与节点自动预配搭配使用部分。
- 使用 gcloud CLI 创建集群,并在集群创建命令中指定
如需使用不同的机密计算技术来加密集群中的特定节点池,请跳过本部分,并在节点池级指定相应技术。
如需创建使用机密 GKE 节点的 Standard 模式集群,请选择以下选项之一:
gcloud
创建新集群时,请在 gcloud CLI 中指定 --confidential-node-type
选项:
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--machine-type=MACHINE_TYPE \
--confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY
替换以下内容:
CLUSTER_NAME
:您的集群的名称。LOCATION
:集群的 Compute Engine 位置。相应位置必须支持您指定的机密计算技术。如需了解详情,请参阅可用性部分。MACHINE_TYPE
:支持您指定的机密计算技术的机器类型。如需了解详情,请参阅可用性部分。CONFIDENTIAL_COMPUTE_TECHNOLOGY
:要使用的机密计算技术。支持以下值:sev
:AMD SEVsev_snp
:AMD SEV-SNPtdx
:Intel TDX
您还可以在集群创建命令中使用 --enable-confidential-nodes
标志。如果您在命令中仅指定此标志,则集群会使用 AMD SEV。您在命令中指定的机器类型必须支持 AMD SEV。不过,如果您在同一命令中指定 --confidential-node-type
标志,GKE 会使用您在 --confidential-node-type
标志中指定的值。
控制台
在 Google Cloud 控制台中,前往创建 Kubernetes 集群页面。
在导航窗格的集群下,点击安全。
选中启用机密 GKE 节点复选框。
根据需要配置集群。
点击创建。
如需详细了解如何创建集群,请参阅创建区域性集群。
对于任何使用 Hyperdisk Balanced 的机密模式设置创建的节点池,只有节点池中的节点会受限于设置配置。对于在集群中创建的任何新节点池,您必须在创建时设置机密模式。
在节点池上启用机密 GKE 节点
如果在集群级层停用机密 GKE 节点,您可以在特定节点池上启用机密 GKE 节点。
必须在节点池创建请求期间指定 Hyperdisk Balanced 的机密模式设置。
创建新的节点池
如需创建启用机密 GKE 节点的新节点池,请运行以下命令:
gcloud container node-pools create NODE_POOL_NAME \
--location=LOCATION \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY
替换以下内容:
NODE_POOL_NAME
:新节点池的名称。LOCATION
:新节点池的位置。相应位置必须支持您指定的机密计算技术。如需了解详情,请参阅可用性部分。CLUSTER_NAME
:您的集群的名称。MACHINE_TYPE
:支持您指定的机密计算技术的机器类型。如需了解详情,请参阅可用性部分。CONFIDENTIAL_COMPUTE_TECHNOLOGY
:要使用的机密计算技术。支持以下值:sev
:AMD SEVsev_snp
:AMD SEV-SNPtdx
:Intel TDX
您还可以在集群创建命令中使用 --enable-confidential-nodes
标志。如果您在命令中仅指定此标志,则集群会使用 AMD SEV。您在命令中指定的机器类型必须支持 AMD SEV。不过,如果您在同一命令中指定 --confidential-node-type
标志,GKE 会使用您在 --confidential-node-type
标志中指定的值。
更新现有节点池
此更改需要重新创建节点,这可能会导致正在运行的工作负载中断。如需详细了解此特定更改,请在使用节点升级策略(而不遵循维护政策)重新创建节点的手动更改表格中找到相应的行。如需详细了解节点更新,请参阅规划节点更新中断。
您可以更新现有节点池以使用机密 GKE 节点,也可以切换节点使用的机密计算技术。如需更新现有节点池以使用机密 GKE 节点,请运行以下命令:
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY
替换以下内容:
- NODE_POOL_NAME:节点池的名称。
- CLUSTER_NAME:您的集群的名称。
CONFIDENTIAL_COMPUTE_TECHNOLOGY:要使用的机密计算技术。支持以下值:
sev
:AMD SEVsev_snp
:AMD SEV-SNPtdx
:Intel TDX
节点必须已使用支持您正在更新节点使用的机密计算技术的机器类型。如果您的节点使用的机器类型不支持所选技术(例如,您使用的机器类型具有 AMD CPU,但您想启用 Intel TDX),请执行以下操作:
- 如果节点池已使用机密 GKE 节点,请停用机密 GKE 节点。
- 更改节点池的机器类型。
- 运行上述命令,将节点池更新为使用新的机密计算设置。
将机密 GKE 节点与节点自动预配搭配使用
您可以配置节点自动预配,以便在自动预配的节点池中使用机密 GKE 节点。节点自动预配支持以下机密计算技术:
- AMD SEV
- AMD SEV-SNP
如需将机密 GKE 节点与节点自动预配搭配使用,请在创建集群、创建节点池或更新节点池时指定 --enable-confidential-nodes
gcloud CLI 标志。需额外注意以下事项:
- 创建新的自动预配节点池:确保您选择的机密计算技术在节点自动预配中受支持。
- 更新现有节点池:确保您选择的机密计算技术在节点自动预配中受支持。
- 创建新集群:确保您选择的机密计算技术在节点自动预配中受支持。此选择在集群级是不可逆的。
- 更新现有集群:集群必须已在使用机密 GKE 节点。集群使用的机密 GKE 节点技术必须是节点自动预配支持的技术。
仅将工作负载放在机密 GKE 节点节点池中
如果在集群级层启用机密 GKE 节点,则所有工作负载都会在机密节点上运行。您无需更改清单。不过,如果您仅为特定 Standard 模式节点池启用机密 GKE 节点,则应以声明方式表明工作负载只能在具有机密 GKE 节点的节点池上运行。
如需要求工作负载在特定的机密计算技术上运行,请使用带有
cloud.google.com/gke-confidential-nodes-instance-type
标签的节点选择器,如以下示例所示:apiVersion: v1 kind: Pod spec: # For readability, lines are omitted from this example manifest nodeSelector: cloud.google.com/gke-confidential-nodes-instance-type: "CONFIDENTIAL_COMPUTE_SELECTOR"
将
CONFIDENTIAL_COMPUTE_SELECTOR
替换为节点池所用技术的名称。此字段支持以下值(您必须大写):SEV
:AMD SEVSEV_SNP
:AMD SEV-SNPTDX
:Intel TDX
如需让工作负载在任何机密节点上运行(无论采用何种机密计算技术),请使用节点亲和性规则,如以下示例所示:
apiVersion: v1 kind: Pod spec: containers: - name: confidential-app image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: cloud.google.com/gke-confidential-nodes-instance-type operator: Exists
如需让工作负载仅在采用部分可用机密计算技术的节点上运行,请使用类似于以下示例的节点亲和性规则:
apiVersion: v1 kind: Pod spec: containers: - name: confidential-app image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: cloud.google.com/gke-confidential-nodes-instance-type operator: In values: - SEV - SEV_SNP - TDX
在
values
字段中,仅指定要运行工作负载的机密计算技术。
验证是否已启用机密 GKE 节点
您可以检查集群或节点,以查看集群或节点是否使用机密 GKE 节点。
在 Autopilot 模式或 Standard 模式集群上
您可以使用 gcloud CLI 或Google Cloud 控制台来验证 Autopilot 或 Standard 集群正在使用机密 GKE 节点。
gcloud
描述集群:
gcloud container clusters describe CLUSTER_NAME
如果启用了机密 GKE 节点,则输出类似于以下内容,具体取决于您的集群运维模式。
Standard 模式集群
confidentialNodes:
confidentialInstanceType: CONFIDENTIAL_COMPUTE_SELECTOR
Autopilot 模式集群
confidentialNodes:
enabled: true
控制台
前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击您要检查的集群的名称。
在安全下的机密 GKE 节点字段中,验证机密 GKE 节点已启用。
在 Autopilot 模式或 Standard 模式节点上
如需验证特定 Autopilot 或 Standard 节点是否使用机密 GKE 节点,请执行以下操作:
找到节点名称:
kubectl get nodes
描述节点:
kubectl describe NODE_NAME
将
NODE_NAME
替换为要检查的节点的名称。
输出类似于以下内容:
Name: gke-cluster-1-default-pool-affsf335r-asdf
Roles: <none>
Labels: cloud.google.com/gke-boot-disk=pd-balanced
cloud.google.com/gke-container-runtime=containerd
cloud.google.com/gke-confidential-nodes-instance-type=CONFIDENTIAL_COMPUTE_SELECTOR
cloud.google.com/gke-nodepool=default-pool
cloud.google.com/gke-os-distribution=cos
cloud.google.com/machine-family=e2
# lines omitted for clarity
在此输出中,cloud.google.com/gke-confidential-nodes-instance-type
节点标签表示该节点是机密节点。
在 Standard 模式节点池上
如需验证您的节点池使用的是否是机密 GKE 节点,请运行以下命令:
gcloud container node-pools describe NODE_POOL_NAME \
--cluster=CLUSTER_NAME
如果启用了机密 GKE 节点,则输出类似于以下内容:
confidentialNodes:
cloud.google.com/gke-confidential-nodes-instance-type=CONFIDENTIAL_COMPUTE_SELECTOR
如果已启用 Hyperdisk Balanced 的机密模式设置,输出类似于以下内容:
enableConfidentialStorage: true
在各个 Standard 模式节点上
如需验证 Standard 集群中特定节点的机密性,请执行以下任一操作:
设置组织政策限制条件
您可以定义组织政策限制条件,以确保整个组织中创建的所有虚拟机资源都是机密虚拟机实例。对于 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 Balanced 的机密模式创建 PersistentVolume
如需获得允许的吞吐量或 IOPS 值指南,请参阅规划 Hyperdisk 卷的性能级别。
以下示例展示了如何为每种 Hyperdisk 类型创建 Hyperdisk Balanced 的机密模式 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 Balanced 的机密模式卷。
如需查找集群中可用的 StorageClass 的名称,请运行以下命令:
kubectl get sc
限制
机密 GKE 节点具有以下限制:
- Compute Engine 机密虚拟机实例的所有限制均适用于机密 GKE 节点。
- 使用 CMEK 加密磁盘的所有限制都适用于 Hyperdisk Balanced 的机密模式。
- 具有 C2D 机器类型的机密 GKE 节点只能在 GKE 1.24 版或更高版本中使用节点自动预配功能。
- 机密 GKE 节点仅支持由永久性磁盘支持的 PersistentVolumes,前提是您的控制平面运行 GKE 1.22 版或更高版本。如需了解相关说明,请参阅使用 Compute Engine 永久性磁盘 CSI 驱动程序。
- 机密 GKE 节点与单租户节点不兼容。
- 机密 GKE 节点仅支持使用本地 SSD 上的临时存储设备,但一般不支持使用本地 SSD。
- 仅支持 Container-Optimized OS 节点。不支持 Ubuntu 和 Windows 节点。
- Hyperdisk Balanced 的机密模式仅在将 AMD SEV 用作机密计算技术的机密 GKE 节点上受支持。
- GKE Autopilot 集群仅支持 AMD SEV。 不支持 AMD SEV-SNP 和 Intel TDX。
- 如需将节点自动预配与机密 GKE 节点搭配使用,您必须在 Standard 模式集群或节点池 gcloud CLI 命令中使用
--enable-confidential-nodes
标志。节点自动预配不支持 Intel TDX。
实时迁移限制
使用 N2D 机器类型并使用 AMD SEV 作为机密计算技术的 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 节点
您只能在 Standard 模式节点池中停用机密 GKE 节点。如果节点池位于在集群级层使用机密 GKE 节点的集群中,则您无法在节点池级层停用此功能。
运行以下命令以停用节点池上的机密 GKE 节点:
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--no-enable-confidential-nodes
此更改需要重新创建节点,这可能会导致正在运行的工作负载中断。如需详细了解此特定更改,请在使用节点升级策略(而不遵循维护政策)重新创建节点的手动更改表格中找到相应的行。如需详细了解节点更新,请参阅规划节点更新中断。
后续步骤
- 详细了解机密虚拟机
- 详细了解 Google Cloud 静态加密
- 详细了解 Google Cloud 传输加密
- 详细了解客户管理的加密密钥 (CMEK)
- 了解如何远程证明工作负载在机密虚拟机上运行
- 了解如何在机密 GKE 节点上运行 GPU(预览版)