kube-apiserver授权

kube-apiserver授权是用于控制对集群资源的访问控制,和认证类似,kubernetes也支持多种授权机制,并支持同时开启多个授权插件(只要有一个验证通过即可)。如果授权成功,请求会发到准入模块做进一步的请求验证,对于授权失败的请求会返回403,kubernetes支持的授权插件包括ABAC/RBAC/Webhook/Node方式。接下来将主要介绍很常用的RBAC授权模式。基于角色的访问控制(Role-Based Access Control,即”RBAC”)使用 rbac.authorization.k8s.io API Group 实现授权决策,允许管理员通过 Kubernetes API 动态配置策略。RBAC的工作原理如下所示:

首先Kubernetes中账户区分为:User Accounts(用户账户) 和 Service Accounts(服务账户) 两种,它们的设计及用途如下:

  • UserAccount是给kubernetes集群外部用户使用的,例如运维或者集群管理人员,使用kubectl命令时用的就是UserAccount账户;UserAccount是全局性。在集群所有namespaces中,名称具有唯一性,默认情况下用户为admin;(查看命令:cd ~/.kube; cat config)
  • ServiceAccount是给运行在Pod的程序使用的身份认证,Pod容器的进程需要访问API Server时用的就是ServiceAccount账户;ServiceAccount仅局限它所在的namespace,每个namespace都会自动创建一个default service account;创建Pod时,如果没有指定Service Account,Pod则会使用default Service Account。

Role和ClusterRole的区别,Role控制namespace范畴下的资源操作查看权限,ClusterRole控制一个集群下的资源操作查看权限。 User可以绑定Role也可以绑定ClusterRole。

上次在演示X509认证过程中,创建了myuser,当时给该user创建了role(具备default namespace下的一些pod查看操作权限),但是没有分配其他namespace资源操作权限,现在接着使用该user来看看如何完成RBAC的授权。检查目前用户的权限,可以看到查看default namespace的pod可以正常查看到,如果查看kube-system namespace下的pod会提示无权限查看。

接下来就看看如何通过创建role,rolebinding给myuser进行赋权,让其能访问kube-system namespace下的资源权限。

创建Role的yaml文件内容如下所示:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: kube-system
  name: pod-reader
rules:
  - apiGroups: [""] # "" 标明 core API 组
    resources: ["pods"]
    verbs: ["get", "watch", "list"]

创建Rolebinding文件内容如下所示:

apiVersion: rbac.authorization.k8s.io/v1
# 此角色绑定允许 "myuser" 读取 "kube-system" 名字空间中的 Pods
kind: RoleBinding
metadata:
  name: read-pods
  namespace: kube-system
subjects:
  # 你可以指定不止一个“subject(主体)”
  - kind: User
    name: myuser # "name" 是区分大小写的
    apiGroup: rbac.authorization.k8s.io
roleRef:
  # "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系
  kind: Role # 此字段必须是 Role 或 ClusterRole
  name: pod-reader     # 此字段必须与你要绑定的 Role 或 ClusterRole 的名称匹配
  apiGroup: rbac.authorization.k8s.io

通过命令在kube-system namespace下创建Role和Rolebinding.

kubectl create -f role.yaml -n kube-system
kubectl create -f rolebinding.yaml -n kube-system

 再次通过myuser获取kube-system namespace下面的pod信息,可以看到正确返回了pod信息。

除了对User或者SA赋权外,还可以对Group进行赋权,对Group进行赋权后,整个Group下的User都具备了被赋予的权限。如果是对Group进行赋权,将subjects下的kind修改为Group即可。例如,对已经通过认证和未通过认证的用户进行赋权。

subjects:
- kind: Group
  name: system:authenticated
  apiGroup: rbac.authorization.k8s.io
- kind: Group
  name: system:unauthenticated
  apiGroup: rbac.authorization.k8s.io

以上就是kube-apiserver授权过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

taoli-qiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值