Kubernetes API Server 概述、apiserver授权策略
Kubernetes API Server 概述
Kubernetes API Server 通过一个名为kube-apiserver的进程提供服务,该进程运行在Master上。在默认情况下,kube-apiserver进程在本机的8080端口(对应参数--insecure-port)提供REST服务。我们也可以同时启动HTTPS安全端口(--secure-port=6443)来启动安全机制,加强REST API 访问的安全性;
API Server是k8s集群数据的唯一访问入口,因此安全性与高性能成为API Server 设计和实现的两大核心目标;通过采用HTTPS安全传输通道与CA签名数字证书强制双向认证的方式,API Server的安全性得以保障。
API Server为了更细粒度的控制用户或应用对K8s资源对象的访问权限,k8s启用了访问控制策略,认证管理;
API授权策略
API Server目前支持以下几种授权策略: (通过API Server的启动参数“--authorization-mode”设置)
- AlwaysDeny:表示拒绝所有请求,一般用于测试。
- AlwaysAllow:允许接收所有请求,如果集群不需要授权流 程,则可以采用该策略,这也是Kubernetes的默认配置。
- ABAC(Attribute-Based Access Control):基于属性的访问控制,表示使用用户配置的授权规则对用户请求进行匹配和控制。
- Webhook:通过调用外部REST服务对用户进行授权。
- RBAC:Role-Based Access Control,基于角色的访问控制。
- Node:是一种专用模式,用于对kubelet发出的请求进行访问控制
API Server架构
API Server的架构从上到下可以分为4层
- API层:主要以REST方式提供各种API接口,除了有K8s资源对象的CRUD(crud是指在做计算处理时的增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete))和Watch等主要API,还有健康检查、UI、日志、性能指标等运维监控相关的API
- 访问控制层:当客户端访问API接口时,访问控制层负责对用户身份鉴权,验明用户身份,核准用户对k8s资源对象的访问权限,然后根据配置的各种资源访问许可逻辑(Admission Control),判断是否允许访问。
- 注册表层:k8s把所有资源对象都保存在注册表(Registry)中,针对注册表中的各种资源对象都定义了:资源对象类型、如何创建资源对象、如何转换资源的不通版本、如何将资源编码和解码为JSON或Protobuf格式(应该是一种文件存储格式,不影响学习)进行存储
- etcd数据库:用于持久化存储k8s资源对象的kv数据库。etcd的watch API 接口对于API server来说非常重要,因为通过这个watch接口,api server创新性的设计了list-watch这种高性能的资源对象实时同步机制。