Dawn's Blogs

分享技术 记录成长

0%

Kubernetes学习 (10) 认证和授权

认证

在 Kubernetes API 服务器中,使用 ServiceAcount 进行认证。在 Pod 中如果没有指定 ServiceAcount 则会使用默认的 ServcieAcount。

在 Pod 中,认证 token 被存储在 /var/run/secrets/kubernetes.io/serviceaccount/token 文件中,这个文件通过加密卷挂载进每个容器的文件系统中。

ServiceAcount 资源

ServiceAcount 在 K8s 中也是一种资源,在每一个 namespace 中都有一个默认的 ServiceAcount,Pod 使用在同一命名空间中的 ServiceAcount 进行认证。spec.serviceAccountName 字段可以指定 ServiceAcount。

API 服务器在收到 token 时会认证 token 属于哪一个 ServiceAcount,进而使用 RBAC 插件进行授权

授权

Kubernetes 使用 RBAC 插件进行授权,RBAC 插件检查用户的动作是否可以被执行。

动词

RBAC 插件中的动作与 Restful HTTP 请求方法对应,动作包括 get、list、create、update、patch、delete、deletecollection。

image-20231007122832271

RBAC 动作针对某一类资源,也可以指定某个资源实例,甚至是非资源的 URL 路径(因为并不是 API 服务器对外暴露的每个路径都映射到一个资源,如 /api 路径本身或服务器健康信息路径 /healthz)。

RBAC 资源

RBAC 授权规则是通过四种资源来进行配置的,可以分为两组:

  • Role 和 ClusterRole:指定可以在资源上执行哪些动词
  • RoleBinding 和 ClusterRoleBinding:将上述角色绑定到 ServiceAcount 上

前缀是否有 Cluster,区别在于:是否是集群级别的资源。