33 K8S 之访问控制
API Server 作为 Kubernetes 集群系统的网关,是访问及管理资源对象的唯一入口,它默认监听 TCP 的 6443 端口,通过 HTTPS 协议暴露了一个 RESTful 风格的接口。所有需要访问集群资源的集群组件或客户端,包括 kube-controller-manager、kube-scheduler、kubelet 和 kube-proxy 等集群基础组件,CoreDNS 等集群的附加组件,以及此前使用的 kubectl 命令等都必须要经此网关请求与集群进行通信。所有客户端均要经由 API Server 访问或改变集群状态以及完成数据存储,并且 API Server 会对每一次的访问请求进行合法性检验,包括用户身份鉴别、操作权限验证以及操作是否符合全局规范的约束等。
Kubernetes 系统上的用户账户及用户组的实现机制与常规应用略有不同。Kubernetes 集群将那些通过命令行工具 kubectl、客户端库或者直接使用 RESTful 接口向 API Server 发起请求的客户端上的请求主体分为两个不同的类别:现实中的“人”和 Pod 对象,它们的用户身份分别对应用户账户(User Account,也称为普通用户)和服务账户(Service Account,简称 SA)。
对 API Server 来说,来自客户端的请求要么与用户账户绑定,要么以某个服务账户的身份进行,要么被视为匿名请求。这意味着群集内部或外部的每个进程,包括由人类用户使用 kubectl,以及各节点上运行的 kubelet 进程,再到控制平面的成员组件,必须在向 API Server 发出请求时进行身份验证,否则即被视为匿名用户。
Kubernetes 支持的认证方式包括 X.509 数字证书、承载令牌(bearer token,也称为不记名令牌)、身份验证代理(authenticating proxy)和 HTTP Basic 认证等。具体来说,API Server 支持认证方式,其中所有的令牌认证机制通常被统称为“承载令牌认证”。
1)静态密码文件认证 2)静态令牌文件认证 3)X509 客户端证书认证 4)引导令牌认证
5)ServiceAccount 令牌认证 6)OpenID Connect 令牌认证 7)Webhook 令牌认证 8)代理认证
AlwaysDeny 和 AlwaysAllow 两个特殊的授权插件,其中 AlwaysDeny(总是拒绝)仅用于测试,而 AlwaysAllow(总是允许)则用于不期望进行授权检查时直接在授权检查阶段放行所有的操作请求。--authorization-mode 选项用于定义 API Server 要启用的授权机制,多个选项值彼此间以逗号进行分隔。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/5498a8f2119fe1c3e36ff4e84】。文章转载请联系作者。
评论