本页面介绍了如何安装政策控制器。政策控制器会根据与安全、法规或业务规则相关的政策检查、审核和实施集群的合规性。
本页面适用于想要提供并维护自动化以进行审核或强制执行,从而确保云平台中运行的所有资源满足组织合规性要求的 IT 管理员和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。
如果您使用 Google Kubernetes Engine (GKE) Enterprise 版,则可以使用 Policy Controller。如需了解详情,请参阅 Google Kubernetes Engine (GKE) Enterprise 版价格。
须知事项
在开始之前,请确保您已执行以下任务:
- 安装并初始化 Google Cloud CLI,它提供了以下说明中使用的
gcloud
、kubectl
和nomos
命令。如果您之前安装了 gcloud CLI,请运行gcloud components update
以获取最新版本。如果您使用 Cloud Shell,则系统会预安装 Google Cloud CLI。 确保您的集群上未安装开源 Open Policy Agent Gatekeeper。如果已安装,请卸载 Gatekeeper,然后再安装 Policy Controller。
启用必需的 API:
控制台
启用 Policy Controller API。
gcloud
运行以下命令:
gcloud services enable anthos.googleapis.com anthospolicycontroller.googleapis.com
创建运行 Kubernetes 1.14.x 或更高版本的集群,或确保您有权访问此集群。Policy Controller 似乎可以在版本低于 1.14.x 的 Kubernetes 上运行,但无法正常工作。
如果您计划使用 Google Cloud CLI 配置 Policy Controller,请立即将集群注册到舰队。如果您计划使用 Google Cloud 控制台,请在安装 Policy Controller 时注册集群。
如果您使用的是 GKE 关联集群,请确保 AKS 集群没有 Azure 政策插件,并避免使用
control-plane
键为命名空间添加标签。如果您使用的是 Google Distributed Cloud on VMware 或 Google Distributed Cloud on Bare Metal,请确保在用户集群上安装 Policy Controller。Policy Controller 无法安装在管理员集群上。
安装 Policy Controller
控制台
如需在 Google Cloud 控制台中安装 Policy Controller,请完成以下步骤:
- 在 Google Cloud 控制台中,前往安全状况管理部分下的 GKE Enterprise 政策页面。
点击 add 配置 Policy Controller。
可选:如需更改默认舰队设置,请点击自定义舰队设置。在显示的对话框中,执行以下操作:
- 在添加/修改政策包部分,点击相关切换开关以包含或排除政策包。
在修改 Policy Controller 配置部分,执行以下操作:
- 如需启用变更 webhook,请勾选启用变更 webhook 复选框。此功能与 Autopilot 集群不兼容。
- 在审核时间间隔框中,输入两次连续审核之间的间隔时长(以秒为单位)。
在可豁免的命名空间框中,输入命名空间列表。Policy Controller 会忽略这些命名空间中的对象。 此功能与 Autopilot 集群不兼容。
最佳实践: 豁免系统命名空间,以避免环境中出现错误。您可以在“排除命名空间”页面上找到豁免命名空间的说明以及由 Google Cloud 服务创建的常见命名空间的列表。
如需启用参照限制条件,请勾选启用引用了并非当前正在评估的对象的限制条件模板复选框。
在版本列表中,选择要使用的 Policy Controller 版本。
点击保存更改。
点击配置。
在确认对话框中,点击确认。 如果您之前未启用 Policy Controller,点击确认将会启用
anthospolicycontroller.googleapis.com
API 并在您的集群上安装 Policy Controller。可选:将现有集群同步到默认设置:
- 在设置标签页中,点击同步到舰队设置。
- 在舰队中的集群列表中,选择要同步的集群,然后点击同步到舰队设置。此操作可能需要几分钟才能完成。
系统会将您重定向至 Policy Controller 设置标签页。在集群上安装并配置 Policy Controller 后,状态列将显示已安装 check_circle。此过程可能耗时几分钟。
gcloud
通过运行以下命令启用 Policy Controller:
gcloud container fleet policycontroller enable \
--memberships=MEMBERSHIP_NAME
您可以设置其他字段来配置 Policy Controller。例如,您可能希望指示 Policy Controller 豁免某些命名空间的强制执行。
如需查看您可以配置的字段的完整列表,请参阅 Policy Controller Google Cloud CLI 文档或运行 gcloud container fleet policycontroller enable --help
。
如需为 Policy Controller 设置舰队级设置,请完成以下步骤:
创建一个名为
fleet-default.yaml
的文件,其中包含 Policy Controller 的默认配置。如需启用舰队级默认设置,则必须提供installSpec
字段。下面的示例显示了您可以配置的选项:# cat fleet-default.yaml policyControllerHubConfig: installSpec: INSTALL_SPEC_ENABLED # Uncomment to set default deployment-level configurations. # deploymentConfigs: # admission: # containerResources: # limits: # cpu: 1000m # memory: 8Gi # requests: # cpu: 500m # memory: 4Gi # Uncomment to set policy bundles that you want to install by default. # policyContent: # bundles: # cis-k8s-v1.5.1: # exemptedNamespaces: # - "namespace-name" # Uncomment to exempt namespaces from admission. # exemptableNamespaces: # - "namespace-name" # Uncomment to enable support for referential constraints # referentialRulesEnabled: true # Uncomment to disable audit, adjust value to set audit interval # auditIntervalSeconds: 0 # Uncomment to log all denies and dryrun failures # logDeniesEnabled: true # Uncomment to enable mutation # mutationEnabled: true # Uncomment to adjust the value to set the constraint violation limit # constraintViolationLimit: 20 # ... other fields ...
最佳实践: 豁免系统命名空间,以避免环境中出现错误。您可以在“排除命名空间”页面上找到豁免命名空间的说明以及由 Google Cloud 服务创建的常见命名空间的列表。
将默认配置应用于舰队:
gcloud container fleet policycontroller enable \ --fleet-default-member-config=fleet-default.yaml
如需验证配置是否已应用,请运行以下命令:
gcloud container fleet policycontroller describe
如需移除舰队级默认配置,请运行以下命令:
gcloud container fleet policycontroller enable \ --no-fleet-default-member-config
Terraform
如需在安装了默认模板库的舰队中启用 Policy Controller,请参阅以下示例:
您可以传递多个 bundle
块来安装 Policy Controller 包概览中列出的任何包。
如需详细了解如何使用 Terraform,请参阅针对 Policy Controller 的 Terraform 支持。
验证政策控制器安装
安装政策控制器后,您可以验证它是否成功完成。
控制台
请完成以下步骤:
- 在 Google Cloud 控制台中,前往安全状况管理部分下的 GKE Enterprise 政策页面。
- 在设置标签页下的集群表中,检查 Policy Controller 状态列。成功安装的状态为已安装 check_circle。
gcloud
运行以下命令:
gcloud container fleet policycontroller describe --memberships=MEMBERSHIP_NAME
安装成功后会显示 membershipStates: MEMBERSHIP_NAME: policycontroller: state: ACTIVE
。
验证限制条件模板库安装
安装 Policy Controller 时,系统会默认安装限制条件模板库。此安装过程可能需要几分钟才能完成。您可以验证模板库已成功安装。
控制台
请完成以下步骤:
- 在 Google Cloud 控制台中,前往安全状况管理部分下的 GKE Enterprise 政策页面。
- 在设置标签页下的集群表中,选择已安装的软件包列中列出的数字。在政策内容状态窗格中,成功的模板库安装的状态为已安装 check_circle。
gcloud
运行以下命令:
kubectl get constrainttemplates
您应该会看到类似于以下示例的输出:
NAME AGE k8sallowedrepos 84s k8scontainerlimits 84s k8spspallowprivilegeescalationcontainer 84s ...[OUTPUT TRUNCATED]...
正确安装单个限制条件模板后,其 status.created
字段为 true
。
Policy Controller 与 Config Sync 的交互
如果您将 Policy Controller 与 Config Sync 搭配使用,则应注意由 Config Sync 同步的可靠来源(例如 Git 代码库)中存储的资源的以下交互行为:
除非停用限制条件模板库,否则您将无法同步也是模板库一部分的限制条件模板。
如果您要同步存储在
gatekeeper-system
命名空间中的Config
资源,则必须只在可靠来源中定义Config
资源;不得定义gatekeeper-system
Namespace
。
配置指标
默认情况下,Policy Controller 会尝试将指标同时导出到 Prometheus 和 Cloud Monitoring。 您可能需要完成其他配置步骤(例如授予权限),以允许 Policy Controller 导出指标。如需了解详情,请参阅使用 Policy Controller 指标。
管理限制条件模板库
如需了解有关卸载或安装限制条件模板、它们的关联限制条件或限制条件模板库的信息,请参阅创建限制条件。
命名空间免于强制执行
您可以配置 Policy Controller 以忽略命名空间中的对象。如需了解详情,请参阅从Policy Controller中排除命名空间。
更改资源
Policy Controller 还充当变更网络钩子。如需了解详情,请参阅更改资源。
查看政策控制器版本
如需了解政策控制器正在使用的 Gatekeeper 版本,请通过运行以下命令查看映像标记:
kubectl get deployments -n gatekeeper-system gatekeeper-controller-manager \
-o="jsonpath={.spec.template.spec.containers[0].image}"
用于构建 Gatekeeper 的 Git 标记(或哈希)以及 ConfigManagement Operator 版本号包含在映像标记中,如下所示:
.../gatekeeper:VERSION_NUMBER-GIT_TAG.gBUILD_NUMBER
例如,对于以下映像:
gcr.io/config-management-release/gatekeeper:anthos1.3.2-480baac.g0
anthos1.3.2
是版本号。480baac
是 Git 标记。0
是内部版本号。
升级政策控制器
在升级 Policy Controller 之前,请查看版本说明以详细了解版本之间的变化。
如需升级 Policy Controller,请完成以下步骤:
控制台
- 在 Google Cloud 控制台中,前往安全状况管理部分下的 GKE Enterprise 政策页面。
- 在设置标签页下您要升级版本的集群旁边,选择 edit 修改配置。
- 展开修改 Policy Controller 配置菜单。
- 从版本下拉列表中,选择您要升级到的版本。
- 点击保存更改。
gcloud
运行以下命令:
gcloud container fleet policycontroller update \
--version=VERSION \
--memberships=MEMBERSHIP_NAME
替换以下内容:
VERSION
:要升级到的版本MEMBERSHIP_NAME
:您在注册集群时选择的成员资格名称。您可以通过运行gcloud container fleet memberships list
找到成员资格名称。
卸载 Policy Controller
请按照以下步骤从集群中卸载政策控制器。
控制台
如需为集群停用政策控制器,请完成以下任务:
- 在 Google Cloud 控制台中,前往安全状况管理部分下的 GKE Enterprise 政策页面。
- 在设置标签页下的集群表中,选择修改配置列中的修改 edit。
- 在集群窗格中,展开关于 Policy Controller 菜单。
- 选择卸载 Policy Controller。
- 按照确认对话框中的说明操作并选择确认,以确认卸载。
卸载 Policy Controller 后,状态列显示未安装 do_not_disturb_on。
gcloud
如需卸载 Policy Controller,请运行以下命令:
gcloud container fleet policycontroller disable \
--memberships=MEMBERSHIP_NAME
将 MEMBERSHIP_NAME
替换为要停用 Policy Controller 的已注册集群的成员资格名称。您可以指定多个成员资格(以英文逗号分隔)。
政策控制器 RBAC 和权限
政策控制器包含具有高权限的工作负载。Open Policy Agent Gatekeeper 操作文档中介绍了这些工作负载的权限。
后续步骤
- 详细了解政策控制器。
- 详细了解 Policy Controller 软件包。
- 了解如何创建限制条件。
- 排查政策控制器问题。