OpenShift用户与组的管理功能如何在Kubernetes上实现
OpenShift中有用户及组的概念,并且提供了User与Group资源类型,可以非常方便地为OpenShift集群创建用户,创建组,以组给用户进行组管理,并授权。这也大大方便了集群账号的管理与权限的控制。
1 | [openshift@master01 ~] oc create user dev-user # 创建用户dev-user |
与OpenShift一样,K8S也是通过RBAC实现权限控制。RBAC(Role-Based Access Control)即为基于角色的访问控制。K8S中与RBAC相关的资源类型有:Role、ClusterRole、RoleBinding、ClusterRoleBinding。那么针对K8S集群,有没有办法实现类似于OpenShift的用户、组的管理呢?答案是肯定的,但是需要执行一系列的脚本操作。
本篇将介绍如何通过命令为Kubernetes创建用户及用户组,并对用户进行授权。同时设计了一个脚本工具来模拟实现类似OpenShift用户与组的功能。
K8S获取用户信息及对用户(组)授权
获取当前用户名
1 | [k8s@master01 ~] kubectl config view -o=jsonpath="{.contexts[0].context.user}" |
为用户赋予namespace的管理员权限
1 | [k8s@master01 ~] kubectl create rolebinding dev-user-admin-binding --clusterrole=admin --user=dev-user --namespace=dev |
为组授权,赋予namespace管理员权限
1 | [k8s@master01 ~] kubectl create rolebinding dev-group-admin-binding --clusterrole=admin --group=dev-group --namespace=dev |
生成用户及组证书
- 配置信息脚本
config.sh
1
2
3
4
5
6#!/bin/bash
USERNAME=username #用户名
GROUP=/O=group #用户所属组,多个组可以使用/O=group1/O=group2
DEFAULT_NS=kube-system # 默认ns
API_SERVER=https://master.k8s.com:6443 #K8S API Server地址
K8S_PKI_PATH=/etc/kubernetes/pki/ # K8S证书存放目录 - 为新用户创建证书脚本
add_user.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#!/bin/bash
source config.sh # 导入配置信息
K8S_PKI_PATH=${K8S_PKI_PATH%/}
mkdir -p .tmp
openssl genrsa -out .tmp/$USERNAME.key 2048 # 生成密钥
openssl req -new -key .tmp/$USERNAME.key -out .tmp/$USERNAME.csr -subj "/CN=${USERNAME}${GROUP}" #生成csr证书,包含用户名及组信息
openssl x509 -req -in .tmp/$USERNAME.csr -CA ${K8S_PKI_PATH}/ca.crt -CAkey ${K8S_PKI_PATH}/ca.key -CAcreateserial -out .tmp/$USERNAME.crt -days 3650 #生成crt证书
# 使用k8s证书与生成的用户证书生成访问配置文件$USERNAME.conf
kubectl config --kubeconfig=$USERNAME.conf set-cluster kubernetes --server=$API_SERVER --certificate-authority=${K8S_PKI_PATH}/ca.crt --embed-certs
kubectl config --kubeconfig=$USERNAME.conf set-credentials $USERNAME --client-certificate=.tmp/$USERNAME.crt --client-key=.tmp/$USERNAME.key --embed-certs=true
kubectl config --kubeconfig=$USERNAME.conf set-context $USERNAME@kubernetes --cluster=kubernetes --user=$USERNAME --namespace=$DEFAULT_NS
kubectl config --kubeconfig=$USERNAME.conf use-context $USERNAME@kubernetes
echo -e "请将下面的文件内容复制到需要的用户目录.kube/config文件中\n\n"
cat $USERNAME.conf
echo -e "\n\n" - 在k8s的主节点运行add_user.sh,即可完成用户证书的生成。
用户、组权限与访问控制工具k8sum(K8S User Manager)设计
该工具包含以下功能
0. 功能说明
- 创建用户
- 为用户分配组信息
- 为用户或者组绑定role,设置权限
- 为用户或者组绑定clusterrole,设置权限
工具使用手册说明
0. 功能说明
1 | k8sum [-h/--help] |
- 创建用户
1
k8sum create --user=user-dev
- 为用户分配组信息
1
k8sum create --user=user-dev --group=group1,goup2
- 为用户或者组绑定role
1
2k8sum bind --user=user-dev --role=role1
k8sum bind --group=group1 --role=role1 - 为用户或者组绑定clusterrole
1
2k8sum bind --user=user-dev --clusterrole=clusterrole1
k8sum bind --group=group1 --clusterrole=clusterrole1
总结
RBAC设计来源于OpenShift,最后融入到了K8S。虽然都是基于RBAC,但是OpenShift在对用户权限的管理这一块考虑得更加全面,也更为实用。K8S真正要做好权限管理这块,还需要做更多的集成或二次开发的工作。
补充说明
:OpenShift也好,Kubernetes也好,都可以对接第三方认证,如Keystone,LDAP,OpenID Connect等。
OpenShift与OpenLDAP结接,可参考之前分享的文章:Openshift上部署OpenLDAP实战:为账号一统
参考文章
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Michael Blog!
评论