授予用户 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 如下模拟给定用户:
UserName是gitlab: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_token或session_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 授权
模拟请求需要 ClusterRoleBinding 或 RoleBinding 来识别 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 命令管理集群连接:
- 查看与您的项目关联的所有代理列表:
glab cluster agent list --repo '<group>/<project>'
# 如果您当前的工作目录是带有代理的项目的 Git 仓库,可以省略 --repo 选项:
glab cluster agent list- 使用输出第一列中显示的数字代理 ID 更新您的
kubeconfig:
glab cluster agent update-kubeconfig --repo '<group>/<project>' --agent '<agent-id>' --use-context- 使用
kubectl或您首选的 Kubernetes 工具验证更新:
kubectl get nodesupdate-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 集群的访问:
-
在左侧边栏,选择 Search or go to 并找到您的项目。
-
选择 Operate > Kubernetes clusters 并检索您要访问的代理的数字 ID。您需要此 ID 来构建完整的 API 令牌。
-
创建一个具有
k8s_proxy范围的 个人访问令牌。您需要访问令牌来构建完整的 API 令牌。 -
构建访问集群的
kubeconfig条目:-
确保选择了正确的
kubeconfig。 例如,您可以设置KUBECONFIG环境变量。 -
将 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 地址。 -
使用您的数字代理 ID 和个人访问令牌构建 API 令牌:
kubectl config set-credentials <gitlab_user> --token "pat:<agent-id>:<token>" -
添加上下文以组合集群和用户:
kubectl config set-context <gitlab_agent> --cluster <cluster_name> --user <gitlab_user> -
激活新上下文:
kubectl config use-context <gitlab_agent>
-
-
检查配置是否有效:
kubectl get nodes
配置的用户可以使用 Kubernetes API 访问您的集群。