启用试运行模式

概览

本页面介绍了如何启用试运行模式。启用试运行模式后,Binary Authorization 会在 pod 创建时检查政策合规性,而不会实际阻止 pod 的创建。相反,政策合规性状态消息会记录到 Cloud Logging 中。利用这些信息,您可以确定是否会无意中阻止任何容器映像的部署,并更正政策。在政策按预期确保合规性时,您可以停用试运行模式。

准备工作

本指南假定您已设置 Binary Authorization。如需获取简单的设置,请参阅快速入门

如需获取完整的基于证明的端到端教程,请参阅通过 CLI 开始使用通过控制台开始使用

启用试运行

如需启用试运行,请执行以下操作:

gcloud

  1. 导出默认的 Binary Authorization 政策:

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. 在文本编辑器中,将 enforcementMode 设置为 DRYRUN_AUDIT_LOG_ONLY

    YAML 格式的政策文件应如下所示:

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google_containers/*
    - namePattern: gcr.io/google-containers/*
    - namePattern: k8s.gcr.io/*
    - namePattern: gke.gcr.io/*
    - namePattern: gcr.io/stackdriver-agents/*
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: DRYRUN_AUDIT_LOG_ONLY
    name: projects/PROJECT_ID/policy
    
  3. 将 YAML 格式的政策文件重新导入 Binary Authorization:

    gcloud container binauthz policy import /tmp/policy.yaml
    
  4. 更新本地 kubeconfig 文件:

    gcloud container clusters get-credentials \
    --zone us-central1-a \
    CLUSTER_NAME
    

    其中,CLUSTER_NAME 是您的 GKE 集群的名称。

控制台

  1. 转到 Google Cloud Console 中的“Binary Authorization”页面。

    转到“Binary Authorization”页面

  2. 点击配置政策,或者,如果存在政策,则点击修改政策

  3. 在该政策中,将 evaluationMode 从 ALWAYS_ALLOW 更改为 ALWAYS_DENY,并将 enforcementMode 设置为 DRYRUN_AUDIT_LOG_ONLY

    YAML 格式的政策文件可能如下所示:

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google_containers/*
    - namePattern: gcr.io/google-containers/*
    - namePattern: k8s.gcr.io/*
    - namePattern: gke.gcr.io/*
    - namePattern: gcr.io/stackdriver-agents/*
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: DRYRUN_AUDIT_LOG_ONLY
    name: projects/PROJECT_ID/policy
    
  4. 点击保存政策

部署容器

  1. 部署容器映像

    1. [可选]:创建一个如下所示的 pod.yaml 文件:

      apiVersion: v1
      kind: Pod
      metadata:
        name: test-pod
      spec:
        containers:
        - name: test-container
          image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
      
    2. 部署容器映像:

      kubectl apply -f pod.yaml
      
  2. 确认 pod 正在运行

    该 pod 应该正在运行。如需进行确认,请运行以下命令:

    kubectl get pods
    

    您应该会看到 test-pod 正在运行。

  3. 查看审核日志:

    如需在 Cloud Logging 中查看试运行审核日志条目,请参阅 Cloud Logging 中的试运行事件

    下面是一个试运行审核日志示例:

    {
     insertId: "f87d1ef8-fa7b-4079-be90-d0638e7983ba"
     labels: {
      authorization.k8s.io/decision: "allow"
      authorization.k8s.io/reason: ""
      imagepolicywebhook.image-policy.k8s.io/dry-run: "true"
      imagepolicywebhook.image-policy.k8s.io/overridden-verification-result: "'gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4': Denied by an ALWAYS_DENY admission rule
    "
     }
     logName: "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
     operation: {…}
     protoPayload: {…}
     receiveTimestamp: "2020-06-10T15:59:23.857650559Z"
     resource: {…}
     timestamp: "2020-06-10T15:59:00.185878Z"
    }
    

    其中,PROJECT_ID 是您的项目 ID。

清理

删除 pod

kubectl delete -f /tmp/pod.yaml

停用试运行模式

请务必通过更改 Binary Authorization 政策的 defaultAdmissionRule 中的 enforcementMode 来停用试运行模式。例如:

   enforcementMode: ALWAYS_ALLOW