k8s rbac授权详解
rbac是什么
用户使用普通用户管理k8s集群,有什么的权限
pod访问k8s权限,如何呢,就是靠这个service account
角色role 给每个空间设置权限,如果有多个空间的话,就比较的麻烦
因此的话就需要这个集群角色,不是名称空间级别的,设置一个集群角色后,在绑定的时候,就能应用在多个空间下了
身份认证
目前在k8s集群环境下,只能在master上执行命令,在node节点上执行就会报错
[root@node1 ~]# kubectl get pod
The connection to the server localhost:8080 was refused - did you specify the right host or port?
为什么会报错呢?原因就是node节点上没有认证文件,master节点上有认证文件
[root@master kubernetes]# ls
admin.conf controller-manager.conf kubelet.conf manifests pki scheduler.conf
# 这个admin.conf和/root/.kube/config内容是一致的
这个文件就是一个管理员账户文件
node节点操作
将管理员文件拷贝到node节点上
[root@master kubernetes]# scp admin.conf 192.168.50.21:/root
# 指定--kubeconfig就能执行命令了
[root@node1 ~]# kubectl get pod --kubeconfig=admin.conf
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-5cf5744c5f-fzjh8 1/1 Running 4 9d
# 直接写入到环境变量里面去
echo "export KUBECONFIG=/root/admin.conf" >> /etc/profile
# 就只能不带上kubeconfig就能操作k8s集群了
但是了存在一个问题,这个账号是管理员的权限,对这个集群有所有的权限,那不能有一个部分权限的用户呢,就是只有创建的权限,没有删除的权限这种呢?下面会讲
普通用户授权
现在创建一个普通用户zhangsan并授权
1、生成私钥
# 生成一个rsa类型的私钥,文件名为client.key
[root@master ca]# openssl genrsa --out client.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
.........................................................................................+++++
..........+++++
e is 65537 (0x010001)
[root@master ca]# ls
client.key
2、生成zhangsan用户证书请求文件
# 基于client.key生成证书请求文件client.csr
[root@master ca]# openssl req --new --key client.key --subj "/CN=zhangsan" --out client.csr
[root@master ca]# ls
client.csr client.key
3、为zhangsan用户颁发证书
zhangsan用户如何将请求发送给k8s的ca进行证书颁发呢?使用k8s自带的ca颁发证书
[root@master ca]# openssl x509 -req -in client.csr -CA /etc/kubernetes/pki/ca.crt --CAkey /etc/kubernetes/pki/ca.key --CAcreateserial -out client.crt -days 3650
Signature ok
subject=CN = zhangsan
Getting CA Private Key
# 拷贝ca到当前目录
[root@master ca]# cp /etc/kubernetes/pki/ca.crt .
[root@master ca]# ls
ca.crt client.crt client.csr client.key
4、创建命名空间和pod
[root@master ca]# kubectl create ns zhangsan
namespace/zhangsan created
[root@master ca]# kubectl run b1 --image=nginx:1.25 --image-pull-policy IfNotPresent --namespace zhangsan --dry-run=client -o yaml > n1.yml
[root@master ca]# kubectl apply -f n1.yml
pod/b1 created
[root@master ca]# kubectl get pod -n zhangsan
NAME READY STATUS RESTARTS AGE
b1 1/1 Running 0 24s
5、创建角色
角色就是一个权限,给这个用户添加什么样的权限
起初zhangsan只有查看的权限,一个一个的添加权限
多个角色
-
开发角色,有增改差权限
-
普通用户角色,只有查的权限
-
管理员角色
角色具有命名空间级别的
集群角色没有命名空间,是集群的,所有空间都能看到
为什么会有集群角色呢?
-
因为角色是一个命名空间级别的,多个空间,就需要创建多个角色,比较的麻烦
-
因此的话,有多个空间的时候且需要的角色的权限是一致的时候,创建集群角色的话,就比较的方便,多个空间可以使用这个集群角色
# 查看角色api
[root@master ca]# kubectl api-resources | grep role
clusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBinding
clusterroles rbac.authorization.k8s.io/v1 false ClusterRole
rolebindings rbac.authorization.k8s.io/v1 true RoleBinding
roles rbac.authorization.k8s.io/v1 true Role
# 创建zhangsan空间下一个角色为pod-reader,权限为对于pod这个资源只有查看的权限
[root@master ca]# kubectl create role pod-reader --verb=get,list,watch --resource=pods --namespace zhangsan
role.rbac.authorization.k8s.io/pod-reader created
[root@master ca]# kubectl get role -n zhangsan
NAME CREATED AT
pod-reader 2026-05-02T08:43:27Z
[root@master ca]# kubectl describe role -n zhangsan pod-reader
Name: pod-reader
Labels: <none>
Annotations: <none>
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
pods [] [] [get list watch]
6、绑定角色给用户
角色绑定和集群角色绑定
这个的话就是非常重要的
# 将角色绑定到zhangsan这个用户上了
[root@master ca]# kubectl create rolebinding zhangsan --namespace zhangsan --role pod-reader --user zhangsan
rolebinding.rbac.authorization.k8s.io/zhangsan created
[root@master ca]# kubectl get rolebindings.rbac.authorization.k8s.io -n zhangsan
NAME ROLE AGE
zhangsan Role/pod-reader 6s
[root@master ca]# kubectl describe rolebindings.rbac.authorization.k8s.io -n zhangsan zhangsan Name: zhangsan
Labels: <none>
Annotations: <none>
Role:
Kind: Role
Name: pod-reader
Subjects:
Kind Name Namespace
---- ---- ---------
User zhangsan
上面的操作实现了zhangsan对zhangsan空间下的pod具有查看的权限
7、编辑kubeconfig文件
编写一个zhangsan的kubeconfig文件
后面会将密钥文件嵌入到kubeconfig文件里面
[root@master ca]# cat kube-zhangsan
apiVersion: v1
kind: Config
clusters:
- cluster:
name: cluster-zs # 集群名字可以自定义
users:
- name: zhangsan # 用户是zhangsan
contexts:
- context:
name: context-zs
namespace: zhangsan # 命名空间是zhangsan
current-context: "context-zs"
将之前的密钥文件嵌入到kuubeconfig文件中去
8、嵌入密钥文件
[root@master ca]# ls
ca.crt client.crt client.csr client.key kube-zhangsan n1.yml
# 嵌入ca文件,就是修改kubeconfig这个文件
[root@master ca]# kubectl config --kubeconfig=kube-zhangsan set-cluster cluster-zs --server=https://192.168.50.20:6443 --certificate-authority=ca.crt --embed-certs=true
Cluster "cluster-zs" set.
# 嵌入client
[root@master ca]# kubectl config --kubeconfig=kube-zhangsan set-credentials zhangsan --client-certificate=client.crt --client-key=client.key --embed-certs=true
User "zhangsan" set.
# 此时看这个kube-zhangsan文件的信息就非常的多了
# 设置上下文信息
[root@master ca]# kubectl config --kubeconfig=kube-zhangsan set-context context-zs --cluster=cluster-zs --namespace=zhangsan --user=zhangsan
Context "context-zs" modified.
9、验证权限
# 只有查看zhangsan空间下pod的权限
# 每次操作的时候都需要带上--kubec-config,不想带的话,就添加到环境变量中
[root@master ca]# kubectl get pod --kubeconfig=kube-zhangsan
NAME READY STATUS RESTARTS AGE
b1 1/1 Running 0 122m
# 查看ns,发现没有权限
[root@master ca]# kubectl get ns --kubeconfig=kube-zhangsan
Error from server (Forbidden): namespaces is forbidden: User "zhangsan" cannot list resource "namespaces" in API group "" at the cluster scope
# 以后就可以发布这个文件给别人,这样就不会使用admin账号
这样的话,就是一个创建用户并授权的过程
注意的点
[root@master ca]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
# 默认读取的文件是/root/.kube/config文件
静态token登录
使用账号和密码登录
静态的方式就是创建一个csv文件,csv的格式是token,user,id
1、生成token
# 尽量将文件存放在/etc/kubernetes/pki下,k8s默认对这个目录有权限操作
[root@master pki]# openssl rand -hex 10 > jerry.csv
[root@master pki]# cat jerry.csv
bfd16b92c578aaa14594
[root@master pki]# vim jerry.csv
# 编辑文件内容,添加用户名和id
[root@master pki]# cat jerry.csv
bfd16b92c578aaa14594,jerry,2000
2、在apiserver加入参数
[root@master pki]# vim /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
containers:
- command:
- kube-apiserver
# 添加下面的--token-auth-file
- --token-auth-file=/etc/kubernetes/pki/jerry.csv
# 重启kubelet
[root@master pki]# systemctl restart kubelet.service
3、尝试登录集群
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" get pod
Unable to connect to the server: x509: certificate signed by unknown authority
# 报了一个x509错误,需要跳过安全认证
# 现在就登录了,发现没有权限,只是看不到信息而已
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" --insecure-skip-tls-verify=true get pod
Error from server (Forbidden): pods is forbidden: User "jerry" cannot list resource "pods" in API group "" in the namespace "default"
后面为这个用户添加权限就能看到一些资源了
角色授权
上面我们提到了用户登录的2种方式,有一点点授权的操作,下面会详解的介绍授权的细节
默认情况下k8s采用的是node和RBAC的鉴权模式
# 可以在kube-apiserver文件里面看到,定义的配置
spec:
containers:
- command:
- kube-apiserver
- --token-auth-file=/etc/kubernetes/pki/jerry.csv
- --advertise-address=192.168.50.20
- --allow-privileged=true
# 下面这一行,node访问的时候,鉴权使用的是rbac模式
- --authorization-mode=Node,RBAC
上面我们使用jerry用户登录但是没有任何的权限,现在我们将这一行的参数改掉
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" get pod --insecure-skip-tls-verify=true -n zhangsan
Error from server (Forbidden): pods is forbidden: User "jerry" cannot list resource "pods" in API group "" in the namespace "zhangsan"
spec:
containers:
- command:
- kube-apiserver
- --token-auth-file=/etc/kubernetes/pki/jerry.csv
- --advertise-address=192.168.50.20
- --allow-privileged=true
# - --authorization-mode=Node,RBAC
- --authorization-mode=AlwaysAllow # 这个就是允许访问,全部放行,用于测试用的
# 重启kubelet
[root@master manifests]# systemctl restart kubelet
在node节点尝试使用jerry用户
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" get pod --insecure-skip-tls-verify=true -n zhangsan
No resources found in zhangsan namespace.
# 发现可以访问了
将这个测试改回之前的
二、role和rolebinding
首先角色和角色绑定都具有命名空间,也就是说在A空间创建了角色,绑定了角色,那么在其他空间下,就不能使用了,除非在其他空间创建相应的角色

就是将权限给这个角色,角色绑定将这个角色和用户进行绑定,这样的话,这个用户就有了对应的角色,有了在这个命名空间下对应的操作了
回到我们上面的实验,jerry用户没有权限,我们创建一个角色,角色绑定
1、role创建
[root@master rbac]# kubectl create role jerry --verb="get,list,watch" --resource=pods --dry-run=client -o yaml > jerry-role.yml
# 默认在default空间下创建的role,只对role空间有作用
[root@master rbac]# cat jerry.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: null
name: jerry
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
[root@master rbac]# kubectl apply -f jerry.yml
[root@master rbac]# kubectl get role
NAME CREATED AT
jerry 2026-05-07T10:38:41Z
leader-locking-nfs-client-provisioner 2026-04-18T10:45:47Z
2、rolebinding创建
将用户jerry和role进行绑定,这样的话,用户就有这个角色
新版本的话,需要指定用户的token,老版本不会有这个问题,新版本不指定的话,是没有权限的
[root@master rbac]# kubectl create rolebinding jerry --role=jerry --user=jerry --token="bfd16b92c578aaa14594" --dry-run=client -o yaml > jerry-rolebinding.yml
[root@master rbac]# kubectl apply -f jerry-rolebinding.yml
rolebinding.rbac.authorization.k8s.io/jerry created
[root@master rbac]# kubectl get rolebindings.rbac.authorization.k8s.io
NAME ROLE AGE
jerry Role/jerry 4s
leader-locking-nfs-client-provisioner Role/leader-locking-nfs-client-provisioner 19d
3、验证jerry权限
# 在node节点上,发现jerry有对default空间的查看权限
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" --insecure-skip-tls-verify=true get pod
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-5cf5744c5f-fzjh8 1/1 Running 10 15d
# 但是查看不了kube-system空间下的权限
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" --insecure-skip-tls-verify=true get pod -n kube-system
Error from server (Forbidden): pods is forbidden: User "jerry" cannot list resource "pods" in API group "" in the namespace "kube-system"
发现jerry是可以看到default空间下的pod的详细信息的,但是没有创建,删除等权限,因此我们需要添加jerry用户有创建,删除的权限,给角色添加一个权限就行了
4、修改role权限
有创建,删除pod的权限
[root@master rbac]# cat jerry-role.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: null
name: jerry
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
- create
- delete
# 添加create和delete即可
[root@master rbac]# kubectl apply -f jerry-role.yml
role.rbac.authorization.k8s.io/jerry configured
5、验证增加的权限是否成功
# 发现有创建pod的权限
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" --insecure-skip-tls-verify=true run test01 --image nginx
pod/test01 created
# 删除pod
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" --insecure-skip-tls-verify=true delete pod test01
pod "test01" deleted
6、增加对deploy资源的操作
上面是对pod有查询,创建,删除的操作,那么对deployment资源呢?
# jerry用户查看deploy,发现没有权限操作
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" --insecure-skip-tls-verify=true get deploy
Error from server (Forbidden): deployments.apps is forbidden: User "jerry" cannot list resource "deployments" in API group "apps" in the namespace "default"
修改权限,增加对deploy资源的操作
[root@master rbac]# cat jerry-role.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: null
name: jerry
rules:
- apiGroups:
- "" # 这个为空默认是 v1,是pod的权限
- "apps" # 这个是deploy的api,完整的名是apps/v1,只需要写父级别即可
resources:
- pods
- deployments # 对deploy资源的操作
verbs:
- get
- list
- watch
- create
- delete
[root@master rbac]# kubectl apply -f jerry-role.yml
role.rbac.authorization.k8s.io/jerry configured
这样我们就有查看deploy的权限了
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" --insecure-skip-tls-verify=true get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nfs-client-provisioner 1/1 1 1 19d
# 也可以创建deploy资源
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" --insecure-skip-tls-verify=true create deploy web1 --image nginx
deployment.apps/web1 created
# 但是了修改副本数量的话,还需要再role里面添加一个path操作才行
# 发现不能修改副本数量,还需要添加patch操作和一个api
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" --insecure-skip-tls-verify=true scale deploy web1 --replicas 2
Error from server (Forbidden): deployments.apps "web1" is forbidden: User "jerry" cannot patch resource "deployments/scale" in API group "apps" in the namespace "default"
[root@master rbac]# cat jerry-role.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: null
name: jerry
rules:
- apiGroups:
- ""
- "apps"
resources:
- pods
- deployments
- deployments/scale # 修改副本数量的api
verbs:
- get
- list
- watch
- create
- delete
- patch # 动态修改资源
[root@master rbac]# kubectl apply -f jerry-role.yml
role.rbac.authorization.k8s.io/jerry configured
# 就可以修改副本数量了
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="bfd16b92c578aaa14594" --insecure-skip-tls-verify=true scale deploy web1 --replicas 2
deployment.apps/web1 scaled
7、role的另外一种写法
# 使用列表的写法
[root@master rbac]# cat jerry-role.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: null
name: jerry
rules:
- apiGroups: ["","apps"] # 以这种[] 写法
resources: ["pods","deployments"]
verbs: ["get","create","delete"]
三、clusterrole和clusterrolebinding

role是具有名称空间的,就是属于一个空间下的,如果有多个空间的话,就需要创建多个role,如果空间的权限都差不多的话,就是比较的麻烦,因此就有这个集群角色
集群角色是整个集群都能使用的,不属于任何一个名称空间,所有空间都能看到这个clusterrole,就直接使用集群绑定即可
集群角色可以被角色绑定使用,就是需要角色绑定的时候指定一个命名空间即可,就是这个集群角色相当于是一个没有指定特定命名空间的role
1、创建一个新的用户
[root@master pki]# openssl rand -hex 10 >> jerry.csv
# 新添加一个tom用户
[root@master pki]# cat jerry.csv
bfd16b92c578aaa14594,jerry,2000
ec413db6b69b266830b2,tom,2001
2、创建一个clusterrole
[root@master rbac]# kubectl create clusterrole cluster-pod --verb="get,list,watch" --resource=pods --dry-run=client -o yaml > clusterrole.yml
[root@master rbac]# kubectl apply -f clusterrole.yml
clusterrole.rbac.authorization.k8s.io/cluster-pod created
3、创建集群角色绑定
[root@master rbac]# kubectl create clusterrolebinding cluster-tom --clusterrole=cluster-pod --user=tom --token="ec413db6b69b266830b2" --dry-run=client -o yaml > clusterrolebind.yml
[root@master rbac]# kubectl apply -f clusterrolebind.yml
clusterrolebinding.rbac.authorization.k8s.io/cluster-tom created
4、验证tom用户权限
# 发现一个问题
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="ec413db6b69b266830b2" --insecure-skip-tls-verify=true get pod
error: You must be logged in to the server (Unauthorized)
# 有缓存的,可以重启
# 还有一个解决方法就是重启kube-system里面的apiserver这个pod
[root@master rbac]# docker restart 91c6dc0fd3ef
91c6dc0fd3ef
# 所有空间下的pod都能查看到
[root@node1 ~]# kubectl --server="https://192.168.50.20:6443" --token="ec413db6b69b266830b2" --insecure-skip-tls-verify=true get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default nfs-client-provisioner-5cf5744c5f-fzjh8 1/1 Running 11 (74s ago) 15d
default web1-5756d98cd9-2cdz5 1/1 Running 0 25m
default web1-5756d98cd9-fp7d8 1/1 Running 0 21m
kube-system calico-kube-controllers-578fbf95-zblx7 1/1 Running 5 15d
kube-system calico-node-47jsz 1/1 Running 4 14d
kube-system calico-node-lm6n2 1/1 Running 4 14d
kube-system coredns-665d974787-mz8jt 1/1 Running 5 15d
kube-system coredns-665d974787-vp99g 1/1 Running 5 15d
kube-system etcd-master 1/1 Running 8 19d
kube-system kube-apiserver-master 1/1 Running 1 8h
kube-system kube-controller-manager-master 1/1 Running 9 (73s ago) 19d
kube-system kube-proxy-hpzzt 1/1 Running 9 19d
kube-system kube-proxy-p2p5k 1/1 Running 8 19d
kube-system kube-scheduler-master 1/1 Running 9 (73s ago) 19d
5、注意
集群角色和角色绑定一起使用的时候,这个集群角色就相当于是一个普通的角色,没有带上命名空间的角色,但是由于使用了角色绑定,操作的范围仅限这个命名空间
serviceaccount(sa)
-
sa是服务账号,是pod使用的,就是有些pod需要监听一些资源,需要有权限,就需要这个sa
-
角色绑定角色和sa,这个sa就有对资源的操作权限,创建pod或者其他资源的时候,指定这个以这个sa运行就可以了
-
1.24版本之后,创建sa不会自动的创建secret,需要手动创建secret关联sa
1、创建role和sa
[root@master rbac]# kubectl create role sa-role --verb="get,list,watch" --resource=pods --dry-run=client -o yaml > sa-role.yml
[root@master rbac]# kubectl apply -f sa-role.yml
# 创建sa
# 我的k8s版本是1.23的,所以会自动的创建secret
[root@master rbac]# kubectl create sa sa1
serviceaccount/sa1 created
[root@master rbac]# kubectl get sa
NAME SECRETS AGE
default 1 19d
nfs-client-provisioner 1 19d
sa1 1 3s
# 我们查看这个secret
[root@master rbac]# kubectl get secret
NAME TYPE DATA AGE
default-token-qj7d5 kubernetes.io/service-account-token 3 19d
nfs-client-provisioner-token-9prbh kubernetes.io/service-account-token 3 19d
sa1-token-x8hz5 kubernetes.io/service-account-token 3 42s
# 有非常多的信息
[root@master rbac]# kubectl get secrets sa1-token-x8hz5 -o yaml
kind: Secret
metadata:
annotations: # 下面这个指定了sa
kubernetes.io/service-account.name: sa1
kubernetes.io/service-account.uid: 214a3467-4319-47bd-912e-0462ef1f394b
creationTimestamp: "2026-05-07T12:00:25Z"
name: sa1-token-x8hz5
namespace: default
resourceVersion: "62598"
uid: 6387ab78-bab8-49fe-89ff-3b0433f5967a
type: kubernetes.io/service-account-token # 类型必须是这个
2、rolebinding绑定
[root@master rbac]# kubectl create rolebinding sa-rolebinding --role=sa-role --serviceaccount=default:sa1 --dry-run=client -o yaml > sa1-rolebinding.yml
[root@master rbac]# kubectl apply -f sa1-rolebinding.yml
rolebinding.rbac.authorization.k8s.io/sa-rolebinding created
3、测试sa权限
创建一个pod,指定这个sa账户
[root@master rbac]# cat sa-pod.yml
apiVersion: v1
kind: Pod
metadata:
name: test-sa1
spec:
serviceAccountName: sa1 # 使用sa1账号运行
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
在pod里面测试看是否具有查看pod列表权限,default空间下的
# 可以看到sa是被挂载进来的
root@test-sa1:/var/run/secrets/kubernetes.io# ls
serviceaccount
# 下面有token内容
root@test-sa1:/var/run/secrets/kubernetes.io# ls serviceaccount/
ca.crt namespace token
root@test-sa1:~# TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
# 测试,有返回结果就是正常的
root@test-sa1:~# curl -H "Authorization: Bearer $TOKEN" https://kubernetes.default/api/v1/namespaces/default/pods --insecure
测试看有没有其他空间列出pod的权限
# 列出kube-system下的pod信息,发现没有权限
root@test-sa1:~# curl -H "Authorization: Bearer $TOKEN" https://kubernetes.default/api/v1/namespaces/kube-system/pods --insecure
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "pods is forbidden: User \"system:serviceaccount:default:sa1\" cannot list resource \"pods\" in API group \"\" in the namespace \"kube-system\"",
"reason": "Forbidden",
"details": {
"kind": "pods"
},
"code": 403 # 没有列出default之外的pod权限
}root@test-sa1:~#
总结
创建角色,将角色和用户进行角色绑定
集群角色也是一样的
sa就是给pod运行的使用的,使用方式也是一样的

浙公网安备 33010602011771号