管理 Distributed Cloud connected 用户

本页介绍了如何在 Distributed Cloud Connected 中管理用户。

创建 Distributed Cloud 连接集群时,只有用于创建该集群的用户账号会被授予对该集群的访问权限。如需向更多用户授予集群访问权限,您可以执行以下任一操作:

使用 Kubernetes RBAC 授予所需权限

本部分介绍了如何使用 Kubernetes 基于角色的访问权限控制 (RBAC) 向用户账号授予用户业务需求所需的权限。这些权限包含在多个角色中。向用户账号授予适当的角色后,您可以将该账号添加到目标 Distributed Cloud 已连接集群。

Distributed Cloud Connected 不支持将 Identity and Access Management 群组或第三方身份提供方与 Distributed Cloud Connected 集群上的 Kubernetes RBAC 搭配使用。

您需要使用以下 Kubernetes 资源向用户授予角色:

  • ClusterRole:允许您将一组权限应用于集群中的任何命名空间;还授予对集群范围资源的访问权限。
  • ClusterRoleBinding:将 ClusterRole 资源绑定到用户账号。
  • Role:允许您将一组权限应用于特定命名空间。
  • RoleBinding:将 RoleClusterRole 资源绑定到特定命名空间中的用户账号。

为集群管理员授予权限

创建 Distributed Cloud 连接集群时,您用来创建集群的用户账号会自动成为集群管理员。如需向其他用户授予集群管理员权限,请通过创建 ClusterRoleBinding 资源将目标用户账号绑定到 cluster-admin 角色,并将其应用于集群:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: BINDING_NAME
subjects:
  kind: User
  name: ACCOUNT_NAME
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io    

替换以下内容:

  • BINDING_NAME:唯一标识此角色绑定的名称。
  • ACCOUNT_NAME:目标用户账号的名称。

您还可以使用以下 kubectl 命令:

kubectl create clusterrolebinding "BINDING_NAME" \
  --clusterrole cluster-admin --user "ACCOUNT_NAME"

替换以下内容:

  • BINDING_NAME:唯一标识此角色绑定的名称。
  • ACCOUNT_NAME:目标用户账号的名称。

为应用开发者授予权限

如需向应用开发者授予在目标集群上部署工作负载所需的权限,请执行以下操作:

  1. 创建一个 Role 资源,用于授予在目标命名空间中创建和管理 Pod、Service 和部署的权限,并将其应用于集群:

    apiVersion: rbac.authorization.k8s.io/v1
     kind: Role
     metadata:
       namespace: NAMESPACE
       name: ROLE_NAME
     rules:
       apiGroups: ["apps", ""]
       resources: ["pods", "deployments", "services"]
       verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
    

    替换以下内容:

    • NAMESPACE:目标命名空间的名称。
    • ROLE_NAME:唯一标识此角色的名称。
  2. 创建 RoleBinding 资源,将目标用户账号绑定到您在上一步中创建的角色,然后将其应用于集群:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
     namespace: NAMESPACE
     name: BINDING_NAME
    subjects:
     kind: User
     name: ACCOUNT_NAME
     kind: User
     name: ACCOUNT_NAME
    roleRef:
     kind: Role
     name: ROLE_NAME
     apiGroup: rbac.authorization.k8s.io  
    

    替换以下内容:

    • BINDING_NAME:唯一标识此角色绑定的名称。
    • NAMESPACE:目标命名空间的名称。
    • ACCOUNT_NAME:目标用户账号的名称。
    • ROLE_NAME:目标角色的名称。

为 Cloud Build 服务代理授予权限

如需向 Cloud Build 服务代理授予在目标集群上部署工作负载所需的权限,请执行以下操作:

  1. 创建一个 Role 资源,用于授予在目标命名空间中创建和管理 Pod、Service 和部署的权限,并将其应用于集群:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
     namespace: NAMESPACE
     name: ROLE_NAME
    rules:
     apiGroups: ["apps", ""]
     resources: ["pods", "deployments", "services"]
     verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
    

    替换以下内容:

    • NAMESPACE:目标命名空间的名称。
    • ROLE_NAME:唯一标识此角色的名称。
  2. 创建 RoleBinding 资源,将目标 Cloud Build 服务代理账号绑定到您在上一步中创建的角色,并将其应用于集群:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
     namespace: NAMESPACE
     name: BINDING_NAME
    subjects:
     kind: User
     name: PROJECT_ID@cloudbuild.gserviceaccount.com
    roleRef:
     kind: Role
     name: ROLE_NAME
     apiGroup: rbac.authorization.k8s.io  
    

    替换以下内容:

    • BINDING_NAME:唯一标识此角色绑定的名称。
    • NAMESPACE:目标命名空间的名称。
    • PROJECT_ID:目标 Google Cloud 项目的 ID。
    • ROLE_NAME:目标角色的名称。

如果您需要向 Cloud Build 服务代理授予在目标集群的所有命名空间中部署和管理工作负载的权限,请创建 ClusterRoleClusterRoleBinding 资源,而不是 RoleRoleBinding 资源。

授予查看集群信息的权限

如需授予在 Google Cloud 控制台中查看集群详细信息所需的权限,请执行以下操作:

  1. 创建 ClusterRole 资源,以允许 Connect Agent 模拟需要在 Google Cloud 控制台中查看集群信息的用户:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
     name: ROLE_NAME
    rules:
     apiGroups: [""]
     resources: ["users"]
     verbs: ["impersonate"]
     resourceNames: ["ACCOUNT_NAME"]
    

    替换以下内容:

    • ROLE_NAME:目标角色的名称。
    • ACCOUNT_NAME:目标用户账号的名称。
  2. 创建 ClusterRoleBinding 资源,将 Connect Agent 服务代理账号绑定到您在上一步中创建的角色,然后将其应用于集群:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
     name: BINDING_NAME
    subjects:
     kind: ServiceAccount
     name: ACCOUNT_NAME
    roleRef:
     kind: ClusterRole
     name: ROLE_NAME
     apiGroup: rbac.authorization.k8s.io
    

    替换以下内容:

    • BINDING_NAME:唯一标识此角色绑定的名称。
    • ACCOUNT_NAME:目标服务用户账号的名称。
    • ROLE_NAME:目标角色的名称。

您必须为每位受影响的用户分别创建 ClusterRoleClusterRoleBinding 资源对。

您还可以使用 kubectl 命令行工具授予查看集群信息所需的权限,如下所示:

  1. 创建 ClusterRole 资源,以允许 Connect Agent 模拟需要在 Google Cloud 控制台中查看集群信息的用户:

    kubectl create clusterrole "ROLE_NAME" --verb impersonate \
     --resource users --resource-name "ACCOUNT_NAME"
    

    替换以下内容:

    • ROLE_NAME:目标角色的名称。
    • ACCOUNT_NAME:目标服务用户账号的名称。
  2. 创建 ClusterRoleBinding 资源,将 Connect Agent 服务代理账号绑定到您在上一步中创建的角色,然后将其应用于集群:

    kubectl create clusterrolebinding "BINDING_NAME" --clusterrole \
     "ROLE_NAME" --serviceaccount "ACCOUNT_NAME"
    

    替换以下内容:

    • BINDING_NAME:唯一标识此角色绑定的名称。
    • ACCOUNT_NAME:目标服务用户账号的名称。
    • ROLE_NAME:目标角色的名称。

使用 Connect 网关访问 Distributed Cloud Connected 集群

您可以选择使用连接网关来访问 Distributed Cloud Connected 集群。Connect Gateway 用户需要一个或多个以下角色,具体取决于其业务需求:

  • Connect Gateway Admin (roles/gkehub.gatewayAdmin):授予对 Connect Gateway API 的访问权限。这样一来,您就可以使用 kubectl 命令行工具来管理集群。
  • Gateway Gateway Editor (roles/gkehub.gatewayEditor):授予对集群的读写权限。
  • Connect Gateway Reader (roles/gkehub.gatewayReader):授予对集群的只读访问权限。
  • GKE Hub Viewer (roles/gkehub.viewer):授予从集群检索 kubeconfig 文件的权限。

如需详细了解如何使用 Connect 网关,请参阅以下内容: