k8s API Server提供了k8s各類資源對象(pod,RC,Service等)的增刪改查及watch等HTTP Rest接口,是整個系統的數據總線和數據中心。
(一)kubernetes API Server的功能:
提供了集群管理的REST API接口(包括認證授權、數據校驗以及集群狀態變更);
提供其他模塊之間的數據交互和通信的樞紐(其他模塊通過API Server查詢或修改數據,只有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 版本
查詢Kubernetes API的資源對象
2、訪問控制
(1)認證
開啟 TLS 時,所有的請求都需要首先認證。Kubernetes 支持多種認證機制,並支持同時開啟多個認證插件(只要有一個認證通過即可)。如果認證成功,則用戶的 username 會傳入授權模塊做進一步授權驗證;而對於認證失敗的請求則返回 HTTP 401。
認證之後的請求就到了授權模塊。跟認證類似,Kubernetes 也支持多種授權機制,並支持同時開啟多個授權插件(只要有一個驗證通過即可)。如果授權成功,則用戶的請求會發送到准入控制模塊做進一步的請求驗證;而對於授權失敗的請求則返回 HTTP 403.
(3)准入控制
准入控制(Admission Control)用來對請求做進一步的驗證或添加默認參數。不同於授權和認證只關心請求的用戶和操作,准入控制還處理請求的內容,並且僅對創建、更新、刪除或連接(如代理)等有效,而對讀操作無效。准入控制也支持同時開啟多個插件,它們依次調用,只有全部插件都通過的請求才可以放過進入系統。
3、訪問方式
(1)使用curl訪問
<code>[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/<code>
<code>[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/<code>
(2)使用Kubectl Proxy
啟動端口:
注意:必須要開啟端口,否則無法查看
查看默認(所有)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通過API Server的Watch接口監聽到新建Pod副本的信息後,它會檢索所有符合該Pod要求的Node列表,開始執行Pod調度邏輯。調度成功後將Pod綁定到目標節點上。
閱讀更多 DoDo在線 的文章