OpenShift用户与组的管理功能如何在Kubernetes上实现

OpenShift用户管理图

OpenShift中有用户及组的概念,并且提供了User与Group资源类型,可以非常方便地为OpenShift集群创建用户,创建组,以组给用户进行组管理,并授权。这也大大方便了集群账号的管理与权限的控制。

[openshift@master01 ~] oc create user dev-user # 创建用户dev-user
[openshift@master01 ~] oc adm groups new my-group # 创建组my-group
[openshift@master01 ~] oc adm groups new my-group dev-user # 创建组my-group,并添加dev-user到该组
[openshift@master01 ~] oc adm groups add-users my-group dev-user # 为组my-group添加用户dev-user
[openshift@master01 ~] oc adm groups remove-users my-group dev-user # 将用户dev-user从my-group组中移除

与OpenShift一样,K8S也是通过RBAC实现权限控制。RBAC(Role-Based Access Control)即为基于角色的访问控制。K8S中与RBAC相关的资源类型有:Role、ClusterRole、RoleBinding、ClusterRoleBinding。那么针对K8S集群,有没有办法实现类似于OpenShift的用户、组的管理呢?答案是肯定的,但是需要执行一系列的脚本操作。

本篇将介绍如何通过命令为Kubernetes创建用户及用户组,并对用户进行授权。同时设计了一个脚本工具来模拟实现类似OpenShift用户与组的功能。

K8S获取用户信息及对用户(组)授权

获取当前用户名

[k8s@master01 ~] kubectl config view -o=jsonpath="{.contexts[0].context.user}"
dev-user

为用户赋予namespace的管理员权限

[k8s@master01 ~] kubectl create rolebinding dev-user-admin-binding --clusterrole=admin --user=dev-user --namespace=dev
[k8s@master01 ~] kubectl create rolebinding dev-user-admin-binding --clusterrole=admin --user=dev-user -n sit

为组授权,赋予namespace管理员权限

[k8s@master01 ~] kubectl create rolebinding dev-group-admin-binding --clusterrole=admin --group=dev-group --namespace=dev
[k8s@master01 ~] kubectl create rolebinding dev-group-admin-binding --clusterrole=admin --group=dev-user -n sit

生成用户及组证书

  1. 配置信息脚本 config.sh
#!/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证书存放目录
  1. 为新用户创建证书脚本 add_user.sh
#!/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"
  1. 在k8s的主节点运行add_user.sh,即可完成用户证书的生成。

用户、组权限与访问控制工具k8sum(K8S User Manager)设计

该工具包含以下功能

  1. 功能说明
  2. 创建用户
  3. 为用户分配组信息
  4. 为用户或者组绑定role,设置权限
  5. 为用户或者组绑定clusterrole,设置权限

工具使用手册说明

  1. 功能说明
$ k8sum [-h/--help]
k8sum是一个Kubernetes用户权限管理工具,它能够实现用户创建、分组、权限分配等功能。
格式:
k8sum [command] [--args]
command:
  create 创建访问配置文件
  bind 为用户/组绑定权限
  1. 创建用户
$ k8sum create --user=user-dev
  1. 为用户分配组信息
$ k8sum create --user=user-dev --group=group1,goup2
  1. 为用户或者组绑定role
$ k8sum bind --user=user-dev --role=role1
$ k8sum bind --group=group1 --role=role1
  1. 为用户或者组绑定clusterrole
$ k8sum 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实战:为账号一统

参考文章

为Kubernetes集群添加用户
RBAC——基于角色的访问控制

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354