聊聊kube-apiserver
简述
kube-apiserver 是k8s 最重要的核心之一,主要功能如下:
-提供集群管理的rest api接口,包括认证授权、数据校验一级集群状态变更等;
-提供与其他模块之间的数据交互和通信
特:其他模块通过api server 查询或修改数据,只有api server能直接操作etcd数据库
工作原理
kube-apiserver提供了k8s的rest api,实现了认证、授权和准入控制等安全功能,同时也负责了集群状态的存储操作。
示意图如下:
工作原理rest api
kube-apiserver支持同时提供https和http api,其中http api是非安全接口,不做任何认证授权机制,不建议生产环境启用,但两个接口提供的rest api格式相同。
-https api 默认监听在6443端口
-http api 默认监听在127.0.0.1的8080端口
实际使用过程中,通常通过kubectl来访问apiserver,也可通过k8s各语言的client库来访问,同时,使用kubectl时,打开调试日志还可以看每个api调用的格式。
访问控制说明
k8s api 每个请求都会经过多阶段的访问控制才会被接受,包括认证、授权及准入控制等。
认证
开启TLS情况下,所有请求都需要首先认证。k8s支持多种认证机制,并且支持同时开启多个认证插件(仅一个认证通过即可),如认证成功,则用户的username会传入授权模块做进一步的授权验证,而认证失败的请求则返回http 401 。
授权
认证之后的请求就到了授权模块,和认证类似,k8s也支持多种授权机制,并支持同时开启多个授权插件(仅一个验证通过即可)。如授权成功,则用户的请求会发送到准入控制模块做进一步的请求验证,失败的请求则返回http403
准入控制
用来对请求做进一步的验证或添加默认参数,不同于认证和授权只关心请求的用户和操作,准入控制还会处理请求的内容,并且仅对创建、更新、删除或连接(如代理)等有效,而对读操作无效。准入控制也支持同时开启多个插件,但他们是依次调用的,只有全部插件都通过的请求才可以允许进入系统。