k8s中RBAC使用

原文出处: 25-k8s集群中-RBAC用户角色资源权限_权限 资源 角色-优快云博客   

这里根据自己的实践做了完善笔记.


1,用户的创建流程

1,User
2,SerciceAccount
3,Group

本质上讲,在k8s系统中,用户,就是一个文件,这个文件在当前登录用户的家目录下;

这个文件config,就代表“我”是谁;

        这里面并没有角色、权限信息,角色和权限信息,在其他位置;

[root@k8s231 ~]# ll .kube/config 
-rw------- 1 root root 5634 Jan  1 19:40 .kube/config

        所以,要创建用户,就是要创建这个文件;

        那么如何创建这个文件呐?

· ssl流程介绍


        知道了ssl原理,https请求过程,我们就了解了,ssl的安全机制;

        实际上k8s当中“根证书”早就生成好了,在我们kubeadm部署的时候,就自动帮我们生成了;

        k8s是模拟ca机构,给自己颁发证书,自己验证自己,所以,整数中有私钥、公钥等;

[root@k8s231 ~]# ll /etc/kubernetes/pki/
total 56
-rw-r--r-- 1 root root 1281 Jan  1 19:39 apiserver.crt
-rw-r--r-- 1 root root 1155 Jan  1 19:39 apiserver-etcd-client.crt
-rw------- 1 root root 1679 Jan  1 19:39 apiserver-etcd-client.key
-rw------- 1 root root 1675 Jan  1 19:39 apiserver.key
-rw-r--r-- 1 root root 1164 Jan  1 19:39 apiserver-kubelet-client.crt
-rw------- 1 root root 1679 Jan  1 19:39 apiserver-kubelet-client.key
#根证书
-rw-r--r-- 1 root root 1099 Jan  1 19:39 ca.crt
#ca机构的私钥
-rw------- 1 root root 1679 Jan  1 19:39 ca.key
drwxr-xr-x 2 root root  162 Jan  1 19:39 etcd
-rw-r--r-- 1 root root 1115 Jan  1 19:39 front-proxy-ca.crt
-rw------- 1 root root 1675 Jan  1 19:39 front-proxy-ca.key
-rw-r--r-- 1 root root 1119 Jan  1 19:39 front-proxy-client.crt
-rw------- 1 root root 1679 Jan  1 19:39 front-proxy-client.key
-rw------- 1 root root 1675 Jan  1 19:39 sa.key
-rw------- 1 root root  451 Jan  1 19:39 sa.pub
1.生成用户证书

      一个用户一个证书,这个用户证书,就是用来生成,用户文件的(也就是家目录下的config)

· 生成kubeconfig用户授权文件
        有了这个授权文件,我们就拥有了一个用户了;

        但是,还没有任何权限,还无法使用;

2.创建角色和规则

        通过资源清单的方式,创建角色和规则;

        角色就是:

1,Role:局部资源角色

2,ClusterRole:全局资源角色

        规则就是:这个角色的权限;能使用什么资源、不能使用什么资源,,,,

3,角色与用户的绑定
        根据角色的不同,创建资源清单,对应不同的绑定资源清单的编写;

1,RoleBinding

2,ClusterRoleBinding

        只要角色和用户绑定完成,那么,RBAC的整个流程就结束了;

        我们就成功创建了一个带有特定权限的用户;就可以分发给“同事”进行使用了;

4,逻辑流程的总结


RBAC创建初体验

1,创建用户【user】
· 生成用户ssl证书
        以往我们使用openssl的工具命令生成证书,比较繁琐,本次学习,我给大家介绍一个证书生成工具,叫做cfssl证书生成工具;

1,上传/下载cfssl证书生成工具

或者去github地址下载:https://github.com/cloudflare/cfssl/releases/tag/v1.6.4

这里用到几个文件.

1.

cfssl_1.6.4_linux_amd64

2.

cfssl-certinfo_1.6.4_linux_amd64

3.

cfssljson_1.6.4_linux_amd64

3.将文件上传到服务器(这里是k8s主节点.)
[root@k8s231 rbac]# ll
2,解压cfssl工具压缩包
[root@k8s231 rbac]# ll
-rw-r--r-- 1 root root 12054528 Aug 30 15:46 cfssl_1.6.4_linux_amd64
-rw-r--r-- 1 root root  9560064 Aug 30 15:45 cfssl-certinfo_1.6.4_linux_amd64
-rw-r--r-- 1 root root  7643136 Aug 30 15:48 cfssljson_1.6.4_linux_amd64
3,删除压缩包,将cfssl文件改名
      
[root@k8s231 rbac]# rename _1.6.4_linux_amd64 "" *
[root@k8s231 rbac]# ll
-rw-r--r-- 1 root root 12054528 Aug 30 15:46 cfssl
-rw-r--r-- 1 root root  9560064 Aug 30 15:45 cfssl-certinfo
-rw-r--r-- 1 root root  7643136 Aug 30 15:48 cfssljson
4,将cfssl文件编程全局命令
将这三个文件,移动到/usr/local/bin目录下,编程全局命令~
[root@k8s231 rbac]# mv ./* /usr/local/bin/
5,给cfssl执行文件加执行权限
[root@k8s231 rbac]# chmod +x /usr/local/bin/cfssl*
6,编辑cfssl工具的生成用户ssl证书的配置文件
#   根证书
[root@k8s231 rbac]# cat ca-config.json 
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      }
    }
  }
}

       

 客户端验证签名证书
[root@k8s231 rbac]# cat csr.json 
{
  "CN": "xinjizhiwa",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
7,使用cfssl工具生成用户的ssl证书
[root@k8s231 rbac]# cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=ca-config.json -profile=kubernetes csr.json | cfssljson -bare xinjizhiwa

参数解释:

#使用k8s自带的证书来签发客户端证书(位置就在/etc/kubernetes/pki/下面);
-ca=/etc/kubernetes/pki/ca.crt 
-ca-key=/etc/kubernetes/pki/ca.key 
-config=ca-config.json 
-profile=kubernetes csr.json | cfssljson -bare xinjizhiwa
8.查看证书
[root@k8s231 rbac]# ll
total 20
-rw-r--r-- 1 root root  292 Feb 21 20:06 ca-config.json
-rw-r--r-- 1 root root  223 Feb 21 20:07 csr.json
-rw-r--r-- 1 root root 1001 Feb 21 20:11 xinjizhiwa.csr
-rw------- 1 root root 1675 Feb 21 20:11 xinjizhiwa-key.pem
-rw-r--r-- 1 root root 1285 Feb 21 20:11 xinjizhiwa.pem

至此,我们用户的ssl证书申请完毕了;

生成用户kubeconfig文件

1,编辑生成kubeconfig文件的执行脚本
[root@k8s231 rbac]# cat kubeconfig.sh 
#!/bin/bash

# 配置集群;
# --certificate-authority:指定K8s的ca根证书文件路径
# --embed-certs:
#   1,true,表示将根证书文件的内容写入到配置文件中,
#   2,false,则只是引用配置文件,将kubeconfig
# --server:指定APIServer的地址。
# --kubeconfig:指定kubeconfig的配置文件名称
kubectl config set-cluster xinjizhiwa-cluster \
  --certificate-authority=/etc/kubernetes/pki/ca.crt \
  --embed-certs=true \
  --server=https://192.168.59.21:6443 \
  --kubeconfig=xinjizhiwa.kubeconfig
 
# 设置客户端认证,客户端将来需要携带证书让服务端验证
kubectl config set-credentials xinjizhiwa-client \
  --client-key=xinjizhiwa-key.pem \
  --client-certificate=xinjizhiwa.pem \
  --embed-certs=true \
  --kubeconfig=xinjizhiwa.kubeconfig

# 设置默认上下文,可以用于绑定多个客户端和服务端的对应关系(客户端和服务端绑定)。
kubectl config set-context xinjizhiwa \
  --cluster=xinjizhiwa-cluster \
  --user=xinjizhiwa-client \
  --kubeconfig=xinjizhiwa.kubeconfig

# 设置当前使用的上下文(正式生效)
kubectl config use-context xinjizhiwa --kubeconfig=xinjizhiwa.kubeconfig
2,执行生成kubeconfig用户文件的执行脚本


   

正式生成用户
[root@k8s231 rbac]# bash kubeconfig.sh 
Cluster "xinjizhiwa-cluster" set.
User "xinjizhiwa-client" set.
Context "xinjizhiwa" created.
Switched to context "xinjizhiwa".

查看生成的kubeconfig用户文件

[root@k8s231 rbac]# ll
......
-rw------- 1 root root 5802 Feb 21 20:24 xinjizhiwa.kubeconfig

拓展知识:也可以使用config资源清单编写生成用户kubeconfig文件

[root@k8s231 rbac]# cat xinjizhiwa.kubeconfig 
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: ......(/etc/kubernetes/pki/ca.crt)
    server: https://10.0.0.231:6443
  name: xinjizhiwa-cluster
contexts:
- context:
    cluster: xinjizhiwa-cluster
    user: xinjizhiwa-client
  name: xinjizhiwa
current-context: xinjizhiwa
kind: Config
preferences: {}
users:
- name: xinjizhiwa-client
  user:
    client-certificate-data: .......(xinjizhiwa.pem或者写入公钥串,pem记得base64 -d之后使用)
    client-key-data: ......(xinjizhiwa-key.pem)

此时使用这个用户,取查看pod,会提示你没有权限,因为咱们还没有创建、绑定角色;

[root@k8s231 rbac]# kubectl get pods --kubeconfig=xinjizhiwa.kubeconfig

至此,我们用户“xinjizhiwa”就创建完成了;

2,创建角色编写规则

编辑角色资源清单
        上述内容中,我们知道,角色有两种,一种是全局角色ClusterRole,另一种是局部角色Role;

        我们先创建一个局部的Role角色作为学习;

[root@k8s231 rbac]# cat role.yaml 
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: xinjizhiwa-role
  namespace: default
rules:
  #声明API组;[""]代表v1;["apps"]代表apps/v1
- apiGroups: ["","apps"]
  #声明API组下面的资源类型(不支持简写,只能写全称)
  resources: ["pods","deployments","services"]
  #声明使用方式(动作增删改查、、)
  verbs: ["get","list","delete"]

· 创建角色
[root@k8s231 rbac]# kubectl apply -f role.yaml

查看角色

[root@k8s231 rbac]# kubectl get role
NAME              CREATED AT
xinjizhiwa-role   2024-02-21T13:19:34Z

至此,用户和角色及规则都创建成功了;

3,绑定用户与角色

编辑绑定资源清单
[root@k8s231 rbac]# cat bind.yaml 
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: xinjizhiwa-bind
  namespace: default
#声明用户主体(绑定的用户是哪个)
subjects:
#由于我们用户类型有三种,所以需要写明用户类型;
- kind: User
  #用户名称
  name: xinjizhiwa
  apiGroup: rbac.authorization.k8s.io
#声明角色主体(绑定的角色是哪个?)
roleRef: 
  #角色类型
  kind: Role
  #角色名称
  name: xinjizhiwa-role
  apiGroup: rbac.authorization.k8s.io

· 创建绑定资源
[root@k8s231 rbac]# kubectl apply -f bind.yaml

4,测试用户

测试创建功能

(这里role权限资源文件中没有将创建资源的能力给到该用户所以应该是创建不成功的)

协议个pod资源,使用用户“xinjizhiwa”创建,发现创建不了,提示权限不够;

[root@k8s1 /zpf/rbac]$kubectl create -f pod.yaml  --kubeconfig=xinjizhiwa.kubeconfig
Error from server (Forbidden): error when creating "pod.yaml": pods is forbidden: User "xinjizhiwa" cannot create resource "pods" in API group "" in the namespace "default

因为,我们在创建角色规则的时候,只给了删除、和查看的能力,没有给create创建能力;

[root@k8s231 rbac]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-nginx
spec:
  containers:
  - name: c1
    image: nginx:1.20.1-alpine

[root@k8s231 rbac]# kubectl apply -f pod.yaml --kubeconfig=xinjizhiwa.kubeconfig
将创建权限分配给这个用户.
[root@k8s1 /zpf/rbac]$vim role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: xinjizhiwa-role
  namespace: default
rules:
  #声明API组;[""]代表v1;["apps"]代表apps/v1
- apiGroups: ["","apps"]
  #声明API组下面的资源类型(不支持简写,只能写全称)
  resources: ["pods","deployments","services"]
  #声明使用方式(动作增删改查、、)
  verbs: ["get","list","delete","create"]
更新role资源
[root@k8s1 /zpf/rbac]$kubectl create -f role.yaml
role.rbac.authorization.k8s.io/xinjizhiwa-role created

查看role中的权限
[root@k8s1 /zpf/rbac]$kubectl describe role xinjizhiwa-role
Name:         xinjizhiwa-role
Labels:       <none>
Annotations:  <none>
PolicyRule:
  Resources         Non-Resource URLs  Resource Names  Verbs
  ---------         -----------------  --------------  -----
  deployments       []                 []              [get list delete create]
  pods              []                 []              [get list delete create]
  services          []                 []              [get list delete create]
  deployments.apps  []                 []              [get list delete create]
  pods.apps         []                 []              [get list delete create]
  services.apps     []                 []              [get list delete create]
使用该用户创建一个pod资源
创建pod
[root@k8s1 /zpf/rbac]$kubectl create -f pod.yaml  --kubeconfig=xinjizhiwa.kubeconfig
pod/pod-nginx created
查看创建情况
[root@k8s1 /zpf/rbac]$kubectl get po  --kubeconfig=xinjizhiwa.kubeconfig |grep nginx
pod-nginx                                 1/1     Running   0              23s

因为我们有default默认名称空间的查看、删除权限,所以我们可以进行查看;

测试查看功能
[root@k8s231 rbac]# kubectl get pods --kubeconfig=xinjizhiwa.kubeconfig
测试删除功能
[root@k8s1 /zpf/rbac]$kubectl delete -f pod.yaml  --kubeconfig=xinjizhiwa.kubeconfig
pod "pod-nginx" deleted
E1112 17:21:15.528756   17595 reflector.go:147] vendor/k8s.io/client-go/tools/watch/informerwatcher.go:146: Failed to watch *unstructured.Unstructured: unknown
E1112 17:21:16.654387   17595 reflector.go:147] vendor/k8s.io/client-go/tools/watch/informerwatcher.go:146: Failed to watch *unstructured.Unstructured: unknown
#这里有点疑惑,为啥输出打印报错,但是查询pod是删除成功了?查了一下貌似可能是客户端的bug
[root@k8s1 /zpf/rbac]$kubectl get po
NAME                                      READY   STATUS    RESTARTS       AGE

到此,普通用户的创建、角色绑定、角色配置就学习完毕了;

四、其他节点使用用户登录操作k8s

这里我使用的是一台nas的节点.(上面需要安装一个kubectl).

#安装kubectl,这里将主节点的kubectl推送到nas服务器上.(这里如果目标服务器上相关目录没有的话就创建一个.)
[root@k8s1 /zpf/rbac]$whereis kubectl
kubectl: /usr/local/bin/kubectl
[root@k8s1 /zpf/rbac]$scp ./kubectl root@192.168.59.20://usr/local/bin/
#....输入用户名密码.如果做了免密认证就不需要密码

将用户证书推送到nas服务器
[root@k8s1 /zpf/rbac]$scp xinjizhiwa.kubeconfig root@192.168.59.20:/root/.kube/
#...同上

#将用户证书重命名一下,方便系统读取
[root@nfs ~/.kube]$mv xinjizhiwa.kubeconfig config

#验证结果
[root@nfs ~/.kube]$kubectl get po
NAME                                      READY   STATUS    RESTARTS       AGE
jenkins-master-5457754f77-m2gs8           1/1     Running   1 (7d ago)     7d1h
nfs-client-provisioner-64fb48857b-wnwg7   1/1     Running   41 (14d ago)   71d
postgres-sonar-6ccc55ddb6-tqnww           1/1     Running   6 (14d ago)    68d
sonarqube-856876d5c7-542gc                1/1     Running   6 (14d ago)    68d
worker1-5d4679b9c7-zggcf                  1/1     Running   0              8d
worker2-5ffcbdbbf-hnbkp                   1/1     Running   0              8d

五,用户组使用

1.创建用户证书

配置用户证书信息,其中包含

[root@k8s1 /zpf/rbac/group]$cat ca-group.json
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      }
    }
  }
}
配置证书组信息
[root@k8s1 /zpf/rbac/group]$cat group-user-xjzw.json
{
  "CN": "xinjizhiwa",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "xinjizhiwa-group",
      "OU": "System"
    }
  ]
}
使用cfssl生成用户签名以及证书(包含公钥私钥)
[root@k8s1 /zpf/rbac/group]$cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=ca-group.json -profile=kubernetes group-user-xjzw.json |cfssljson -bare xjzw
2024/11/18 17:17:55 [INFO] generate received request
2024/11/18 17:17:55 [INFO] received CSR
2024/11/18 17:17:55 [INFO] generating key: rsa-2048
2024/11/18 17:17:55 [INFO] encoded CSR
2024/11/18 17:17:55 [INFO] signed certificate with serial number 603463176556423048384677089408337471674534126173
2024/11/18 17:17:55 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").

#这里就是根据刚刚的俩文件,外加k8s的根证书生成了三个文件,
#用户签名xjzw.csr
#用户私钥xjzw-key.pem
#用户公钥xjzw.pem
将这几个文件添加到一个文件中,
[root@k8s1 /zpf/rbac/group]$cat kuberconfig.sh
#!/bin/bash

# 配置集群;
# --certificate-authority:指定K8s的ca根证书文件路径
# --embed-certs:
#   1,true,表示将根证书文件的内容写入到配置文件中,
#   2,false,则只是引用配置文件,将kubeconfig
# --server:指定APIServer的地址。
# --kubeconfig:指定kubeconfig的配置文件名称
kubectl config set-cluster xinjizhiwa-cluster \
  --certificate-authority=/etc/kubernetes/pki/ca.crt \
  --embed-certs=true \
  --server=https://192.168.59.21:6443 \
  --kubeconfig=xinjizhiwa-group.kubeconfig
#这里指定xinjizhiwa-group.kubeconfig 文件,将根签名信息以及端口信息写到xinjizhiwa-group.kubeconfig这个文件中.


# 设置客户端认证,客户端将来需要携带证书让服务端验证
kubectl config set-credentials xinjizhiwa-client \
  --client-key=xjzw-key.pem \
  --client-certificate=xjzw.pem \
  --embed-certs=true \
  --kubeconfig=xinjizhiwa-group.kubeconfig
#这里同样指定文件xinjizhiwa-group.kubeconfig,将客户端的公钥,私钥,写到xinjizhiwa-group.kubeconfig文件中.


# 设置默认上下文,可以用于绑定多个客户端和服务端的对应关系(客户端和服务端绑定)。
kubectl config set-context xinjizhiwa-group \
  --cluster=xinjizhiwa-cluster \
  --user=xinjizhiwa-client \
  --kubeconfig=xinjizhiwa-group.kubeconfig
#默认上下文,写到xinjizhiwa-group.kubeconfig文件中.

# 设置当前使用的上下文(正式生效)
kubectl config use-context xinjizhiwa-group --kubeconfig=xinjizhiwa-group.kubeconfig

将文件推送到node节点进行测试
#master操作
[root@k8s1 /zpf/rbac/group]$scp xinjizhiwa-group.kubeconfig root@192.168.59.22:/root
#node节点操作
[root@node1 ~]$cd /root/
[root@node1 ~]$mkdir .kube
[root@node1 ~]$mv xinjizhiwa-group.kubeconfig .kube/config
测试是否成功
[root@node1 ~]$kubectl get po
NAME                                      READY   STATUS    RESTARTS       AGE
jenkins-master-5457754f77-m2gs8           1/1     Running   2 (6d ago)     13d
nfs-client-provisioner-64fb48857b-wnwg7   1/1     Running   47 (31m ago)   77d
postgres-sonar-6ccc55ddb6-tqnww           1/1     Running   7 (7h2m ago)   74d
sonarqube-856876d5c7-542gc                1/1     Running   7 (7h2m ago)   74d
worker1-5d4679b9c7-zggcf                  1/1     Running   1 (7h2m ago)   14d
worker2-5ffcbdbbf-hnbkp                   1/1     Running   1 (7h2m ago)   14d
#验证成功

### RBAC 的核心原理 Kubernetes 中的 RBAC(基于角色的访问控制)是一种通过角色定义权限,并将角色绑定到用户或服务账户的机制。RBAC 使用 `rbac.authorization.k8s.io` API 组来实现授权决策,允许管理员通过 Kubernetes API 动态配置策略[^2]。其核心模型由以下几个组件构成: - **Role(角色)**:定义在某个命名空间中的权限规则,例如对 Pod 的读写权限。 - **ClusterRole(集群角色)**:与 Role 类似,但作用范围是整个集群,适用于跨命名空间的资源。 - **RoleBinding(角色绑定)**:将 Role 绑定到某个用户或服务账户,使其在特定命名空间中拥有该角色的权限。 - **ClusterRoleBinding(集群角色绑定)**:将 ClusterRole 绑定到用户或服务账户,使其在整个集群范围内拥有相应权限。 这些组件共同构成了 Kubernetes 的权限控制体系,使得集群管理员可以灵活地控制不同用户或服务账户对资源的访问权限。 --- ### RBAC 的启用与配置 要启用 RBAC,需要在 kube-apiserver 启动参数中添加 `--authorization-mode=RBAC`,如果使用 kubeadm 安装的集群,1.6 版本以上默认开启了 RBAC。可以通过查看 Master 节点上 apiserver 的静态 Pod 定义文件来确认: ```bash $ cat /etc/kubernetes/manifests/kube-apiserver.yaml ... - --authorization-mode=Node,RBAC ``` 一旦启用 RBAC,就可以通过创建 Role、ClusterRole、RoleBinding 和 ClusterRoleBinding 来配置权限策略。 --- ### 角色与绑定的配置示例 以下是一个 Role 的定义示例,限制某个用户只能在特定命名空间中读取 Pod 和 Service: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: development name: pod-reader rules: - apiGroups: [""] resources: ["pods", "services"] verbs: ["get", "list"] ``` 接着,创建一个 RoleBinding 将该角色绑定到某个用户: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-pods namespace: development subjects: - kind: User name: developer apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io ``` 如果希望该角色在整个集群范围内生效,则应使用 ClusterRole 和 ClusterRoleBinding: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: cluster-reader rules: - apiGroups: [""] resources: ["pods", "nodes", "services"] verbs: ["get", "list"] ``` 绑定 ClusterRole 到用户: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: bind-cluster-reader subjects: - kind: User name: admin apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: cluster-reader apiGroup: rbac.authorization.k8s.io ``` 通过上述配置,可以实现细粒度的权限控制,增强 Kubernetes 集群的安全性和可管理性[^1]。 --- ### RBAC 的优势与应用场景 RBAC 提供了强大的权限管理能力,适用于多租户环境、多项目协作、自动化运维等多种场景。例如: - 在开发与生产环境之间设置不同的访问策略,确保开发人员无法修改生产环境的配置。 - 为 CI/CD 工具分配最小权限,仅允许其访问必要的资源,防止误操作或安全漏洞。 - 在多团队共享集群时,通过命名空间隔离和 RoleBinding 控制不同团队对资源的访问范围。 此外,RBAC 还支持聚合 ClusterRole,允许将多个角色组合成一个更高级别的权限集合,便于集中管理权限策略。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值