设置 Binary Authorization 政策强制执行

适用于 GKE on Bare Metal 的 Binary Authorization 是一项 Google Cloud 功能,可将 Binary Authorization 的托管部署时强制执行扩展到本地集群。在 GKE on Bare Metal 上,Binary Authorization 的主要使用场景是保护工作负载,但 Binary Authorization 适用于所有集群类型。请按照本指南中的步骤,将 Google Cloud 项目中配置的 Binary Authorization 政策的强制执行规则应用于您的集群。如需详细了解 Binary Authorization 政策和规则,请参阅 Binary Authorization 概览

前提条件

请先确保您已满足以下前提条件,然后才能为集群启用 Binary Authorization 政策强制执行:

  • 向舰队注册集群:使用 bmctl 创建的集群,该集群会注册到您在集群配置文件的 gkeConnect.projectID 字段中指定的 Google Cloud 项目。此项目称为舰队宿主项目。如需详细了解舰队,包括应用场景、最佳实践和示例,请参阅舰队管理文档。

  • 在 Google Cloud 项目中启用 Binary Authorization API:在舰队宿主项目中启用 Binary Authorization 服务

  • 将 Binary Authorization Policy Evaluator 角色添加到舰队宿主项目:如需在舰队宿主项目上将 Binary Authorization Policy Evaluator (roles/binaryauthorization.policyEvaluator) 角色授予 Kubernetes 服务账号,请运行以下命令:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_ID.svc.id.goog[binauthz-system/binauthz-agent]" \
        --role="roles/binaryauthorization.policyEvaluator"
    

    如果您的集群在代理服务器后面运行,请确保代理服务器允许与 Binary Authorization API (binaryauthorization.googleapis.com) 建立连接。此 API 为部署到集群的映像提供基于政策的部署验证和控制。如需详细了解如何使用代理配置,请参阅在代理后面安装

满足前提条件后,您可以在创建新集群或更新现有集群时启用(或停用)Binary Authorization 政策。

在集群创建期间启用 Binary Authorization 政策

您可以使用 bmctl 或 gcloud CLI 启用 Binary Authorization 政策强制执行。

bmctl

如需在使用 bmctl 创建集群时启用 Binary Authorization,请执行以下操作:

  1. 在创建集群之前,将 spec.binaryAuthorization.evaluationMode 添加到集群配置文件,如以下示例所示:

    ...
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: user-basic
      namespace: cluster-user-basic
    spec:
      type: user
      ...
      binaryAuthorization:
        evaluationMode: "PROJECT_SINGLETON_POLICY_ENFORCE"
    

    允许的 evaluationMode 值包括:

    • PROJECT_SINGLETON_POLICY_ENFORCE:对 Google Cloud 项目强制执行 Binary Authorization 政策(也称为项目单例政策)中指定的规则,以管理集群上的容器映像部署。

    • DISABLE:为集群停用 Binary Authorization。此设置为默认值。 如果您省略 binaryAuthorization,则该功能会停用。

  2. 请在集群配置文件中进行所需的任何其他更改,然后运行 bmctl create cluster 命令。

如需详细了解如何创建集群,请参阅集群创建概览

gcloud CLI

  • 如需创建用户集群并启用 Binary Authorization,请在运行 gcloud container bare-metal clusters create 命令时添加 --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE 标志。

    这将创建一个用户集群,以强制执行 Binary Authorization 政策(也称为项目单例政策)中指定的规则。此政策与您的 Google Cloud 项目相关联,用于指定用于管理容器映像部署的规则。如需详细了解如何使用 gcloud CLI 创建用户集群,请参阅使用 GKE On-Prem API 客户端创建用户集群。如需详细了解 Binary Authorization 政策和规则,请参阅 Binary Authorization 概览

为现有集群启用或停用 Binary Authorization 政策

如果您已有 1.16 版或更高版本的集群,则可以使用 bmctl 或 gcloud CLI 随时启用或停用 Binary Authorization。

bmctl

  • 启用:

    1. 修改集群配置文件以添加 binaryAuthorization 字段:

      ...
      ---
      apiVersion: baremetal.cluster.gke.io/v1
      kind: Cluster
      metadata:
        name: user-basic
        namespace: cluster-user-basic
      spec:
        type: user
        ...
        binaryAuthorization:
          evaluationMode: "PROJECT_SINGLETON_POLICY_ENFORCE"
      
    2. 更新集群:

      bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=CLUSTER_KUBECONFIG
      

      替换以下内容:

      • CLUSTER_NAME:要更新的集群的名称。
      • CLUSTER_KUBECONFIG:集群 kubeconfig 文件的路径。
    3. 等待 binauthz-system 命名空间中名为 binauthz-module-deployment 的 Deployment 准备就绪。

      该 Deployment 准备就绪后,Binary Authorization 会强制执行 Binary Authorization 政策(也称为项目单例政策)中指定的规则。此政策与您的 Google Cloud 项目关联,并指定用于管理容器映像部署的规则。如需详细了解如何使用 bmctl 更新集群,请参阅更新集群。如需详细了解 Binary Authorization 政策和规则,请参阅 Binary Authorization 概览

  • 停用:

    如需关闭此功能,您可以将 evaluationMode 设置为 DISABLED 或从集群规范中移除 binaryAuthorization 部分。完成此更改后,请等待几分钟,直到 binauthz-system 命名空间中名为 binauthz-module-deployment 的 Deployment 被移除。

gcloud CLI

  • 如需为现有集群启用 Binary Authorization,请在运行 gcloud container bare-metal clusters update 命令时添加 --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE 标志。

    这将更新用户集群,以便 Binary Authorization 强制执行 Binary Authorization 政策(也称为项目单例政策)中指定的规则。此政策与您的 Google Cloud 项目相关联,指定了用于管理容器映像部署的规则。如需详细了解如何使用 gcloud CLI 更新用户集群,请参阅 gcloud CLI 参考文档中的 gcloud container bare-metal clusters update。如需详细了解 Binary Authorization 政策和规则,请参阅 Binary Authorization 概览

  • 如需为现有集群停用 Binary Authorization,请在运行 gcloud container bare-metal clusters update 命令时使用 --binauthz-evaluation-mode=DISABLED 标志。

问题排查

如果您未满足所有前提条件,则可能无法及早发现问题。如果 Binary Authorization 开始无法响应 Pod 创建请求,请检查 status.conditions 中是否有 ReplicaSet。如下所示的消息表明 Binary Authorization 配置存在问题:

failed to validate Binary Authorization policy

(1) Ensure the Binary Authorization API is enabled for your Google Cloud project:
    gcloud services enable binaryauthorization.googleapis.com --project=PROJECT_ID
(2) Ensure an IAM policy binding is in place granting binaryauthorization.policyEvaluator role to the binauthz-system/binauthz-agent Kubernetes service account:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_ID.svc.id.goog[binauthz-system/binauthz-agent]" \
        --role=roles/binaryauthorization.policyEvaluator