适用于 Google Distributed Cloud 的 Binary Authorization 是一项 Google Cloud 功能,可将 Binary Authorization 的托管部署时强制执行扩展到本地集群。Google Distributed Cloud 上 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,请执行以下操作:
在创建集群之前,将
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
,则该功能会停用。
在集群配置文件中进行所需的任何其他更改,然后运行
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
启用:
修改集群配置文件以添加
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"
更新集群:
bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=CLUSTER_KUBECONFIG
请替换以下内容:
CLUSTER_NAME
:要更新的集群的名称。CLUSTER_KUBECONFIG
:集群 kubeconfig 文件的路径。
等待
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