您可以使用许可名单和政策来控制哪些特权工作负载可以在 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 合作伙伴和经过验证的开源项目的许可名单。
组织管理员可以使用组织政策服务,通过以下方式修改此默认行为:
- 允许来自 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 组织停用此功能。您可以使用组织政策服务为特定工作负载添加许可名单路径,然后更新集群以安装这些许可名单。 如需了解详情,请参阅客户自有特权工作负载部分。 |
特权工作负载准入控制的工作原理
如需允许特定特权工作负载在 Autopilot 节点中运行,您需要安装与每个工作负载对应的许可名单。这些许可名单是 WorkloadAllowlist Kubernetes 自定义资源。GKE 会根据集群中的任何 WorkloadAllowlist 验证工作负载详细信息,并且仅在详细信息匹配时才允许准入。默认情况下,组织中的每个 Autopilot 集群或 Standard 集群都允许您为 Autopilot 合作伙伴工作负载和开源工作负载安装 WorkloadAllowlists。 Google Cloud
概括来讲,在 Autopilot 节点中运行特权工作负载涉及以下步骤:
- 组织管理员验证
container.managed.autopilotPrivilegedAdmission受管理的组织政策限制条件是否允许从特定来源安装许可名单。如需了解详情,请参阅有关许可名单的组织政策受管理限制条件部分。 - 对于客户拥有的特权工作负载,平台管理员会创建与特权工作负载匹配的许可名单。如需了解详情,请参阅客户自有特权工作负载部分。
- 集群管理员配置 Autopilot 或 Standard 集群,以允许从特定来源安装许可名单。如需了解详情,请参阅集群配置部分。
- 集群管理员创建一个引用许可名单路径的 AllowlistSynchronizer。AllowlistSynchronizer 会安装许可名单并保持许可名单最新状态。如需了解详情,请参阅将安装列入许可名单部分。
完成这些步骤后,应用运营商即可在集群中部署特权工作负载。
针对许可名单的组织政策受管限制条件
默认情况下,每个 Google Cloud 组织都会强制执行基于container.managed.autopilotPrivilegedAdmission
受管理限制条件的组织政策。
此受管约束具有以下参数:
allowAnyGKEPath:一个布尔值,用于让集群管理员将集群配置为允许从具有gke://前缀的路径安装许可名单。支持以下值:true:允许集群管理员使用 GKE 默认许可名单来源、以gke://开头的任何许可名单路径或空字符串(这会阻止所有许可名单)来配置集群。这是allowAnyGKEPath参数的默认值。false:要求集群管理员使用空字符串作为许可名单来源或使用allowPaths参数中的任何许可名单路径来配置集群。
allowPaths:集群管理员在配置集群时可以指定值的已获批的许可名单来源的列表。
作为组织管理员,您可以更新此政策的参数,以控制哪些特权工作负载可以在您的 Google Cloud组织中运行。例如,以下组织政策配置允许集群管理员仅为特定的 Google Cloud合作伙伴工作负载安装许可名单:
name: organizations/ORGANIZATION_ID/policies/container.managed.autopilotPrivilegedAdmission
spec:
rules:
- enforce: true
parameters:
allowAnyGKEPath: ALLOW_GKE_PATHS
allowPaths:
- PATH1
- PATH2
- PATH3
替换以下内容:
ALLOW_GKE_PATHS:是否允许任何经 GKE 批准的许可名单。请指定以下某个值:True:允许使用任何 GKE 合作伙伴工作负载或经过验证的开源工作负载进行集群配置。这是默认值。False:允许仅使用allowPaths字段中的路径进行集群配置。
PATH1,:集群管理员在配置集群时可以使用的已获批准的许可名单来源的路径列表。默认情况下,此参数为空。如果您为此参数指定了路径,则集群管理员在创建或更新集群时必须指定零个或多个此类路径。PATH2,...
如需详细了解如何在组织政策中控制特权工作负载准入,请参阅限制组织中的特权 GKE 工作负载。
客户拥有的特权工作负载
作为 GKE 客户,您可能拥有自己的专业工作负载,这些工作负载需要在集群中获得比默认 Autopilot 安全限制所允许的更高的权限。在 GKE 1.35 版及更高版本中,您可以通过创建许可名单,将这些工作负载从默认的 Autopilot 限制中排除。
许可名单是一个 YAML 文件,用于定义 WorkloadAllowlist Kubernetes 自定义资源。WorkloadAllowlist 的规范与 Kubernetes Pod 规范中的各个字段相匹配。定义 WorkloadAllowlist 时,您需要将 WorkloadAllowlist 中的值与特权工作负载规范中的相应字段进行匹配。您需要将 YAML 文件存储在 Cloud Storage 存储桶中。
如需在集群中安装这些客户自有许可名单,必须执行以下步骤:
- 组织管理员将 Cloud Storage 路径添加到组织政策。如需了解详情,请参阅关于组织政策受管理的限制条件部分。
- 您需要将 Cloud Storage 路径添加到集群配置中。如需了解详情,请参阅集群配置部分。
如需详细了解如何创建自己的 WorkloadAllowlist,请参阅为特权 Autopilot 工作负载创建许可名单。
集群配置
如需在 Autopilot 模式下运行特权工作负载,集群管理员需要将一个或多个获批的许可名单路径添加到集群配置中。将路径添加到集群后,应用运维人员可以在集群中安装相应的许可名单和特权工作负载。
默认情况下,您可以安装来自 Autopilot 合作伙伴和获批的开源项目的许可名单。由于组织政策,许可名单的这组默认获批来源可能会发生变化,如上一部分所述。如果组织政策控制着已获批准的许可名单路径,您必须与组织管理员协调,以确定这些路径。然后,您可以在集群配置中指定一个或多个获批的路径。
如需详细了解如何配置集群,请参阅在 Autopilot 中运行特权工作负载。
将安装列入许可名单
如需在集群中安装来自已获批准的来源的许可名单,您可以使用名为 AllowlistSynchronizer 的 Kubernetes 自定义资源。您定义和创建 AllowlistSynchronizer 的方式与创建其他 Kubernetes 资源(例如 Pod 和 Deployment)类似。每个 AllowlistSynchronizer 都有一个许可名单路径列表,其中包含您要在集群中安装的许可名单。
创建 AllowlistSynchronizer 后,GKE 会从这些路径安装许可名单,并使许可名单保持最新状态。GKE 会每 10 分钟检查一次许可名单文件的更改。如果存在更新,同步器会在集群中安装更新后的许可名单。
在 GKE 根据 AllowlistSynchronizer 安装许可名单后,您可以在集群中创建相应的特权工作负载。
如需详细了解如何在集群中安装许可名单,请参阅在 Autopilot 中运行特权工作负载。
许可名单路径
在组织政策或集群中配置许可名单支持时,您需要指定一个或多个已获批准可供安装的 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 批准的路径。 |
| 仅允许客户管理的 WorkloadAllowlists | 执行以下操作:
|
在创建或更新集群时,指定客户管理的 WorkloadAllowlist 的路径。您指定的路径必须位于组织政策的 allowPaths 参数中。 |
| 防止使用 WorkloadAllowlists | 执行以下操作:
|
在创建或更新集群时,将获批路径设置为空字符串 ""。 |