Help us learn about your current experience with the documentation. Take the survey.

授予用户 Kubernetes 访问权限

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
  • Status: Beta

作为组织中 Kubernetes 集群的管理员,您可以授予特定项目或组成员 Kubernetes 访问权限。

授予访问权限也会为项目或组激活 Kubernetes Dashboard

对于 GitLab 自托管实例,请确保您:

  • 在同一域上托管您的 GitLab 实例和 KAS
  • 在 GitLab 的子域上托管 KAS。例如,GitLab 在 gitlab.com,KAS 在 kas.gitlab.com

配置 Kubernetes 访问权限

当您要授予用户对 Kubernetes 集群的访问权限时,请配置访问权限。

先决条件:

  • Kubernetes 代理已安装在 Kubernetes 集群中。
  • 您必须拥有 Developer 角色或更高权限。

要配置访问权限:

  • 在代理配置文件中,使用以下参数定义 user_access 关键字:

    • projects: 应该有访问权限的项目列表。您可以授权最多 500 个项目。
    • groups: 应该有访问权限的组列表。您可以授权最多 500 个组。它授予对组及其所有后代的访问权限。
    • access_as: 对于使用代理身份的访问,值为 { agent: {...} }

配置访问权限后,请求将使用代理服务帐户转发到 API 服务器。 例如:

# .gitlab/agents/my-agent/config.yaml

user_access:
  access_as:
    agent: {}
  projects:
    - id: group-1/project-1
    - id: group-2/project-2
  groups:
    - id: group-2
    - id: group-3/subgroup

配置用户模拟访问权限

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

您可以授予对 Kubernetes 集群的访问权限,并将请求转换为已认证用户的模拟请求。

先决条件:

  • Kubernetes 代理已安装在 Kubernetes 集群中。
  • 您必须拥有 Developer 角色或更高权限。

要配置用户模拟访问权限:

  • 在代理配置文件中,使用以下参数定义 user_access 关键字:

    • projects: 应该有访问权限的项目列表。
    • groups: 应该有访问权限的组列表。
    • access_as: 对于用户模拟,值为 { user: {...} }

配置访问权限后,请求将转换为已认证用户的模拟请求。

用户模拟工作流程

安装的 agentk 如下模拟给定用户:

  • UserNamegitlab:user:<username>
  • Groups 是:
    • gitlab:user: 来自 GitLab 用户的请求共有。
    • gitlab:project_role:<project_id>:<role>:每个授权项目中每个角色的。
    • gitlab:group_role:<group_id>:<role>:每个授权组中每个角色的。
  • Extra 携带有关请求的附加信息:
    • agent.gitlab.com/id: 代理 ID。
    • agent.gitlab.com/username: GitLab 用户的用户名。
    • agent.gitlab.com/config_project_id: 代理配置项目 ID。
    • agent.gitlab.com/access_type: personal_access_tokensession_cookie 之一。仅限 Ultimate。

只有配置文件中 user_access 下直接列出的项目和组会被模拟。例如:

# .gitlab/agents/my-agent/config.yaml

user_access:
  access_as:
    user: {}
  projects:
    - id: group-1/project-1 # group_id=1, project_id=1
    - id: group-2/project-2 # group_id=2, project_id=2
  groups:
    - id: group-2 # group_id=2
    - id: group-3/subgroup # group_id=3, group_id=4

在此配置中:

  • 如果用户只是 group-1 的成员,他们只会收到 Kubernetes RBAC 组 gitlab:project_role:1:<role>
  • 如果用户是 group-2 的成员,他们会收到两个 Kubernetes RBAC 组:
    • gitlab:project_role:2:<role>,
    • gitlab:group_role:2:<role>

RBAC 授权

模拟请求需要 ClusterRoleBindingRoleBinding 来识别 Kubernetes 内部的资源权限。 请参阅 RBAC 授权 了解适当的配置。

例如,如果您允许 awesome-org/deployment 项目(ID: 123)的维护者读取 Kubernetes 工作负载,您必须向您的 Kubernetes 配置添加一个 ClusterRoleBinding 资源:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: my-cluster-role-binding
roleRef:
  name: view
  kind: ClusterRole
  apiGroup: rbac.authorization.k8s.io
subjects:
  - name: gitlab:project_role:123:maintainer
    kind: Group

使用 Kubernetes API 访问集群

您可以配置一个代理,允许 GitLab 用户使用 Kubernetes API 访问集群。

先决条件:

  • 您有一个配置了 user_access 条目的代理。

使用 GitLab CLI(推荐)配置本地访问

您可以使用 GitLab CLI glab 创建或更新 Kubernetes 配置文件以访问代理 Kubernetes API。

使用 glab cluster agent 命令管理集群连接:

  1. 查看与您的项目关联的所有代理列表:
glab cluster agent list --repo '<group>/<project>'

# 如果您当前的工作目录是带有代理的项目的 Git 仓库,可以省略 --repo 选项:
glab cluster agent list
  1. 使用输出第一列中显示的数字代理 ID 更新您的 kubeconfig
glab cluster agent update-kubeconfig --repo '<group>/<project>' --agent '<agent-id>' --use-context
  1. 使用 kubectl 或您首选的 Kubernetes 工具验证更新:
kubectl get nodes

update-kubeconfig 命令将 glab cluster agent get-token 设置为 credential plugin 供 Kubernetes 工具检索令牌。get-token 命令创建并返回一个个人访问令牌,该令牌在当天结束前有效。 Kubernetes 工具会缓存令牌,直到其过期、API 返回授权错误或进程退出。期望所有后续调用 Kubernetes 工具都会创建新令牌。

glab cluster agent update-kubeconfig 命令支持多个命令行标志。您可以使用 glab cluster agent update-kubeconfig --help 查看所有支持的标志。

一些示例:

# 当当前工作目录是注册代理的 Git 仓库时,可以省略 --repo / -R 标志
glab cluster agent update-kubeconfig --agent '<agent-id>'

# 当指定 --use-context 选项时,kubeconfig 文件的 `current-context` 更改为代理上下文
glab cluster agent update-kubeconfig --agent '<agent-id>' --use-context

# --kubeconfig 标志可用于指定备用 kubeconfig 路径
glab cluster agent update-kubeconfig --agent '<agent-id>' --kubeconfig ~/gitlab.kubeconfig

使用个人访问令牌手动配置本地访问

您可以使用长期有效的个人访问令牌配置对 Kubernetes 集群的访问:

  1. 在左侧边栏,选择 Search or go to 并找到您的项目。

  2. 选择 Operate > Kubernetes clusters 并检索您要访问的代理的数字 ID。您需要此 ID 来构建完整的 API 令牌。

  3. 创建一个具有 k8s_proxy 范围的 个人访问令牌。您需要访问令牌来构建完整的 API 令牌。

  4. 构建访问集群的 kubeconfig 条目:

    1. 确保选择了正确的 kubeconfig。 例如,您可以设置 KUBECONFIG 环境变量。

    2. 将 GitLab KAS 代理集群添加到 kubeconfig

      kubectl config set-cluster <cluster_name> --server "https://kas.gitlab.com/k8s-proxy"

      server 参数指向您 GitLab 实例的 KAS 地址。 在 GitLab.com 上,这是 https://gitlab.com/k8s-proxy。 在注册代理时,您可以获取您实例的 KAS 地址。

    3. 使用您的数字代理 ID 和个人访问令牌构建 API 令牌:

      kubectl config set-credentials <gitlab_user> --token "pat:<agent-id>:<token>"
    4. 添加上下文以组合集群和用户:

      kubectl config set-context <gitlab_agent> --cluster <cluster_name> --user <gitlab_user>
    5. 激活新上下文:

      kubectl config use-context <gitlab_agent>
  5. 检查配置是否有效:

    kubectl get nodes

配置的用户可以使用 Kubernetes API 访问您的集群。

相关主题