您可以使用许可名单和政策来控制哪些特权工作负载可以在 Google Kubernetes Engine (GKE) Autopilot 模式下运行。本文档介绍了 Autopilot 对工作负载强制执行的默认限制、您可以在 Autopilot 模式下运行的特权工作负载类型,以及控制特权工作负载准入的方法。
本文档适用于以下人员:
- 希望在 Autopilot 模式下运行来自各种来源的特权 GKE 工作负载的平台管理员和运维人员。
- 希望通过屏蔽除特定工作负载之外的所有特权工作负载来提高组织安全状况的身份和账号管理员。
关于 Autopilot 模式下的特权工作负载
为了提高安全状况,Autopilot 模式集群和节点
默认会强制执行特定的
安全限制。例如,Autopilot 会拒绝在容器中将 spec.securityContext.privileged 字段设置为 true 的大多数 Pod。Autopilot 中的特权工作负载是指不符合这些默认限制的工作负载。 默认情况下, Google Cloud
组织中的 Autopilot 节点会拒绝特权工作负载。
只有当集群具有与这些工作负载匹配的许可名单时,特定特权工作负载才能在 Autopilot 模式下运行。 当集群管理员创建或修改集群时,他们可以指定集群可以运行的许可名单的路径。默认情况下,每个 Google Cloud 组织都支持 来自 Autopilot 合作伙伴和经过验证的开源项目的许可名单。
组织管理员可以使用Organization Policy Service通过以下方式修改此默认行为:
- 允许来自 GKE Autopilot 合作伙伴 的所有工作负载和经过验证的开源工作负载。这是所有 Google Cloud 组织中的默认行为。
- 允许特定合作伙伴工作负载或经过验证的开源工作负载。
- 仅允许特定客户拥有的特权工作负载。
- 拒绝所有特权工作负载。
这种 全部拒绝,然后允许部分 方法是一种安全最佳实践,可让您准确控制 GKE 集群中哪些内容以超出规定的特权运行。
在以下情况下,您可能需要控制 Autopilot 模式下的特权工作负载:
- 您 在 Standard 集群中以 Autopilot 模式运行工作负载,并且希望特权工作负载 在这些节点上运行。
- 您希望仅允许一组特定的特权工作负载在您的组织、文件夹或项目中运行。
特权 Autopilot 工作负载的来源
下表介绍了您可以在 Autopilot 中运行的特权工作负载类型:
| 特权工作负载类型 | |
|---|---|
| Autopilot 合作伙伴工作负载 | 部分合作伙伴会为 Google Cloud 特权工作负载 Autopilot 模式提供。GKE 会验证这些合作伙伴 工作负载。任何客户都可以使用这些工作负载。默认情况下,任何 客户都可以在任何 Autopilot 或 Standard 集群中安装相应的许可名单。 如需详细了解可用的合作伙伴工作负载,请参阅 Autopilot 合作伙伴。 |
| 开源工作负载 | 特定特权开源工作负载具有许可名单,可让 您在 Autopilot 模式下运行这些工作负载。GKE 会验证这些工作负载。默认情况下,任何客户都可以在任何 Autopilot 或 Standard 集群中安装相应的许可名单。 如需详细了解可用的开源工作负载,请参阅 在 GKE Autopilot 上运行特权开源工作负载。 |
| 客户拥有的工作负载 | 如果您是符合条件的客户,并且拥有希望在 Autopilot 节点中运行的特权工作负载,则可以为这些工作负载创建许可名单。默认情况下,此功能对所有 Google Cloud 组织处于停用状态。您可以使用 Organization Policy Service 为特定工作负载添加许可清单路径,然后更新集群以安装这些许可清单。 如需了解详情,请参阅 客户拥有的特权工作负载 部分。 |
特权工作负载准入控制的工作原理
如需允许特定特权工作负载在 Autopilot 节点中运行,请安装与每个工作负载对应的许可名单。 这些许可名单是 WorkloadAllowlist Kubernetes 自定义资源。 GKE 会根据集群中的任何 WorkloadAllowlist 验证工作负载详细信息,并且仅当详细信息匹配时才允许准入。默认情况下, 组织中的每个 Autopilot 或 Standard 集群 Google Cloud都允许您为 Autopilot 合作伙伴 工作负载和开源工作负载安装 WorkloadAllowlist。
从总体上讲,在 Autopilot 节点中运行特权工作负载涉及以下步骤:
- 组织管理员验证
container.managed.autopilotPrivilegedAdmission受管理组织政策限制是否允许从特定来源安装许可名单。如需了解详情,请参阅 许可名单的组织政策受管理限制 部分。 - 对于客户拥有的特权工作负载,平台管理员会创建与特权工作负载匹配的许可名单。如需了解详情,请参阅 客户拥有的特权工作负载 部分。
- 集群管理员配置 Autopilot 或 Standard 集群,以允许从特定来源安装许可名单。如需了解详情,请参阅集群配置部分。
- 集群管理员创建一个 AllowlistSynchronizer,用于引用许可清单的路径。AllowlistSynchronizer 会安装许可清单并保持许可清单最新状态。如需了解详情,请参阅 许可清单安装部分。
完成这些步骤后,应用运维人员即可在集群中部署特权工作负载。
许可名单的组织政策受管理限制
默认情况下,每个 Google Cloud 组织都会强制执行基于
container.managed.autopilotPrivilegedAdmission
托管式限制的组织
政策。此限制定义了一组文件或目录路径,GKE 集群可以从中安装许可名单。集群配置必须使用此限制的参数中的许可名单路径。
默认情况下,autopilotPrivilegedAdmission 限制允许使用经批准的 GKE 合作伙伴和开源项目拥有的所有许可名单。此设置与 GKE 集群的默认配置相匹配,后者可以安装任何这些经批准的许可名单。
作为组织政策管理员,您可以修改可应用于组织、文件夹或项目中的 GKE 集群的许可清单路径集。例如,如需允许使用组织拥有的自定义许可名单,您可以将该许可名单路径添加到受管理限制。
托管式限制参数
autopilotPrivilegedAdmission 托管式限制具有以下规范:
spec:
rules:
- enforce: true
parameters:
allowAnyGKEPath: ALLOW_GKE_PATHS
allowPaths:
- PATH1
- PATH2
- PATH3
规范中的以下字段控制集群可以使用的许可名单集:
allowAnyGKEPath:一个布尔值,用于控制集群是否可以使用 GKE 批准的默认许可名单路径集。此参数支持以下值:True:集群管理员可以配置集群,而无需修改许可清单配置,可以使用一个或多个以gke://开头的许可清单路径,也可以使用空字符串来停用集群的所有许可清单。True是此参数的默认值。False:集群管理员必须使用空字符串作为许可清单来源或使用allowPaths参数中的任何许可清单路径来配置集群。
allowPaths:一个经批准的许可名单来源列表,集群管理员在配置集群时可以从中指定值。您可以指定特定许可清单文件的路径或整个目录的路径。
下表介绍了以不同方式配置这些参数的结果:
allowAnyGKEPath 值 |
allowPaths 值 |
结果 |
|---|---|---|
True |
空或未指定。 | 集群管理员可以在集群 创建或修改期间执行以下任一操作:
|
False |
空或未指定。 | 集群管理员必须为集群许可名单 配置指定一个空值。如果集群管理员跳过许可名单路径配置,则 集群创建或修改会失败。 |
True |
已指定值。 | 集群管理员可以在集群 创建或修改期间执行以下任一操作:
|
False |
已指定值。 | 集群管理员必须在集群 创建或修改期间执行以下任一操作:
|
如需详细了解如何在 组织政策中控制特权工作负载准入,请参阅 限制组织中的特权 GKE 工作负载。
客户拥有的特权工作负载
作为 GKE 客户,您可能拥有自己的专用工作负载,这些工作负载需要比默认 Autopilot 安全限制允许的更高的集群权限。在 GKE 1.35 及更高版本中,您可以通过创建许可名单将这些工作负载从默认 Autopilot 限制中排除。
许可清单是用于定义 WorkloadAllowlist Kubernetes 自定义资源的 YAML 文件。WorkloadAllowlist 的规范与 Kubernetes Pod 规范中的各个字段相匹配。定义 WorkloadAllowlist 时,您需要将 WorkloadAllowlist 中的值与特权工作负载规范中的相应字段进行匹配。您需要将 YAML 文件存储在 Cloud Storage 存储桶中。
如需在集群中安装这些客户拥有的许可名单,必须执行以下步骤:
- 组织管理员将 Cloud Storage 路径添加到组织政策。如需了解详情,请参阅 关于组织政策受管理限制 部分。
- 您将 Cloud Storage 路径添加到集群配置。如需了解 详情,请参阅 集群配置部分。
如需详细了解如何创建自己的 WorkloadAllowlist,请参阅 为特权 Autopilot 工作负载创建许可名单。
集群配置
如需在 Autopilot 模式下运行特权工作负载,集群管理员需要将一个或多个经批准的许可名单路径添加到集群配置。将路径添加到集群后,应用运维人员即可在集群中安装相应的许可名单和特权工作负载。
默认情况下,您可以安装来自 Autopilot 合作伙伴和经批准的开源项目的许可名单。由于组织政策,此默认的经批准的许可名单来源集可能会发生变化,如上一部分所述。如果组织政策控制着经批准的许可名单路径,您必须与组织管理员协调以确定这些路径。然后,您可以在集群配置中指定一个或多个经批准的路径。
如需详细了解如何配置集群,请参阅 在 Autopilot 中运行特权工作负载。
许可清单安装
如需在集群中安装来自经批准来源的许可名单,您可以使用名为 AllowlistSynchronizer 的 Kubernetes 自定义资源。您可以像创建 Pod 和 Deployment 等其他 Kubernetes 资源一样定义和创建 AllowlistSynchronizer。每个 AllowlistSynchronizer 都有一个您要在集群中安装的许可名单的路径列表。
创建 AllowlistSynchronizer 时,GKE 会从这些路径安装许可名单并保持许可名单最新状态。GKE 每 10 分钟检查一次许可名单文件的更改。如果存在更新,同步器会在集群中安装更新后的许可名单。
在 GKE 根据 AllowlistSynchronizer 安装许可名单后,您可以在集群中创建相应的特权工作负载。
如需详细了解如何在集群中安装许可名单,请参阅 在 Autopilot 中运行特权工作负载。
列入许可清单的路径
在组织政策或集群中配置许可名单支持时,您可以指定一个或多个您已批准安装的 WorkloadAllowlist 的路径。这些路径的语法取决于创建 WorkloadAllowlist 的人员,如下所示:
特定 Autopilot 合作伙伴和经批准的开源项目:
gke://REPOSITORY_PATH/SELECTOR替换以下内容:
REPOSITORY_PATH:包含工作负载许可名单的目录的路径,例如Grafana/alloy。如需详细了解这些工作负载的许可名单路径,请参阅以下页面:SELECTOR:特定文件的名称或*字符,用于选择该目录中的每个文件。
例如,以下路径会选择
Grafana/alloy目录中的任何许可名单:gke://Grafana/alloy/*-
gs://DIRECTORY_PATH/SELECTOR将
DIRECTORY_PATH替换为 Cloud Storage 中包含许可清单文件的目录的路径。您可以指定多个路径。
您可以在组织政策或集群配置中指定上述一个或多个路径。例如,您可以将 GKE 合作伙伴工作负载和客户拥有的工作负载添加到同一配置。您还可以使用 * 字符选择所有许可名单。例如,gke://* 会选择来自任何来源的任何 GKE 批准的许可名单。
下表介绍了组织政策或集群中支持某些目标所需的配置:
| 目标 | 组织政策配置 | 集群配置 |
|---|---|---|
| 允许所有 GKE 批准的 WorkloadAllowlist | 执行以下操作:
|
执行下列其中一项操作:
|
| 仅允许特定 GKE 批准的 WorkloadAllowlist | 执行以下操作:
|
创建或更新集群时,指定特定 GKE 批准的 WorkloadAllowlist 的路径。组织政策可能会限制您可以指定的 GKE 批准的路径。 |
| 仅允许客户管理的 WorkloadAllowlist | 执行以下操作:
|
创建或更新集群时,指定客户管理的 WorkloadAllowlist 的路径。您指定的路径必须位于组织政策的
allowPaths 参数中。 |
| 阻止使用 WorkloadAllowlist | 执行以下操作:
|
创建或更新集群时,将空字符串 "" 设置为经批准的路径。 |