码迷,mamicode.com
首页 > 其他好文 > 详细

k8s创建指定用户只对指定namesapce下的资源有操作权限

时间:2020-03-25 01:50:18      阅读:402      评论:0      收藏:0      [点我收藏+]

标签:names   etc   port   red   add   image   ica   执行   contex   

目标: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命名空间下有效

这在企业中对于权限的把控还是很有必要的

k8s创建指定用户只对指定namesapce下的资源有操作权限

标签:names   etc   port   red   add   image   ica   执行   contex   

原文地址:https://blog.51cto.com/11954248/2481403

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!