将部署限制为 GKE 命名空间

当您部署到 Google Kubernetes Engine (GKE) 时,默认的 Cloud Deploy 执行服务账号可以访问目标集群中的所有命名空间。您可以将该服务账号配置为仅部署到一个命名空间。

了解有关设置 RBAC 政策的更多说明。
  1. 确保执行服务账号没有 roles/container.developer IAM 角色。

  2. 向服务账号授予 roles/container.clusterViewer 角色。

    gcloud projects add-iam-policy-binding PROJECT_ID \
     --member="serviceAccount:SERVICE_ACCOUNT" \
     --role="roles/container.clusterViewer"
    

    此角色允许服务账号在集群上进行身份验证,但不能执行其他操作。

  3. 创建 Kubernetes RBAC 角色,以授予对命名空间的管理员访问权限。

    此示例中的 RBAC 角色具有广泛的权限,相当于 clouddeploy.developer IAM 角色。为最大限度地降低权限升级的风险,我们建议您将这些权限更改为应用所需的最低权限。如需查看相关说明,请参阅 GKE 的 RBAC 文档

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: admin
      namespace: NAMESPACE
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    
  4. 创建 RoleBinding,将所选命名空间中的 RBAC 角色绑定到 Cloud Deploy 执行服务账号:

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: admin
      namespace: NAMESPACE
    subjects:
    # Google Cloud user account
    - kind: User
      name: SERVICE_ACCOUNT
    roleRef:
      kind: Role
      name: admin
      apiGroup: rbac.authorization.k8s.io
    

    此清单定义了一个 RBAC 政策,用于将 admin 角色绑定到您的执行服务账号。NAMESPACE 是您要向服务账号授予访问权限的命名空间。该服务账号无法访问集群上的任何其他命名空间。

  5. 将 RBAC 清单应用于集群:

    kubectl apply -f YAML_NAME