从 Policy Controller 中排除命名空间

本页面介绍了如何在 Policy Controller 中配置豁免命名空间。

豁免命名空间使用 Policy Controller 从准入网络钩子强制执行中移除命名空间,但任何违规行为仍会在审核中报告。如果您未配置任何命名空间,则只有 gatekeeper-system 命名空间会预先配置为免除 Policy Controller 的准入网络钩子强制执行。

配置豁免命名空间

通过配置可豁免的命名空间,您可以应用 admission.gatekeeper.sh/ignore 标签免除命名空间进行 Policy Controller 准许网络钩子强制执行。如果您以后移除可豁免的命名空间,则 Policy Controller 不会从该命名空间中移除 admission.gatekeeper.sh/ignore 标签。

命名空间免于强制执行

您可以在安装 Policy Controller 期间或安装后豁免命名空间。以下过程展示了如何在安装后豁免命名空间。

控制台

  1. 在 Google Cloud 控制台中,进入安全状况管理部分下的 GKE Enterprise 政策页面。

    前往“政策”

  2. 设置标签页下的集群表中,选择修改配置列中的修改
  3. 展开修改 Policy Controller 配置菜单。
  4. 豁免命名空间 (Exempt namespaces) 字段中,提供有效命名空间的列表。这些命名空间中的对象会被所有政策忽略。这些命名空间不需要已经存在。
  5. 选择保存更改

gcloud Policy Controller

如需将命名空间添加到可能免于准入 webhook 强制执行的命名空间列表,请运行以下命令:

  gcloud container fleet policycontroller update \
    --memberships=MEMBERSHIP_NAME \
    --exemptable-namespaces=[NAMESPACE_LIST]

替换以下内容:

  • MEMBERSHIP_NAME:要豁免命名空间的已注册集群的成员资格名称。您可以指定多个成员资格(以英文逗号分隔)。
  • NAMESPACE_LIST:您希望 Policy Controller 免除强制执行的命名空间列表(以英文逗号分隔)。

此命令仅豁免准许 webhook 的资源。这些资源仍会接受审核。如需改为不对命名空间进行审核,请在政策软件包级层设置豁免项:

  gcloud container fleet policycontroller content bundles set BUNDLE_NAME \
    --memberships=MEMBERSHIP_NAME \
    --exempted-namespaces=[NAMESPACE_LIST]

替换以下内容:

  • BUNDLE_NAME 替换为您要使用豁免命名空间更新的政策软件包的名称。
  • MEMBERSHIP_NAME:要豁免命名空间的已注册集群的成员资格名称。您可以指定多个成员资格(以英文逗号分隔)。
  • NAMESPACE_LIST:您希望 Policy Controller 免除强制执行的命名空间列表(以英文逗号分隔)。

gcloud ConfigManagement

  1. 为免于强制执行命名空间,请在 spec.policyController.exemptableNamespaces 中添加命名空间的名称:

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      # Set to true to install and enable Policy Controller
      policyController:
        enabled: true
        exemptableNamespaces: ["NAMESPACE_NAME"]
    ...
    

    NAMESPACE_NAME 替换为您要免除强制执行的命名空间的名称。

    您还可以豁免多个命名空间。例如,要添加命名空间 not-applicablealso-not-applicable,可以应用以下清单:

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      # Set to true to install and enable Policy Controller
      policyController:
        enabled: true
        exemptableNamespaces: ["not-applicable","also-not-applicable"]
    ...
    
  2. 将更改应用于 apply-spec.yaml 文件:

     gcloud beta container fleet config-management apply \
         --membership=MEMBERSHIP_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    请替换以下内容:

    • MEMBERSHIP_NAME:添加您要将此配置应用于的已注册集群。 如果您已在 Google Cloud 控制台中注册该集群,则成员资格名称与集群名称相同。
    • CONFIG_YAML:添加 apply-spec.yaml 文件的路径。
    • PROJECT_ID:添加您的项目 ID。
  3. 为可豁免的命名空间添加标签,以便 Policy Controller 的准入网络钩子不会强制执行其内容:

    kubectl label namespace NAMESPACE_NAME "admission.gatekeeper.sh/ignore=true"
    

    NAMESPACE_NAME 替换为您要免除强制执行的命名空间的名称。

要免除强制执行的命名空间

这些是 Google Kubernetes Engine (GKE) 和相关产品可以创建的一些命名空间。您可能希望免除它们强制执行,以避免产生不必要的影响:

- anthos-creds
- anthos-identity-service
- apigee
- apigee-system
- asm-system
- capi-kubeadm-bootstrap-system
- capi-system
- cert-manager
- cnrm-system
- config-management-monitoring
- config-management-system
- gke-connect
- gke-gmp-system
- gke-managed-cim
- gke-managed-filestorecsi
- gke-managed-metrics-server
- gke-managed-system
- gke-system
- gmp-public
- gmp-system
- hnc-system
- istio-system
- kube-node-lease
- kube-public
- kube-system
- poco-trial
- resource-group-system
- vm-system