部署容器(GKE、GKE 集群)

本页面介绍如何将容器映像部署到 Google Kubernetes Engine (GKE) 集群或启用了 Binary Authorization 的 GKE 集群。用于部署此类映像的 kubectl 命令与用于将映像部署到未启用 Binary Authorization 的集群的命令相同。

准备工作

确保您已在项目中启用了 Binary Authorization API,并且拥有启用了 Binary Authorization 的 GKE 集群。请参阅在 Google Kubernetes Engine 上进行设置在 GKE 集群上进行设置

安装 kubectl,以与 GKE 进行交互。

配置 kubectl

您必须为 kubectl 安装更新本地 kubeconfig 文件。这可以提供访问 GKE 或 GKE 集群中的集群所需的凭据和端点信息。

如需配置 kubectl,请运行以下 gcloud 命令:

GKE

gcloud container clusters get-credentials \
    --zone ZONE \
    CLUSTER_NAME

请替换以下内容:

  • ZONE:运行集群的 GKE 可用区的名称,例如 us-central1-a
  • CLUSTER_NAME:集群的名称

GKE 集群

gcloud container fleet memberships get-credentials \
    --location LOCATION \
    MEMBERSHIP_NAME

替换以下内容:

  • LOCATION:GKE 集群的舰队成员资格的位置,例如 global
  • MEMBERSHIP_NAME:GKE 集群的舰队成员资格的名称

部署容器映像

按如下方式部署容器映像:

  1. 配置环境变量:

    POD_NAME=POD_NAME
    IMAGE_PATH=IMAGE_PATH
    IMAGE_DIGEST=IMAGE_DIGEST
    

    请替换以下内容:

    • POD_NAME:您要用于 GKE 工作负载的名称
    • IMAGE_PATHArtifact RegistryContainer Registry 或其他注册表中的映像路径。
    • IMAGE_DIGEST:映像清单的摘要。示例如下:

      • Artifact Registry:
        • 路径:us-docker.pkg.dev/google-samples/containers/gke/hello-app
        • 摘要:sha256:37e5287945774f27b418ce567cd77f4bbc9ef44a1bcd1a2312369f31f9cce567
      • Container Registry:
        • 路径:gcr.io/google-samples/hello-app
        • 摘要:sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4

      如需了解如何在 Artifact Registry 中获取映像摘要,请参阅管理映像;如需查看 Container Registry 中的映像,请参阅列出映像版本

  2. 使用 kubectl run 命令部署您的映像。

    您必须使用摘要(而非 1.0latest 等标记)部署映像,因为 Binary Authorization 将使用映像路径和摘要来查找证明

    如需部署映像,请运行以下 kubectl 命令:

    kubectl run ${POD_NAME} \
        --image ${IMAGE_PATH}@${IMAGE_DIGEST}
    

    现在,验证 Binary Authorization 是否会阻止部署:

    kubectl get pods
    

    系统将列出您的 Pod。

应急开启

如果 GKE 集群或 GKE 集群出于任何原因无法访问 Binary Authorization 服务器,强制执行过程将发生应急开启。例如,如果您在部署容器映像时因网络中断而无法访问 Binary Authorization Enforcer,则即使 Enforcer 可能已阻止该映像,但系统仍会完成该映像的部署。如果启用了 Cloud Audit Logs,则日志条目会指示在发生开启故障条件下部署的映像。

部署违反政策的映像

Binary Authorization 支持一项称为 Breakglass 的功能;如果启用该功能,则即使映像违反了政策,也允许对该映像进行部署。

如需了解详情,请参阅使用 Breakglass

清理

如需进行清理,请通过执行以下命令删除 Pod:

  kubectl delete pod ${POD_NAME}
  

后续步骤