概览
本页面介绍了如何启用试运行模式。启用试运行模式后,Binary Authorization 会在 pod 创建时检查政策合规性,而不会实际阻止 pod 的创建。相反,政策合规性状态消息会记录到 Cloud Logging 中。利用这些信息,您可以确定是否会无意中阻止任何容器映像的部署,并更正政策。在政策按预期确保合规性时,您可以停用试运行模式。
准备工作
本指南假定您已设置 Binary Authorization。如需获取简单的设置,请参阅快速入门。
如需获取完整的基于证明的端到端教程,请参阅通过 CLI 开始使用或通过控制台开始使用。
启用试运行
如需启用试运行,请执行以下操作:
gcloud
导出默认的 Binary Authorization 政策:
gcloud container binauthz policy export > /tmp/policy.yaml
在文本编辑器中,将 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
将 YAML 格式的政策文件重新导入 Binary Authorization:
gcloud container binauthz policy import /tmp/policy.yaml
更新本地 kubeconfig 文件:
gcloud container clusters get-credentials \ --zone us-central1-a \ CLUSTER_NAME
其中,CLUSTER_NAME 是您的 GKE 集群的名称。
控制台
转到 Google Cloud Console 中的“Binary Authorization”页面。
点击配置政策,或者,如果存在政策,则点击修改政策。
在该政策中,将 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
点击保存政策。
部署容器
部署容器映像
[可选]:创建一个如下所示的
pod.yaml
文件:apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: test-container image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
部署容器映像:
kubectl apply -f pod.yaml
确认 pod 正在运行
该 pod 应该正在运行。如需进行确认,请运行以下命令:
kubectl get pods
您应该会看到
test-pod
正在运行。查看审核日志:
如需在 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