k8s创建指定用户只对指定namesapce下的资源有操作权限
转发于网上
目标:devuser用户只对namespace是dev下的资源有操作权限
一、基础配置设置
1、首先useradd创建一个devuser用户,并修改密码:
使用devuser执行kubectl get pod命令不会成功,因为devuser现在对任何一个namespace下的资源都没有权限
2、创建一个dev的namespace
二、k8s config 文件生成
1、创建用来生成密钥的json文件
cat /k8s/cert/devuser.json
{
"CN": "devuser",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ShenZhen",
"L": "ShenZhen",
"O": "k8s",
"OU": "System"
}
]
}
2、获取生成密钥的命令文件:
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
指定密钥文件,生成密钥(此步命令尽量在/etc/kubernetes/pki路径下执行,因为该路径下本身就是存放k8s认证相关的文件)
cfssl gencert -ca=ca.crt -ca-key=ca.key -profile=kubernetes /k8s/cert/devuser.json | cfssljson -bare devuser
执行完成,已经有了devuser的密钥文件
声明一下apiserver环境变量:
export KUBE_APISERVER="https://10.18.6.127:6443"
3、设置集群参数:
[root@kb-master cert]# kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=devuser.kubeconfig
4、设置客户端认证参数:
[root@kb-master cert]# kubectl config set-credentials devuser \
--client-certificate=/etc/kubernetes/pki/devuser.pem \
--client-key=/etc/kubernetes/pki/devuser-key.pem \
--embed-certs=true \
--kubeconfig=devuser.kubeconfig
5、设置上下文参数
[root@kb-master cert]# kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=devuser \
--namespace=dev \
--kubeconfig=devuser.kubeconfig
6、进行RoleBinding角色绑定
kubectl create rolebinding devuser-admin-rolebinding(rolebinding的名字) --clusterrole=admin(clusterrole的名字,admin在k8s所有namespace下都有最高权限) --user=devuser(将admin的权限赋予devuser用户) --namespace=dev(范围是dev这个namespace下) 即dev
7、将devuser.kubeconfig复制到/home/devuser/.kube目录下
cp devuser.kubeconfig /home/devuser/.kube/config
chown devuser.devuser devuser.kubeconfig
8、在dev用户下切换上下文
再查看pod资源就不会报错了,但是目前dev的namespace下没有任何pod在运行
使用devuser创建deployment
使用root用户查看pod信息,发现pod都是dev命名空间下的
说明devuser的kubectl命令默认只在dev命名空间下生效,也只能在dev命名空间下有效
这在企业中对于权限的把控还是很有必要的
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)