《蹲坑学kubernetes》之9-1: kube-apiserver原理详解

网友投稿 1146 2022-11-01

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

《蹲坑学kubernetes》之9-1: kube-apiserver原理详解

Kubernetes APIServer提供了Kubernetes各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。

(一)kubernetes API Server的功能:

提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更);提供其他模块之间的数据交互和通信的枢纽(其他模块通过APIServer查询或修改数据,只有API Server才直接操作etcd);是资源配额控制的入口;拥有完备的集群安全机制。

(二)工作原理:

结合上图来从四步骤来学学习API Server的原理:

1、REST API

kube-apiserver支持同时提供https(默认监听在6443端口)和http API(默认监听在 127.0.0.1的8080 端口)两个接口提供的 REST API 格式相同。kube-apiserver的API调用格式如下图所示:

查看API接口地址

查询 Kubernetes API 支持的 API 版本

2、访问控制

(1)认证

开启 TLS 时,所有的请求都需要首先认证。Kubernetes 支持多种认证机制,并支持同时开启多个认证插件(只要有一个认证通过即可)。如果认证成功,则用户的 username 会传入授权模块做进一步授权验证;而对于认证失败的请求则返回 HTTP401。

(2)授权

认证之后的请求就到了授权模块。跟认证类似,Kubernetes 也支持多种授权机制,并支持同时开启多个授权插件(只要有一个验证通过即可)。如果授权成功,则用户的请求会发送到准入控制模块做进一步的请求验证;而对于授权失败的请求则返回 HTTP 403.

(3)准入控制

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

3、访问方式

(1)使用curl访问

[root@k8s-master~]# curl https://192.168.1.3:6443/api --cacert /usr/local/kubernetes/ssl/ca.pem--cert /usr/local/kubernetes/ssl/kube-controller-manager.pem --key/usr/local/kubernetes/ssl/kube-controller-manager-key.pem

[root@k8s-master~]#curl https://192.168.1.3:6443/api/v1--cacert /usr/local/kubernetes/ssl/ca.pem --cert/usr/local/kubernetes/ssl/kube-controller-manager.pem --key/usr/local/kubernetes/ssl/kube-controller-manager-key.pem[root@k8s-master~]#curl https://192.168.1.3:6443/api/v1/pods--cacert /usr/local/kubernetes/ssl/ca.pem --cert/usr/local/kubernetes/ssl/kube-controller-manager.pem --key/usr/local/kubernetes/ssl/kube-controller-manager-key.pem[root@k8s-master~]# curl https://192.168.1.3:6443/api/v1/replicationcontrollers --cacert/usr/local/kubernetes/ssl/ca.pem --cert/usr/local/kubernetes/ssl/kube-controller-manager.pem --key/usr/local/kubernetes/ssl/kube-controller-manager-key.pem[root@k8s-master~]# curl https://192.168.1.3:6443/api/v1/services --cacert/usr/local/kubernetes/ssl/ca.pem --cert/usr/local/kubernetes/ssl/kube-controller-manager.pem --key/usr/local/kubernetes/ssl/kube-controller-manager-key.pem

(2)使用KubectlProxy

启动端口:

注意:必须要开启端口,否则无法查看

查看默认(所有)API接口

查看指定接口

查看version信息

(3)kubectl客户端

命令行工具kubectl客户端,通过命令行参数转换为对API Server的REST API调用,并将调用结果输出。

命令格式:kubectl [command] [options]

例如:

查看

查看服务

(4)编程方式调用

使用场景:

运行在Pod里的用户进程调用kubernetes API,通常用来实现分布式集群搭建的目标。

开发基于kubernetes的管理平台,比如调用kubernetes API来完成Pod、Service、RC等资源对象的图形化创建和管理界面。

4、集群功能模块之间的通信

kubernetes API Server作为集群的核心,负责集群各功能模块之间的通信,集群内各个功能模块通API Server将信息存入etcd当需要获取和操作这些数据时,通过API Server提供的REST接口(GET\LIST\WATCH方法)来实现,从而实现各模块之间的信息交互。

(1)kubelet与API Server交互

每个Node节点上的kubelet定期就会调用API Server的REST接口报告自身状态,API Server接收这些信息后,将节点状态信息更新到etcd中。kubelet也通过API Server的Watch接口监听Pod信息,从而对Node机器上的POD进行管理。

(2)kube-controller-manager与API Server交互

kube-controller-manager中的Node Controller模块通过API Server提供的Watch接口,实时监控Node的信息,并做相应处理。

(3)kube-scheduler与API Server交互

Scheduler通过APIServer的Watch接口监听到新建Pod副本的信息后,它会检索所有符合该Pod要求的Node列表,开始执行Pod调度逻辑。调度成功后将Pod绑定到目标节点上。

上一篇:哪些Web框架最受Java程序员的青睐
下一篇:巧用HTML5给按钮背景设计不同的动画
相关文章

 发表评论

暂时没有评论,来抢沙发吧~