k8s 权限控制

K8s中权限控制的API资源包括四个:

  • Role 作用域 namespace
  • ClusterRole 作用域 集群
  • RoleBinding
  • ClusterRoleBinding

cmd

  • 创建用户
### 1、创建私钥
(umask 077; openssl genrsa -out pod-reader.key 2048)
### 用此私钥创建一个csr(证书签名请求)文件
openssl  req -new -key pod-reader.key -out pod-reader.csr -subj  "/CN=pod-reader"
### 拿着私钥和请求文件生成证书
openssl x509 -req -in pod-reader.csr -CA  /etc/kubernetes/pki/ca.crt  -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out pod-reader.crt -days 365
## 2、查看证书内容
openssl  x509 -in pod-reader.crt -text -noout
### 生成账号
kubectl config set-credentials pod-reader --client-certificate=pod-reader.crt --client-key=pod-reader.key --embed-certs=true
### 3、设置上下文环境--指的是这个账号只能在这个环境中才能用
## 查看当前的工作上下文
kubectl config view
### 4、切换用户(切换上下文)
kubectl  config use-context pod-reader@kubernetes
kubectl config current-context
  • 创建角色
kubectl  create role  myrole  --verb=get,list,watch --resource=pod,svc
  • 绑定角色
kubectl  create  rolebinding myrole-binding  --role=myrole  --user=pod-reader
  • 删除角色绑定
kubectl  delete rolebinding myrole-binding 
  • 集群角色
kubectl create clusterrole myclusterrole --verb=get,list,watch --resource=pod,svc
  • 绑定及集群角色
kubectl  create clusterrolebinding my-cluster-rolebinding   --clusterrole=myclusterrole --user=pod-reader

ymal

role

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # "" 指定核心 API 组
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
  • ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  # 此处的 "namespace" 被省略掉是因为 ClusterRoles 是没有命名空间的。
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]
  • RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
# 此角色绑定允许 "jane" 读取 "default" 名字空间中的 Pods
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
# 你可以指定不止一个“subject(主体)”
- kind: User
  name: jane # "name" 是不区分大小写的
  apiGroup: rbac.authorization.k8s.io
roleRef:
  # "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系
  kind: Role # 此字段必须是 Role 或 ClusterRole
  name: pod-reader     # 此字段必须与你要绑定的 Role 或 ClusterRole 的名称匹配
  apiGroup: rbac.authorization.k8s.io
  • ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
# 这个集群角色绑定允许 "manager" 组中的任何用户读取任意命名空间中 "secrets"。
kind: ClusterRoleBinding
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: manager # 名称区分大小写
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io           
posted @ 2022-04-20 18:05  vx_guanchaoguo0  阅读(149)  评论(0编辑  收藏  举报