【Kubernetes解读】Authorization
kubernetes 中的授权机制
k8s中的授权策略也支持开启多个授权插件,只要一个验证通过即可。k8s授权处理主要是根据以下请求属性:
- user, group, extra
- API、请求方法(如get、post、update、patch和delete)和请求路径(如/api)
- 请求资源和子资源
- Namespace
- API Group
目前k8s支持的授权模式主要有以下几种:
- Node Authorization
- ABAC Authorization
- RBAC Authorization
- Webhook Authorization
Node Authorization
1.7+版本才release的一种授权机制,通过配合NodeRestriction control准入控制插件来限制kubelet访问node,endpoint、pod、service以及secret、configmap、PV和PVC等相关的资源。配置方式为: –authorization-mode=Node,RBAC –admission-control=…,NodeRestriction,…
ABAC Authorization
ABAC(Attribute-based access control),使用这种模式需要配置参数: –authorization-mode=ABAC –authorization-policy-file=SOME_FILENAME。 这种模式的实现相对比较生硬,就是在master node保存一份policy文件,指定不用用户(或用户组)对不同资源的访问权限,当修改该文件后,需要重启apiserver,跟openstack 的ABAC类似。policy文件的格式如下:
# Alice can do anything to all resources:
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"kind": "Policy",
"spec": {
"user": "alice",
"namespace": "*",
"resource": "*",
"apiGroup": "*"
}
}
# Kubelet can read any pods:
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"kind": "Policy",
"spec": {
"user": "kubelet",
"namespace": "*",
"resource": "pods",
"readonly": true
}
}
# Kubelet can read and write events:
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"kind": "Policy",
"spec": {
"user": "kubelet",
"namespace": "*",
"resource": "events"
}
}
使用这种模式需要配置参数: –authorization-mode=ABAC –authorization-policy-file=SOME_FILENAME
RBAC Authorization
RBAC(Role-Based Access Control)依然处于Beta阶段,通过启动参数–authorization-mode=RBAC,使用kubeadm安装k8s默认会enabled。 RBAC API定义了四个资源对象用于描述RBAC中用户和资源之间的连接权限:
- Role
- ClusterRole
- RoleBinding
- ClusterRoleBinding
Role是定义在某个Namespace下的资源,在这个具体的Namespace下使用。 ClusterRole与Role相似,只是ClusterRole是整个集群范围内使用的。 RoleBinding把Role绑定到账户主体Subject,让Subject继承Role所在namespace下的权限。 ClusterRoleBinding把ClusterRole绑定到Subject,让Subject集成ClusterRole在整个集群中的权限。
我们可以通过kubectl命令获取对应的Role相关资源进行增删改查:
kubectl get roles --all-namespaces
kubectl get ClusterRoles
kubectl get rolebinding --all-namespaces
kubectl get clusterrolebinding
API Server已经创建一系列ClusterRole和ClusterRoleBinding。这些资源对象中名称以system:开头的,表示这个资源对象属于Kubernetes系统基础设施。 也就说RBAC默认的集群角色已经完成足够的覆盖,让集群可以完全在 RBAC的管理下运行。 修改这些资源对象可能会引起未知的后果,例如对于system:node这个ClusterRole定义了kubelet进程的权限,如果这个角色被修改,可能导致kubelet无法工作。
Webhook Authorization
用户在外部提供 HTTPS 授权服务,然后配置 apiserver 调用该服务去进行授权。apiserver配置参数: –authorization-webhook-config-file=SOME_FILENAME 配置文件的格式跟kubeconfig的格式类似,具体参考官方文档
-
No backlinks found.