rancher的用户账户如何在下游 kubernetes 集群完成认证鉴权

认证

首先说认证,rancher 是通过用户伪装来通过下游集群的认证。

伪装是 kubernetes 自带的能力,指的是一个用户可以通过伪装(Impersonation)头部字段来以另一个用户的身份执行操作。带伪装的请求首先会被身份认证识别为发出请求的用户, 之后会切换到使用被伪装的用户的用户信息。

定义会有点抽象,举个例子来说,假设我使用 a 用户伪装 b 用户,那么到 apiserver 层认证还是认证的 a 用户的信息,通过认证后到具体执行时会根据 b 用户的权限进行鉴权来判断是否可以执行对应操作。

那么回到 rancher 中,rancher 在下游集群都有部署 cluster-agent,agent 使用的 service account 拥有 cluster-admin 超级权限,在rancher 携带具体用户账号请求下游集群时首先就会到 agent 上使用这个有 cluster-admin 超级权限的 service account 完成认证,然后再用所携带的具体用户进行后续的鉴权。

这里使用这个 service account 非常巧妙,因为如果不这么做,假设需要全量同步 rancher 账号到下游集群中,那么需要为每一个用户签发证书然后请求下游集群时也需要携带证书,这个操作非常重,也带来了额外的带宽成本,非常不经济。

鉴权

然后再说鉴权,这里 rancher 还是使用的 kubernetes 的 RBAC 能力,不同之处在于,rancher 有自己的一套权限 crd,可以在 rancher 平台页面操作生成 cr,之后会通过 rancher 的权限控制器同步到下游集群的Role、ClusterRole、RoleBinding 和 ClusterRoleBinding中。那么在通过 rancher 对下游进行操作时对用户鉴权的就和 rancher 上保持一致了。

参考

  1. https://juejin.cn/post/7056759836209315876
  2. https://juejin.cn/post/7054119173441454093
  3. https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/authentication/#user-impersonation
  4. https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据