通过机密 GKE 节点加密使用中的工作负载数据

本页面介绍如何使用机密 Google Kubernetes Engine 节点强制加密节点和工作负载内使用中的数据。强制执行加密有助于提高工作负载的安全性。

本页面适用于在 GKE 上实施安全措施的安全专家。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务

在阅读本页面之前,请确保您熟悉使用中的数据的概念。

什么是机密 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 节点设置 说明 行为
工作负载级层 ComputeClass 中配置机密 GKE 节点,然后在工作负载中选择该 ComputeClass。GKE 会创建使用该配置的节点来运行您的 Pod。

无论集群模式或节点池类型如何,工作负载设置均支持以下任何机密计算技术:

  • AMD SEV
  • AMD SEV-SNP
  • Intel TDX
集群级层 此设置不可逆。

在创建新的 Autopilot 或 Standard 集群时启用机密 GKE 节点。集群中的所有节点均使用机密 GKE 节点。您无法替换单个节点池或工作负载的集群设置。

在集群级层支持的技术取决于集群的运行模式,如下所示:

  • Autopilot 集群:AMD SEV
  • Standard 集群
    • AMD SEV
    • AMD SEV-SNP
    • Intel TDX
节点池级层 在 Standard 集群中创建新节点池时启用机密 GKE 节点。只有在集群级层停用机密 GKE 节点时,才能使用此方法。

在节点池级层支持的技术取决于节点池是否使用节点自动预配功能,如下所示:

  • 手动创建的节点池
    • AMD SEV
    • AMD SEV-SNP
    • Intel TDX
  • 自动预配的节点池
    • AMD SEV
    • AMD SEV-SNP

Hyperdisk Balanced 的机密模式

您还可以在启动磁盘存储空间上启用Hyperdisk Balanced 的机密模式,以便在由硬件支持的其他隔离区上加密您的数据。

您可以在执行以下任一操作时为 Hyperdisk Balanced 启用机密模式:

  • 创建新集群
  • 创建新的节点池

您无法通过更新现有集群或节点池来更改 Hyperdisk Balanced 的机密模式设置。

下表展示了在集群级层或节点池级曾启用 Hyperdisk Balanced 的机密模式设置时应用的 GKE 行为:

Hyperdisk Balanced 的机密模式设置 如何配置 行为
集群级层 创建新集群 只有集群中的默认节点池会使用 Hyperdisk Balanced 的机密模式设置。您无法执行以下操作:
  • 为集群中的现有节点池停用 Hyperdisk Balanced 的机密模式设置
  • 在现有集群上启用 Hyperdisk Balanced 的机密模式设置
节点池级层 创建新的节点池 您可以在创建时为任何新节点池配置 Hyperdisk Balanced 的机密模式设置。您无法通过更新现有节点池来使用 Hyperdisk Balanced 的机密模式设置。

价格

根据您配置机密 GKE 节点的方式,我们将按以下价格收费:

机密 GKE 节点价格
工作负载级层

在 Autopilot 工作负载中,具有以下两种收费选项:

  • Autopilot 按节点结算,适用于 Pod 运行的 Compute Engine 机器系列。如需了解详情,请参阅 Google Kubernetes Engine 价格中的“具有特定硬件要求的 Pod”部分。
  • 机密 GKE 节点价格。如需了解详情,请参阅机密虚拟机价格中的“GKE Autopilot 上的机密 GKE 节点价格”部分。

在 Standard 工作负载中,具有以下两种收费选项:

集群级层

在 Autopilot 集群中,具有以下两种收费选项:

  • 均衡型计算类价格,因为集群中的默认机器系列会更改为 N2D。如需了解详情,请参阅 Google Kubernetes Engine 价格中的“均衡型和扩容型计算类 Pod”部分。
  • 机密 GKE 节点价格。如需了解详情,请参阅机密虚拟机价格中的“GKE Autopilot 上的机密 GKE 节点价格”部分。

在 Standard 集群中,具有以下两种收费选项:

节点池级层

在 Standard 节点池中,具有以下收费选项:

此外,机密 GKE 节点在启动时生成的日志数据可能比非机密 GKE 节点的节点生成的日志数据略多。如需详细了解日志价格,请参阅 Google Cloud Observability 的价格

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 命令以获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。

要求

机密 GKE 节点具有以下要求:

  • Autopilot 集群必须运行 GKE 1.30.2 版或更高版本。
  • Standard 集群必须运行以下 GKE 版本之一,具体取决于您选择的机密计算技术:

    • AMD SEV:任何 GKE 版本。
    • AMD SEV-SNP:1.32.2-gke.1297000 或更高版本。
    • Intel TDX:1.32.2-gke.1297000 或更高版本。
  • 如需在工作负载级层启用机密 GKE 节点,Autopilot 和 Standard 集群必须运行 GKE 1.33.3-gke.1392000 版或更高版本。

  • 节点必须使用支持您所选的机密计算技术的机器类型。如需了解详情,请参阅机器类型、CPU 和可用区

  • 集群控制平面和节点必须位于支持您所选的机密计算技术的位置。如需了解详情,请参阅查看支持的区域

在工作负载级层配置机密 GKE 节点

如需在单独的工作负载中启用机密 GKE 节点,您可以使用 ComputeClass。ComputeClass 是一种 Kubernetes 自定义资源,可用于定义 GKE 创建的新节点的属性,以及控制硬件不可用时的回退行为。ComputeClass 支持 GKE 的所有可用机密计算技术,即使特定技术在集群或节点池级层不受支持也是如此。

如需在工作负载级层配置机密 GKE 节点,请按以下步骤操作:

  1. 可选:对于 GKE Standard 集群,为该集群启用节点自动预配功能。对于 Autopilot 集群,请跳过此步骤。

    如果您选择对完全手动创建的节点池使用 ComputeClass,则还必须在这些节点池上手动配置节点污点和节点标签。这种额外的手动配置可能会导致您发现使用 ComputeClass 创建机密 GKE 节点的好处减少。

  2. 将以下清单保存为 YAML 文件。如需详细了解 ComputeClass 支持的字段和值,请参阅 ComputeClass CustomResourceDefinition

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      nodePoolConfig:
        confidentialNodeType: CONFIDENTIAL_COMPUTE_TECHNOLOGY
      nodePoolAutoCreation:
        enabled: true
      activeMigration:
        optimizeRulePriority: true
      priorityDefaults:
        location:
          zones: ['ZONE1','ZONE2']
      priorities:
      - machineFamily: MACHINE_SERIES
      - machineType: MACHINE_TYPE
      whenUnsatisfiable: DoNotScaleUp
    

    替换以下内容:

    • COMPUTE_CLASS:新计算类的名称。
    • CONFIDENTIAL_COMPUTE_TECHNOLOGY:要使用的机密计算技术。支持以下值:

      • SEV(适用于 AMD SEV)
      • SEV_SNP(适用于 AMD SEV-SNP)
      • TDX(适用于 Intel TDX)
    • ZONE1,ZONE2,...:要在其中创建节点的可用区,例如 ['us-central1-a','us-central1-b']。指定支持您指定的机密计算技术的可用区。如需了解详情,请参阅查看支持的可用区

    • MACHINE_SERIES:节点的机器系列,例如 n2d。指定支持您指定的机密计算技术的机器系列。如需了解详情,请参阅机器类型、CPU 和可用区

    • MACHINE_TYPE 节点的机器类型,例如 n2d-standard-4。指定支持您指定的机密计算技术的机器类型。如需了解详情,请参阅机器类型、CPU 和可用区

    此清单包含 spec.nodePoolAutoCreation 字段,其值为 enabled: true,这可让 GKE 通过使用节点自动预配功能来创建新的节点池。

  3. 在集群中创建 ComputeClass:

    kubectl apply -f PATH_TO_COMPUTE_CLASS_MANIFEST
    

    PATH_TO_COMPUTE_CLASS_MANIFEST 替换为 ComputeClass 清单文件的路径。

  4. 将以下 Deployment 清单保存为 YAML 文件:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloweb
      labels:
        app: hello
    spec:
      selector:
        matchLabels:
          app: hello
      template:
        metadata:
          labels:
            app: hello
        spec:
          nodeSelector:
            # Replace with the name of a compute class
            cloud.google.com/compute-class: COMPUTE_CLASS 
          containers:
          - name: hello-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            ports:
            - containerPort: 8080
            resources:
              requests:
                cpu: "250m"
                memory: "1Gi"

  5. 创建 Deployment:

    kubectl apply -f PATH_TO_DEPLOYMENT_MANIFEST
    

    PATH_TO_DEPLOYMENT_MANIFEST 替换为 Deployment 清单文件的路径。

GKE 为此工作负载创建的新节点会使用您指定的机密计算技术。这些节点在您选择的某个可用区内运行,所用机器类型是在 ComputeClass 中定义的。GKE 会添加节点污点和节点标签,以便只有选择相同 ComputeClass 的 Pod 才能在节点上运行。

在集群级层配置机密 GKE 节点

您可以为整个 Autopilot 或 Standard 集群启用机密 GKE 节点,这意味着集群中的每个节点都使用机密 GKE 节点。因此,您在该集群中部署的所有工作负载都会在机密 GKE 节点上运行。您无法替换单个工作负载或节点池中的集群设置。

创建新的 Autopilot 集群

Autopilot 集群仅支持集群级 AMD SEV。当您启用机密 GKE 节点后,Autopilot 集群中的默认机器系列会更改为 N2D。您无需更改工作负载清单,您的所有工作负载都将在这些机密节点上运行。

  • 运行以下命令:

    gcloud container clusters create-auto CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-confidential-nodes
    

    替换以下内容:

    • CLUSTER_NAME:Autopilot 集群的名称。
    • CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 区域,例如 us-central1

    集群必须运行 1.30.2 或更高版本。 如需了解详情,请参阅使用特定发布渠道和版本创建 Autopilot 集群

创建新的 Standard 集群

您可以在创建 Standard 集群时为节点指定机密计算技术。在创建集群时指定技术会产生以下影响:

  • 您只能在该集群中创建使用机密 GKE 节点的节点池或工作负载。
  • 您无法更新集群来停用机密 GKE 节点。
  • 您无法替换单个节点池或工作负载中的集群级机密计算技术。

一旦在集群级配置机密计算设置便无法更改。 因此,在创建集群之前,请考虑以下用例:

如需创建使用机密 GKE 节点的 Standard 模式集群,请选择以下选项之一:

gcloud

创建新集群时,请在 gcloud CLI 中指定 --confidential-node-type 选项:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --machine-type=MACHINE_TYPE \
    --node-locations=ZONE1,ZONE2,... \
    --confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY

替换以下内容:

  • CLUSTER_NAME:您的集群的名称。
  • LOCATION:集群控制平面的 Compute Engine 位置。相应位置必须支持您指定的机密计算技术。如需了解详情,请参阅可用性部分。
  • MACHINE_TYPE:支持您指定的机密计算技术的机器类型。如需了解详情,请参阅可用性部分。
  • ZONE1,ZONE2,...:控制平面区域中支持新的机密计算技术的可用区的英文逗号分隔列表。如需了解详情,请参阅查看支持的区域
  • CONFIDENTIAL_COMPUTE_TECHNOLOGY:要使用的机密计算技术。支持以下值:

    • sev:AMD SEV
    • sev_snp:AMD SEV-SNP
    • tdx:Intel TDX

您还可以在集群创建命令中使用 --enable-confidential-nodes 标志。如果您在命令中仅指定此标志,则集群会使用 AMD SEV。您在命令中指定的机器类型必须支持 AMD SEV。不过,如果您在同一命令中指定 --confidential-node-type 标志,GKE 会使用您在 --confidential-node-type 标志中指定的值。

控制台

  1. 在 Google Cloud 控制台中,前往创建 Kubernetes 集群页面。

    前往“创建一个 Kubernetes 集群”页面

  2. 在导航菜单的集群部分中,点击安全

  3. 选中启用机密 GKE 节点复选框。

  4. 需要更改对话框中,点击进行更改

  5. 类型菜单中,选择要使用的机密计算技术。

    如果您选择的技术需要特定的 Compute Engine 机器系列,系统会显示一个对话框。点击进行更改以更新节点池的机器系列。

  6. 在导航菜单的节点池部分中,点击 default-pool

  7. 节点池详细信息窗格中,执行以下操作:

    1. 选中指定节点位置复选框。系统会显示集群所在区域中的可用区列表。
    2. 选中支持您为节点选择的机密计算技术的可用区对应的复选框。如需了解详情,请参阅查看支持的区域
  8. 点击创建

如需详细了解如何创建集群,请参阅创建区域性集群

对于任何使用 Hyperdisk Balanced 的机密模式设置创建的节点池,只有节点池中的节点会受限于设置配置。对于在集群中创建的任何新节点池,您必须在创建时设置机密模式。

配置节点自动预配

您可以配置节点自动预配,以便在自动预配的节点池中使用机密 GKE 节点。节点自动预配支持以下机密计算技术:

  • AMD SEV
  • AMD SEV-SNP

如需将机密 GKE 节点与节点自动预配搭配使用,请在创建集群时指定 --enable-confidential-nodes gcloud CLI 标志。需额外注意以下事项:

  • 创建集群时,请选择节点自动预配支持的机密计算技术。此选择在集群级层是不可逆的。
  • 在现有集群上启用节点自动预配功能时,集群必须已在使用节点自动预配功能支持的机密 GKE 节点技术。
  • 当您在部署工作负载时,请验证工作负载是否选择了集群的机密计算技术以及与该技术兼容的机器系列。

在节点池级层配置机密 GKE 节点

如果在集群级层停用机密 GKE 节点,您可以在特定节点池上启用机密 GKE 节点。

必须在节点池创建请求期间指定 Hyperdisk Balanced 的机密模式设置。

创建新的节点池

如需创建启用了机密 GKE 节点的新节点池,请选择以下选项之一:

gcloud

运行以下命令:

gcloud container node-pools create NODE_POOL_NAME \
    --location=LOCATION \
    --cluster=CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --node-locations=ZONE1,ZONE2,... \
    --confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY

替换以下内容:

  • NODE_POOL_NAME:新节点池的名称。
  • LOCATION:新节点池的位置。相应位置必须支持您指定的机密计算技术。如需了解详情,请参阅可用性部分。
  • CLUSTER_NAME:您的集群的名称。
  • MACHINE_TYPE:支持您指定的机密计算技术的机器类型。如需了解详情,请参阅可用性部分。
  • ZONE1,ZONE2,...:集群区域中支持新的机密计算技术的可用区的英文逗号分隔列表。如需了解详情,请参阅查看支持的区域
  • CONFIDENTIAL_COMPUTE_TECHNOLOGY:要使用的机密计算技术。支持以下值:

    • sev:AMD SEV
    • sev_snp:AMD SEV-SNP
    • tdx:Intel TDX

您还可以在集群创建命令中使用 --enable-confidential-nodes 标志。如果您在命令中仅指定此标志,则集群会使用 AMD SEV。您在命令中指定的机器类型必须支持 AMD SEV。不过,如果您在同一命令中指定 --confidential-node-type 标志,GKE 会使用您在 --confidential-node-type 标志中指定的值。

控制台

  1. 在 Google Cloud 控制台中,前往 Kubernetes 集群页面:

    转到 Kubernetes 集群

  2. 点击 Standard 集群的名称。

  3. 点击 添加节点池

  4. 在导航菜单中,点击安全

  5. 节点安全性窗格中,执行以下操作:

    1. 选中启用机密 GKE 节点复选框。
    2. 需要更改对话框中,点击进行更改
    3. 类型菜单中,选择要使用的机密计算技术。

      如果您选择的技术需要特定的 Compute Engine 机器系列,系统会显示一个对话框。点击进行更改以更新节点池的机器系列。

  6. 在导航菜单中,点击节点池详情

  7. 节点池详细信息窗格中,执行以下操作:

    1. 选中指定节点位置复选框。系统会显示集群所在区域中的可用区列表。
    2. 选中支持您为节点选择的机密计算技术的可用区对应的复选框。如需了解详情,请参阅查看支持的区域
  8. 可选:为节点池配置其他设置。

  9. 点击创建

更新现有节点池

此更改需要重新创建节点,这可能会导致正在运行的工作负载中断。如需详细了解此特定更改,请在使用节点升级策略(而不遵循维护政策)重新创建节点的手动更改表格中找到相应的行。如需详细了解节点更新,请参阅规划节点更新中断

您可以更新现有节点池以使用机密 GKE 节点,也可以切换节点使用的机密计算技术。节点池必须满足以下所有要求:

  • 节点使用支持所选机密计算技术的机器类型。
  • 节点在支持所选机密计算技术的可用区中运行。

由于机密计算技术之间的机器类型和位置可用性可能有所不同,因此您可能需要在启用特定的机密计算技术之前更新节点池的这些属性。

如需更新现有节点池以使用机密 GKE 节点,请选择以下其中一个选项:

gcloud

您可以使用 gcloud CLI 在节点池启用机密 GKE 节点,也可以更改节点的机密计算技术。

  1. 如果节点池已使用机密 GKE 节点,请停用机密 GKE 节点。 等待节点池更新操作完成。
  2. 将节点池机器类型和节点位置更改为受支持的值,以使用新的机密计算技术:

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=CLUSTER_LOCATION \
        --machine-type=MACHINE_TYPE \
        --node-locations=ZONE1,ZONE2,...
    

    替换以下内容:

    • NODE_POOL_NAME:现有节点池的名称。
    • CLUSTER_NAME:集群的名称。
    • CLUSTER_LOCATION:集群的位置。
    • MACHINE_TYPE:支持新的机密计算技术的机器类型。如需了解详情,请参阅可用性部分。
    • ZONE1,ZONE2,...:集群区域中支持新的机密计算技术的可用区的英文逗号分隔列表。如需了解详情,请参阅查看支持的区域
  3. 更新节点池,并指定要使用的机密计算技术:

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=CLUSTER_LOCATION \
        --confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY
    

    CONFIDENTIAL_COMPUTE_TECHNOLOGY 替换为要使用的机密计算技术。支持以下值:

    • sev:AMD SEV
    • sev_snp:AMD SEV-SNP
    • tdx:Intel TDX

控制台

只有当节点池的机器类型受您选择的机密计算技术支持时,您才能更新现有节点池以使用机密 GKE 节点。如果节点不使用受支持的机器类型,请改用本部分中的 gcloud CLI 说明。

  1. 在 Google Cloud 控制台中,前往 Kubernetes 集群页面:

    转到 Kubernetes 集群

  2. 点击 Standard 集群的名称。

  3. 点击节点标签页。

  4. 点击要修改的节点池的名称。

  5. 节点池详情页面中,点击 修改。系统会打开修改节点池窗格。

  6. 可用区部分中,验证所选可用区是否支持机密计算技术。如需了解详情,请参阅查看支持的区域

    如果所选可用区不支持相应技术,请执行以下操作:

    1. 取消选中不受支持的可用区对应的复选框。
    2. 可选:选中其他受支持的可用区对应的复选框。
    3. 点击保存。等待节点池更新操作完成。
    4. 点击 修改以重新打开修改节点池窗格。
  7. 安全性部分中,选中启用机密 GKE 节点复选框。

  8. 类型菜单中,为节点选择机密计算技术。

  9. 点击保存

仅将工作负载放在机密节点池中

如果在集群级层启用机密 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 SEV
    • SEV_SNP:AMD SEV-SNP
    • TDX: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 节点

您可以通过检查集群、节点池、节点或 Compute Engine 实例,了解集群或节点是否使用机密 GKE 节点。

验证集群

从下列选项中选择一项:

gcloud

描述集群:

gcloud container clusters describe CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --format='yaml(confidentialNodes.confidentialInstanceType)'

如果启用了机密 GKE 节点,则输出类似于以下内容:

confidentialNodes:
  confidentialInstanceType: CONFIDENTIAL_COMPUTE_SELECTOR

控制台

  1. 在 Google Cloud 控制台中,前往 Kubernetes 集群页面。

    转到 Kubernetes 集群

  2. 点击您要检查的集群的名称。

  3. 安全部分中,验证机密 GKE 节点字段的值是否为已启用

验证节点池

从下列选项中选择一项:

gcloud

描述节点池:

gcloud container node-pools describe NODE_POOL_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --format='yaml(confidentialNodes.confidentialInstanceType,enableConfidentialStorage)'

如果启用了机密 GKE 节点,则输出类似于以下内容:

confidentialNodes:
  confidentialInstanceType: CONFIDENTIAL_COMPUTE_SELECTOR

如果还启用了 Hyperdisk Balanced 的机密模式,则输出类似于以下内容:

confidentialNodes:
  confidentialInstanceType: CONFIDENTIAL_COMPUTE_SELECTOR
enableConfidentialStorage: true

控制台

  1. 在 Google Cloud 控制台中,前往 Kubernetes 集群页面。

    转到 Kubernetes 集群

  2. 点击您要检查的集群的名称。

  3. 点击节点池的名称。

  4. 安全部分中,验证机密 GKE 节点字段的值是否为已启用

验证特定节点

  1. 找到节点名称:

    kubectl get nodes
    
  2. 描述节点:

    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 节点标签表示该节点是机密节点。

设置组织政策限制条件

您可以定义组织政策限制条件,以确保整个组织中创建的所有虚拟机资源都是机密虚拟机实例。对于 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

  1. 将以下清单保存在名为 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 密钥的名称
  2. 创建 StorageClass:

    kubectl create -f hdb-example-class.yaml
    
  3. 创建适用于 GKE 的 Hyperdisk 永久性卷声明,该声明使用 Hyperdisk Balanced 的机密模式卷。

如需查找集群中可用的 StorageClass 的名称,请运行以下命令:

kubectl get sc

限制

机密 GKE 节点具有以下限制:

Hyperdisk Balanced 的机密模式具有以下限制:

实时迁移限制

使用 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

运行以下命令:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CLUSTER_LOCATION \
    --no-enable-confidential-nodes

控制台

  1. 在 Google Cloud 控制台中,前往 Kubernetes 集群页面:

    转到 Kubernetes 集群

  2. 点击 Standard 集群的名称。

  3. 点击节点标签页。

  4. 点击要修改的节点池的名称。

  5. 节点池详情页面中,点击 修改。系统会打开修改节点池窗格。

  6. 安全部分中,取消选中启用机密 GKE 节点复选框。

  7. 点击保存

后续步骤