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
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/16171068.html