聊聊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

准入控制

用来对请求做进一步的验证或添加默认参数,不同于认证和授权只关心请求的用户和操作,准入控制还会处理请求的内容,并且仅对创建、更新、删除或连接(如代理)等有效,而对读操作无效。准入控制也支持同时开启多个插件,但他们是依次调用的,只有全部插件都通过的请求才可以允许进入系统。

你可能感兴趣的:(聊聊kube-apiserver)