Kubernetes API server 工作原理

作为 Kubernetes 的使用者,每天用得最多的命令就是 kubectl XXX 了。
kubectl 其实就是一个控制台,主要提供的功能:
1. 提供 Kubernetes 集群管理的 REST API 接口,包括认证授权、数据校验以及集群状态变更;
2. 提供其他模块之间的数据交互和通信的枢纽(其他模块通过 API Server 查询或修改数据,只有 API Server 才直接操作 etcd)
也就是说,我们在终端里输入的每个 kubectl 命令,实际上都是一个发往 Kubernetes API server 的 Restful API 调用。
我们可以做个实验:
kubectl get secret -v=9, 通过-v=9 设置最高级别的 trace:
从输出观察到为了取回所有的 secret 而进行的 API server 的调用 url:https://xxxx/api/v1/namespaces/<own namespace>/secrets?limit=500:

这个 HTTP 请求的格式在 Kubernetes 官网能查到。

那么 kubectl 命令怎么知道应该把请求发送到哪个 API server 呢?
实行命令 kubectl config view, 显示内容里的 server:后面的地址就是 API server 的 url。

kubectl config view 显示的内容来自配置文件: ~/.kube/config:
其实 Kubernetes 的 kubectl 工作原理和 CloudFoundry 的命令行工具 cf 一样。
设置操作系统的环境变量 CF_TRACE = true

然后执行任意的 cf 命令,能看到这些命令实际上也是发送一个 HTTP 请求到 SAP Cloud Platform 的某个 endpoint 上。
例子:cf logs connectvity-demo-approuter --recent
然后就能看到为了完成这个命令所发送的 HTTP 请求和响应的负载。

要获取更多 Jerry 的原创文章,请关注公众号"汪子熙":

版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/8f038bf64f2f2a1c19578e24e】。文章转载请联系作者。
评论