安装政策控制器

本页面介绍了如何安装 Policy Controller,这是一个 Kubernetes 准入控制器,用于检查、审核并强制您的集群遵守与安全性、法规或业务规则相关的政策。

准备工作

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

  • 安装并初始化 Cloud SDK,它提供了以下说明中使用的 gcloudgsutilkubectlnomos 命令。如果您使用 Cloud Shell,则系统会预安装 Cloud SDK。

  • 您必须具有 Anthos 授权才能使用 Anthos Config Management 安装政策控制器。 如需了解详情,请参阅设置 Anthos

  • 拥有一个运行 Kubernetes 1.14.x 或更高版本且已安装 Config Sync 的集群。 政策控制器似乎可以在版本低于 1.14.x 的 Kubernetes 上运行,但无法正常运行。

安装政策控制器

请按照以下步骤配置 Anthos Config Management,以将政策控制器动态准入控制器安装到集群中。

控制台

如需在 Cloud Console 上配置 Policy Controller,请完成以下步骤:

  1. 访问 Google Cloud Console 中的 Anthos Config Management 菜单。

    访问 Anthos Config Management 菜单

  2. 选择您要为其启用 Policy Controller 的集群,然后点击配置

  3. 点击您的集群的 ACM 设置标题。

  4. Policy Controller 标题下,选中启用 Policy Controller 复选框。

    1. 保持安装默认模板库复选框处于选中状态,以安装常见政策类型的限制条件模板库。
    2. 审核时间间隔字段中,选择连续同步操作之间的间隔时长(以秒为单位)。默认值为 60 秒;如果审核时间间隔设置为 0,则表示审核处于停用状态。
    3. 豁免命名空间 (Exempt namespaces) 字段中,提供有效命名空间的列表。这些命名空间中的对象会被所有政策忽略。目前,这些命名空间无需存在。
    4. 选中能够使用限制条件模板来引用当前所评估对象以外的对象 (Enables the ability to use Constraint Templates that reference objects other than the object currently being evaluated) 复选框,以启用参照限制条件。如需详细了解参照限制条件,请参阅启用参照限制条件
  5. 点击完成。您将返回到 Anthos Config Management 菜单。

gcloud

请按照以下步骤配置 Anthos Config Management,以将政策控制器动态准入控制器安装到集群中。

默认情况下,政策控制器安装常见政策类型的限制条件模板库。要跳过安装限制条件模板,请在清单中取消以 templateLibraryInstalled 开头的行的备注。

  1. Anthos Config Management 配置文件中,将 spec.policyController 对象中的 enabled 的值设置为 true

    # config-management.yaml
    
    apiVersion: configmanagement.gke.io/v1
    kind: ConfigManagement
    metadata:
      name: config-management
    spec:
      # Set to true to install and enable Policy Controller
      policyController:
        enabled: true
        # Uncomment to prevent the template library from being installed
        # templateLibraryInstalled: false
        # 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 exempt namespaces
        # exemptableNamespaces: ["namespace-name"]
      # ...other fields...
    

    默认情况下,停用对参照限制条件的支持。启用它之前,请确保您了解关于最终一致性的注意事项

  2. 应用 config-management.yaml 文件:

     gcloud alpha container hub config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    请替换以下内容:

    • CLUSTER_NAME:添加您要将此配置应用于的已注册集群。
    • CONFIG_YAML:添加 config-management.yaml 文件的路径。
    • PROJECT_ID:添加您的项目 ID。

Pod 创建完成,政策控制器开始检查并强制执行限制条件。

kubectl

默认情况下,政策控制器安装常见政策类型的限制条件模板库。要跳过安装限制条件模板,请在清单中取消以 templateLibraryInstalled 开头的行的备注。

  1. Anthos Config Management 配置文件中,将 spec.policyController 对象中的 enabled 的值设置为 true

    # config-management.yaml
    
    apiVersion: configmanagement.gke.io/v1
    kind: ConfigManagement
    metadata:
      name: config-management
    spec:
      # Set to true to install and enable Policy Controller
      policyController:
        enabled: true
        # Uncomment to prevent the template library from being installed
        # templateLibraryInstalled: false
        # 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 exempt namespaces
        # exemptableNamespaces: ["namespace-name"]
      # ...other fields...
    

    默认情况下,停用对参照限制条件的支持。启用它之前,请确保您了解关于最终一致性的注意事项

  2. 使用 kubectl apply 应用配置。

    kubectl apply -f config-management.yaml
    

Pod 创建完成,政策控制器开始检查并强制执行限制条件。

在专用集群上安装政策控制器

如果您要在 Google Kubernetes Engine (GKE) 中的专用集群上安装政策控制器,则需要执行额外步骤才能完成安装。在专用集群中,防火墙会阻止控制层面访问端口 8443 上的节点,即控制层面尝试连接到政策控制器的位置。您可以创建防火墙规则,以使控制层面可以访问端口 8443(或其他任何自定义端口)。您也可以让 pod 在特权端口 443 上运行。如需了解详情,请参阅 Gatekeeper 文档中的在专用 GKE 集群节点上运行

验证安装

安装政策控制器后,您可以验证安装是否已成功完成。

控制台

请完成以下步骤:

  1. 在 Cloud Console 中,转到 Anthos Config Management 页面。

    转到 Anthos Config Management

  2. 在集群表中,查看政策控制器状态列。成功安装的状态为已安装

gcloud

运行以下命令:

gcloud alpha container hub config-management status \
    --project=PROJECT_ID

PROJECT_ID 替换为您的项目 ID。

您应该会看到类似于以下示例的输出:

Name          Status  Last_Synced_Token  Sync_Branch  Last_Synced_Time      Policy_Controller
CLUSTER_NAME  SYNCED  a687c2c            1.0.0        2021-02-17T00:15:55Z  INSTALLED

在“政策控制器”列中,成功安装的状态为 INSTALLED

kubectl

如果正确安装了政策控制器,则其 Pod 将运行。Pod 在可用之前,可能会重启几次。

由于政策控制器 pod 在 gatekeeper-system 命名空间中运行,因此您可以通过运行以下命令来查看其状态:

kubectl get pods -n gatekeeper-system

您应该会看到类似于以下示例的输出:

NAME                              READY   STATUS    RESTARTS   AGE
gatekeeper-controller-manager-0   1/1     Running   1          53s

验证限制条件模板库安装

安装政策控制器时,系统会默认安装限制条件模板库,并且此安装过程可能需要几分钟时间才能完成。

要验证是否已安装模板库,请列出所有 ConstraintTemplate 对象:

kubectl get constrainttemplates

您应该会看到类似于以下示例的输出:

NAME                                      AGE
k8sallowedrepos                           84s
k8scontainerlimits                        84s
k8spspallowprivilegeescalationcontainer   84s
...[OUTPUT TRUNCATED]...

正确安装单个限制条件模板后,其 status.created 字段为 true

Policy Controller 与 Anthos Config Management 之间的交互

Anthos Config Management 管理运行 Policy Controller 所需的资源。为避免 Anthos Config Management 和 Policy Controller 争用资源,请注意将哪些内容放入 Anthos Config Management 代码库中。

使用 Policy Controller 时,请考虑以下几点:

  • 除非停用限制条件模板库,否则您将无法同步也是模板库一部分的限制条件模板。

  • 如果您要同步存储在 gatekeeper-system 命名空间中的配置资源,则该命名空间必须在代码库中未定义,或者与 Anthos Config Management 要安装的配置相匹配。

  • 如果从可靠来源代码库中移除了 gatekeeper-system 命名空间,则 Anthos Config Management 可能无法恢复。如需恢复,请删除 Policy Controller 的验证网络钩子配置

管理限制条件模板库

如需了解有关卸载或重新安装限制条件模板、它们的关联限制条件或限制条件模板库的信息,请参阅创建限制条件

命名空间免于强制执行

您可以配置政策控制器以忽略命名空间中的对象。如需了解详情,请参阅从政策控制器中排除命名空间

查看政策控制器版本

如需查看 Policy Controller 所使用的 Gatekeeper 版本,请通过运行以下命令查看映像标记:

kubectl get deployments -n gatekeeper-system gatekeeper-controller-manager \
  -o="jsonpath={.spec.template.spec.containers[0].image}"

从 Anthos Config Management 1.3.2 版及更高版本开始,用于构建 Gatekeeper 的 Git 标记(或哈希)以及 Anthos Config Management 版本号包含在映像标记中,如下所示:

.../gatekeeper:version-number-git-tag.gbuild-number

例如,对于以下映像:

gcr.io/config-management-release/gatekeeper:anthos1.3.2-480baac.g0
  • anthos1.3.2 是版本号。
  • 480baac 是 Git 标记。
  • 0 是内部版本号。

您还可以在发布版本表中查看所有 Anthos Config Management 版本及其对应的清单、安装和 nomos 二进制文件版本的列表。

升级政策控制器

每当升级 Anthos Config Management 时,政策控制器也会升级。

要升级 Anthos Config Management,您可以使用 Google Cloud Console 或 kubectl。在升级之前,请先阅读版本说明,看看是否有任何特定的说明。

控制台

  1. 在 Cloud Console 中,转到 Anthos Config Management 页面。

    转到 Anthos Config Management

  2. 选择要升级的集群。

  3. 点击配置

  4. 点击您的集群的 ACM 设置

  5. 版本下拉列表中,选择您要升级到的版本。

  6. 点击完成

gcloud

运行以下命令:

gcloud alpha container hub config-management upgrade \
    --project=PROJECT_ID \
    --membership=CLUSTER_NAME

请替换以下内容:

  • CLUSTER_NAME:您要升级的已注册集群的名称
  • PROJECT_ID:您的项目 ID

kubectl

为每个注册的集群运行下文所述的命令:

  1. 下载新版本的 Anthos Config Management 清单和 nomos 命令。

  2. 应用 Anthos Config Management 清单:

    kubectl apply -f config-management-operator.yaml
    

    此命令会更新 Anthos Config Management 映像。Kubernetes 会检索新版本并使用新版本重启 Anthos Config Management Pod。Anthos Config Management 启动时,会运行一条协调循环语句 (reconcile loop),用于应用新映像中捆绑的一组清单。这样会更新并重启每个组件 Pod。

  3. 将所有客户端上的 nomosnomos.exe 命令替换为新版本。此更改可以确保 nomos 命令始终能够获取所有注册集群的状态,并且能够验证这些集群的配置。

卸载政策控制器

请按照以下步骤从集群中卸载 Policy Controller。

控制台

如需为集群停用 Policy Controller,请完成以下任务:

  1. 访问 Google Cloud Console 中的 Anthos Config Management 菜单。

    访问 Anthos Config Management 菜单

  2. 选择您要为其停用 Policy Controller 的集群。

  3. 点击配置

  4. 点击您的集群的 ACM 设置标题。

  5. Policy Controller 部分中,清除 Policy Controller 复选框。

  6. 点击完成

gcloud

如需卸载 Policy Controller,请执行以下操作:

  1. config-management.yaml 文件中修改 Anthos Config Management 配置,并将 policyController.enabled 设置为 false

  2. config-management.yaml 文件中应用更改:

     gcloud alpha container hub config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    请替换以下内容:

    • CLUSTER_NAME:添加您要将此配置应用于的已注册集群。
    • CONFIG_YAML:添加 config-management.yaml 文件的路径。
    • PROJECT_ID:添加您的项目 ID。

在 Anthos Config Management 移除 policycontroller.configmanagement.gke.io 终结器后,卸载即完成。

kubectl

如需卸载 Policy Controller,请在 config-management.yaml 文件中修改 Anthos Config Management 配置,并将 policyController.enabled 设置为 false。在 Anthos Config Management 移除 policycontroller.configmanagement.gke.io 终结器后,卸载即完成。

若要完全卸载 Anthos Config Management,请参阅从集群卸载 Config Sync

后续步骤