安全性是企业生产环境中的头等大事,对于访问同一集群的不同用户或者用户组来说,将权限分级是很有必要的。和很多云厂商一样,k8s也是采用按照角色和用户绑定的方式来分配权限的,这一节我们就来实际操作下,新建一个用户,并只让他在指定的namespace进行管理。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
文章目录
RBAC
RBAC,全称Role-based access control,会创建很多Role,每个Role对应着一系列的权限。通过将用户和Role进行绑定来给用户赋予不同类型的权限。
Role和ClusterRole
K8s中的资源要么是在某个namespace下,例如pod和service,要么是全局的,例如node。所有权限也就分为两种,Role下的权限是针对某个namespace的,在定义的时候必须要加上具体namespace;与之相对的ClusterRole下的权限是集群级别的,不用加namespace。
需要注意,所有的权限都是允许类型,而没有拒绝类型,所以赋予权限只能进行添加操作。一个用户绑定了某个Role,就只有Role下赋予的权限。
Role和ClusterRole都是集群中的单独资源,可以用yaml文件来创建。
例如下面是一个Role的声明
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]
其中的apiGroups
和resources
是资源列表,可以参考官方API文档,而verbs
是允许对资源的操作动作,可以参考全部操作。
同样下面是一个ClusterRole的声明
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# "namespace" omitted since ClusterRoles are not namespaced
name: secret-reader
rules:
- apiGroups: [""]
#
# at the HTTP level, the name of the resource for accessing Secret
# objects is "secrets"
resources: ["secrets"]
verbs: ["get", "watch", "list"]
但是通常来说系统自带的Role和ClusterRole就基本够用了,如下
[root@k8s-master ~]# kubectl get role --all-namespaces
NAMESPACE NAME AGE
ingress-nginx ingress-nginx 6d19h
ingress-nginx ingress-nginx-admission 6d19h
kube-public kubeadm:bootstrap-signer-clusterinfo 16d
kube-public system:controller:bootstrap-signer 16d
kube-system extension-apiserver-authentication-reader 16d
kube-system kube-proxy 16d
kube-system kubeadm:kubelet-config-1.15 16d
kube-system kubeadm:nodes-kubeadm-config 16d
kube-system system::leader-locking-kube-controller-manager 16d
kube-system system::leader-locking-kube-scheduler 16d
kube-system system:controller:bootstrap-signer 16d
kube-system system:controller:cloud-provider 16d
kube-system system:controller:token-cleaner 16d
[root@k8s-master ~]# kubectl get clusterrole
NAME AGE
admin 16d
cluster-admin 16d
edit 16d
flannel 16d
ingress-nginx 6d19h
ingress-nginx-admission 6d19h
system:aggregate-to-admin 16d
system:aggregate-to-edit 16d
system:aggregate-to-view 16d
system:auth-delegator 16d
system:basic-user 16d
system:certificates.k8s.io:certificatesigningrequests:nodeclient 16d
system:certificates.k8s.io:certificatesigningrequests:selfnodeclient 16d
system:controller:attachdetach-controller 16d
system:controller:certificate-controller 16d
system:controller:clusterrole-aggregation-controller 16d
system:controller:cronjob-controller 16d
system:controller:daemon-set-controller 16d
system:controller:deployment-controller 16d
system:controller:disruption-controller 16d
system:controller:endpoint-controller