Kube-ApiServer架构解析
Kube-ApiServer架构解析
基于1.29
- API层:主要以REST方式提供各种API,除了K8s的CUED资源还有健康检查、日志等等
- 访问控制层:当有客户端访问API时,访问控制层负责对用户身份鉴权、校验
- Registry:K8s把所有的资源对象都保存在注册表,针对不同的资源对象,都定义了资源对象的类型、如何创建资源对象,如何转换资源对象,以及如何资源编码为JSON或ProtoBuf格式进行存储
- etcd:用于持久化存储K8s资源对象的KV数据库
K8s Proxy API
K8s Proxy API 的作用是代理REST请求,把API Server收到的REST请求转发到K8s进程的REST端口
- 该进程由kubelet负责响应
- 这里的信息,来自于Node,而不是ETCD所以可能存在偏差
K8s Porxy API路径如下:
列出指定Node的所有Pod |
此外,如果在kubelet进程中开启--enable-deugging-handlers=true
,还会支持更多的接口
在某个Node上运行某个容器 |
集群功能模块之间的通信
kubelete和API Server交互的过程,是每个Node上的kubelet周期性调用一次API Server接口,报告自身状态,同时给予节点缓存,减少对于APIServer对访问压力
在K8s上 Node上的kubelet和kube-proxy组件都需要kube-apiserver签发的安全性HTTPS协议,而需要CA证书,集群规模宏大,会增加集群拓展压力,所以在K8s v1.18提出了TLS Bootstarping,进入稳定特性
K8s中由是基本通过client-go来访问, 在K8s v1.22 Stable阶段使用的“Exterbal credential providers”特性,不显示使用Bare Token和证书访问,只需要kubeconfig
在K8s v1.26 Stable阶段新增使用External Credential Providers,kubelet可以执行本地的 Credential Providers Plugin特征实现获取不同镜像仓库的访问
网络隔离设计
API Server要求核心的Master网络与承载的Node网络实现某种程度的安全隔离,API Server添加了SSH安全隧道。让公有云提供商可以给予SSH安全通道安全访问API Server接口,但是也出现了更新、部署的困难,所以在K8s v1.16 Alpha阶段 提出了API Server Network Policy但是在K8s v1.29仅仅在Beta 的0.0.9版本
- API Server Network Policy核心思想API Server放在一个独立的网络中和Node网络互相隔离,然后增加独立的网络连通性代理(Connectivity Proxy)来解决这个网络连通问题
引入API Server Network Policy机制实现Master机制和Node网络安全隔离具备以下的优势:
- Connectivity Porxy可以独立拓展,不影响API Server的发展
- 通过采用自定义的Connectivity Proxy,也可以实现VPN网络的穿透等高级网络代理特性
- 网络代理吧Master网络和Node网络分离,提神了API Server代理内聚