首页 > 其他分享 >授权用户能查看所有名称空间的pod的权限

授权用户能查看所有名称空间的pod的权限

时间:2023-01-08 07:11:07浏览次数:40  
标签:kubectl hxg kubernetes -- 用户 user 授权 pod 权限

签发一个证书

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
#创建集群角色
$ kubectl create clusterrole pod-read --verb=get,list,watch --resource=pods
#创建clusterRoleBinding将用户绑定在集群角色上
$ kubectl create clusterrolebinding user-hxg-bind  --clusterrole=cluster-admin --user=user-hxg

yaml文件创建

#创建命名空间
---
apiVersion: v1
kind: Namespace
metadata:
  name: rbac
#创建集群角色clusterRole
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-read
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - list
  - watch
  - get
#创建cluserRoleBinding
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: pod-read-bind
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: pod-read
subjects:
- kind: User
  name: user-hxg

切换上下文查看权限

$ kubectl config use-context user-hxg@kubernetes 
Switched to context "user-hxg@kubernetes".
#可以访问pod
$ kubectl get pods
NAME                               READY   STATUS    RESTARTS        AGE
nfs-provisioner-7cbb47c7cc-xgckw   1/1     Running   1 (7h17m ago)   29h
#拒绝访问service
$ kubectl get svc
Error from server (Forbidden): services is forbidden: User "user-hxg" cannot list resource "services" in API group "" in the namespace "default"

给用户生成配置文件

新建用户

$ 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

验证

#切换到hxg下
$ su - hxg
上一次登录:六 10月 22 03:44:41 CST 2022pts/0 上
#可以访问pod
$ kubectl get pods
NAME                               READY   STATUS    RESTARTS        AGE
nfs-provisioner-7cbb47c7cc-xgckw   1/1     Running   1 (7h17m ago)   29h
#拒绝访问service
$ kubectl get svc
Error from server (Forbidden): services is forbidden: User "user-hxg" cannot list resource "services" in API group "" in the namespace "default"

标签:kubectl,hxg,kubernetes,--,用户,user,授权,pod,权限
From: https://www.cnblogs.com/guangdelw/p/17034055.html

相关文章