一.RBAC
1.RBAC简介
RBAC是一种基于角色访问控制方式,它将权限和角色相关联,用户加入到角色中,就会拥有角色中的权限,RBAC的核心思想是,将权限赋予给角色,角色中加入多个用户,加入进来的用户会具有角色的权限,如果修改权限也是针对角色进行操作,而不是针对每个用户进行权限操作。
2.安全框架的阶段
2.1第一阶段(鉴权)
第一阶段: Authentication(鉴权):判断你的身份是否是可靠的。
HTTPS 证书认证:基于CA证书签名的数字证书认证(kubeconfig),比如.kube/config文件就是这种认证。
HTTP Token认证:通过一个Token来识别用户(serviceaccount),比如我们搭建K8s图形页面登录时就使用到Token认证,但是加入集群时也使用到Token,这个不属于该种认证,只是单纯的加入集群。
2.2第二阶段(授权)
第二阶段:Authorization(授权):控制你的权限是否可以访问相对应的资源。
Node、ABAC、RBAC、Webhook。
2.3第三阶段(准入控制)
第三阶段: Admission Control(准入控制):其实就是一张准入控制插件列表,根据需求把K8s的一些高级功能放入列表,哪个功能不用就把对应的控制器插件移除列表。
Adminssion Control实际上是一个准入控制器插件列表,发送到API Server的请求都需要经过这个列表中的每个准入控制器插件的检查,检查不通过,则拒绝请求。
插件形式,方便用户实现检查准入控制,例如i当以操作等等。
3.RBAC主体,角色,绑定
主体(subject):
User:用户
Group:用户组
ServiceAccount:服务账号
角色:
Role:授权特定命名空间的访问权限
ClusterRole:授权所有命名空间的访问权限
角色绑定:
RoleBinding:将角色绑定到主体(即subject)
ClusterRoleBinding:将集群角色绑定到主体
4.集群四大角色
内置集群角色 | 描述 |
cluster-admin | 超级管理员,对集群所有权限。 |
admin | 主要用于授权命名空间所有读写权限。 |
edit | 允许对命名空间大多数对象读写操作,不允许查看或者修改角色、角色绑定。 |
view | 允许对命名空间大多数对象只读权限,不允许查看角色、角色绑定和Secre。 |
5.资源
5.1 verb
#资源对象的操作方法列表
“get”, “list”, “watch”, “create”, “update”, “patch”, “delete”, “exec”
5.2 resource
#支持的资源对象列表
“services”, “endpoints”, “pods”,“secrets”,“configmaps”,“crontabs”,“deployments”,“jobs”,“nodes”,“rolebindings”,“clusterroles”,“daemonsets”,“replicasets”,“statefulsets”,“horizontalpodautoscalers”,“replicationcontrollers”,“cronjobs”
5.3 apiGroup
#支持的API组列表
“”,“apps”, “autoscaling”, “batch”
二.配置RBAC
1.创建账号
[root@k8s-master1 yaml-case]# kubectl create serviceaccount ww
2.创建role规则
[root@k8s-master1 yaml-case]# vim magedu-role.yaml
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: ww
rules:
- apiGroups: ["*"]
resources: ["pods/exec"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["*"]
resources: ["pods"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["apps/v1"]
resources: ["deployments"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
[root@k8s-master1 yaml-case]# kubectl apply -f magedu-role.yaml
3.将规则与账号绑定
[root@k8s-master1 yaml-case]# vim magedu-role-bind.yaml
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: ww
namespace: default
subjects:
- kind: ServiceAccount
name: ww
namespace: default
roleRef:
kind: Role
name: ww
apiGroup: rbac.authorization.k8s.io
[root@k8s-master1 yaml-case]# kubectl apply -f magedu-role-bind.yaml
4.查看secret
[root@k8s-master1 yaml-case]# kubectl get secret | grep ww
ww-token-64gs2 kubernetes.io/service-account-token 3 2s
5.查看token
kubectl describe secrets ww-token-64gs2
三.基于kube-config文件登陆
1.创建csr文件
[root@k8s-master1 yaml-case]# vim ww-csr.json
{
"CN": "China",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
2.签发证书
ln -sv /etc/kubeasz/bin/cfssl* /usr/bin/
/etc/kubeasz/cluster/k8s-cluster1/ssl/ca-config.json
[root@k8s-master1 yaml-case]# cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem -ca-key=/etc/kubernetes/ssl/ca-key.pem -config=/root/ca-config.json -profile=kubernetes ww-csr.json | cfssljson -bare ww
3.设置客户端认证参数
kubectl config set-credentials ww \
--client-certificate=/root/yaml-case/ww.pem \
--client-key=/root/yaml-case/ww-key.pem \
--embed-certs=true \
--kubeconfig=ww.kubeconfig
4.设置上下文参数
kubectl config set-context cluster1 \
--cluster=cluster1 \
--user=ww \
--namespace=default \
--kubeconfig=ww.kubeconfig
5.设置默认上下文
kubectl config use-context cluster1 --kubeconfig=ww.kubeconfig
6.获取token
[root@k8s-master1 yaml-case]# kubectl get secrets | grep ww
ww-token-64gs2 kubernetes.io/service-account-token 3 58m
[root@k8s-master1 yaml-case]# kubectl describe secrets ww-token-64gs2
7.生成普通用户kubeconfig文件
kubectl config set-cluster cluster1 --certificate-authority=/etc/kubernetes/ssl/ca.pem --embed-certs=true --server=https://192.168.0.200:6443 --kubeconfig=ww.kubeconfig
8.修改ww.kubeconfig,添加token到最后一行(4个缩进)
[root@k8s-master1 yaml-case]# vim ww.kubeconfig
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IlkyUU1wSVFfVjQ5UVRzLXlKVFJTeEs4MmVUMTM2NXpBR1pFVjM0VVdpdm8ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Ind3LXRva2VuLTY0Z3MyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Ind3Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNjQxYzJjNmYtMDQyMy00MTJmLWI3Y2QtZGQ1ZTgyNWYxN2MxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6d3cifQ.EsCKsCbc7eUXUUPV0oDFS-tk1m-RFACrFiV4ozWtupIed0JzoJ_ESUfWD9_TsDHj7RqCR0ivrLNzZfOx41UZqgEOrxhayRQSHbt7-WQhuyweOCjbDjgV1nwh6apbne9r460WTxE7ywdtCL0s0kjmjyNKVoNojG1hwjWDOA959-5MofP3gRcGHYwuUHF7Dxvdq2hmyjXWrUuKh0EOgD1WFfIkJbErBkwvZcwrzKmIfFF5qte3KHP5JTZacpPhw95Dj-KRhi8JKcOru-nh6mdFCVjCkBiVLWi8r69-nZHLJGG9yTHgAgfu6DaN91yHLMU-QJUgZ_HMSk0Wvfi592MZ9A
评论区