K8S限制不同的用户操作固定命名空间
为用户签发证书
ssl认证
#进入存放ca证书的文件夹
$ cd /etc/kubernetes/pki/
#生成私钥key
$ (umask 077; openssl genrsa -out hxg.key 2048)
#生成一个用户名为user-hxg的证书
$ openssl req -new -key hxg.key -out hxg.csr -subj "/CN=user-hxg"
$ openssl x509 -req -in hxg.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out hxg.crt -days 3650
Signature ok
subject=/CN=user-hxg
Getting CA Private Key
注意:
- 生成密钥的命令使用
()
,可以避免修改umask影响到系统的umask - 流程是 生成密钥 =====》用密钥生成证书请求文件 CN是指定给哪个用户请求证书 =====》用密钥和请求文件,让ca签发证书 days是有效期
在kubeconfig下新增用户
#把user-hxg这个用户添加到kubernetes集群中,可以用来认证apiserver的连接
$ kubectl config set-credentials user-hxg --client-certificate=./hxg.crt --client-key=./hxg.key --embed-certs=true
User "user-hxg" set.
#在配置文件的上下文中新增加一个user-hxg这个账号
$ kubectl config set-context user-hxg@kubernetes --cluster=kubernetes --user=user-hxg
Context "user-hxg@kubernetes" created.
注意:
- 使用set-credentials添加证书和私钥
- 使用set-context添加用户的上下文 格式必须是
<用户名>@<集群名>
例如user-hxg@kubernetes
最后体现在配置文件中的效果
切换上下文
$ kubectl config use-context user-hxg@kubernetes
Switched to context "user-hxg@kubernetes".
$ kubectl get pod
Error from server (Forbidden): pods is forbidden: User "user-hxg" cannot list resource "pods" in API group "" in the namespace "default"
可以看到切换到user-hxg@kubernetes的,默认没有任何权限
#切换回原上下文
$ kubectl config use-context kubernetes-admin@kubernetes #这个是集群用户,有任何权限
授权
把user-hxg用户通过rolebinding绑定到管理员的clusterrole上,用户就可以对rolebinding所在命名空间下有任何的操作
注意,只能是给定的命名空间,如果想操作所有的命名空间,需要使用clusterRoleBanding
命令行创建
#创建命名空间
$ kubectl create ns rbac
#创建rolebinding 将用户绑定在命名空间中,并授予命名空间的管理员权限
$ kubectl create rolebinding user-hxg-bind -n rbac --clusterrole=cluster-admin --user=user-hxg
yaml文件创建
#创建命名空间
---
apiVersion: v1
kind: Namespace
metadata:
name: rbac
#创建rolebinding
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: user-hxg-bind
namespace: rbac
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- namespace: rbac
kind: User
name: user-hxg
切换上下文查看权限
$ kubectl config use-context user-hxg@kubernetes
Switched to context "user-hxg@kubernetes".
#拒绝访问默认命名空间下的资源
$ kubectl get pod
Error from server (Forbidden): pods is forbidden: User "user-hxg" cannot list resource "pods" in API group "" in the namespace "default"
#可访问指定命名空间下的资源
$ kubectl get pod -n rbac
No resources found in rbac namespace.
$ kubectl get svc -n rbac
No resources found in rbac namespace.
给用户生成配置文件
新建用户
$ useradd hxg
修改并拷贝配置文件
#新建存放配置文件的目录
$ mkdir /home/hxg/.kube
#拷贝配置文件
$ cp /root/.kube/config /home/hxg/.kube/
#修改配置文件
$ vim /home/hxg/.kube/
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1J............==
server: https://10.0.0.5:6443
name: kubernetes
contexts: #删除上下文中的其他用户的上下文,只保留user-hxg用户的
- context:
cluster: kubernetes
user: user-hxg
name: user-hxg@kubernetes
current-context: user-hxg@kubernetes #修改此处的上下文,将上下文修改成user-hxg用户的
kind: Config
preferences: {}
users: #删除其他用户的密钥和证书 只留user-hxg用胡的证书和密钥
- name: user-hxg
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS..............=
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJ..................=
#修改属主属组
$ chown -R hxg:hxg /home/hxg/.kube
修改的要点
- 修改当前上下文
current-context
字段的值,将当前上下文的值改为user-hxg用户 - 删除其他用户的上下文 删除其他用户的密钥和证书
验证
#切换到hxg下
$ su - hxg
上一次登录:六 10月 22 03:44:41 CST 2022pts/0 上
#无法查看默认命名空间的
$ kubectl get pod
Error from server (Forbidden): pods is forbidden: User "user-hxg" cannot list resource "pods" in API group "" in the namespace "default"
#可以查看rbac命名空间的
$ kubectl get pods -n rbac
No resources found in rbac namespace.
删除用户及删除上下文
$ kubectl config delete-user user-hxg
deleted user user-hxg from /root/.kube/config
$ kubectl config delete-context user-hxg@kubernetes
deleted context user-hxg@kubernetes from /root/.kube/config
注意:要想解除某个用户的权限,只删除配置文件中的用户和上下文是无法取消权限的,需要删除roleBinding或者cluserRoleBinding才行
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/17114538.html