kubernetes api介紹
作用: 將各種資源對象的數據都通過該api接口被提交到后端的持久化存儲etcd中;
一個api的頂層元素由kind丶apiVersion丶metadata丶spec和status這5部分組成
1.kind
有三大類別: 對象(object)丶列表(list)丶簡單類別(simple)
2.apiVersion
表示API的版本號, 當前版本默認只支持v1
3.metadata : 資源對象的元數據定義,
在kubernetes中的每個資源對象都必須包含3中Metadata
namespace: 對象所屬的命名空間
name: 對象的名稱
uid: 系統為每個對象都生成的唯一id
其它重要的元數據
labels: 標簽
annotations: 用戶可定義的注解
resourceVersion: 用於識別資源內部版本號的字符串
creationTimestamp: 系統記錄創建對象時的時間戳
deletionTimestamp: 系統記錄刪除對象時的時間戳
selfLink: 通過api訪問資源自身的URL
4.spec: 用戶對需要管理的對象進行詳細描述的主體部分都在spec, 他會被kubernetes持久化到etcd中保存, 系統通過spec的描述來創建或更新對象, 以達到用戶期望的對象運行狀態
5.status: 用於記錄對象在系統中的當前狀態信息
訪問api
1.本地監聽
kubectl proxy
curl http://127.0.0.1:8001/api
2.網絡監聽
kubectl proxy --address='192.168.1.52' --accept-hosts='^*$' --port=8001
啟動kubectl proxy,使用網卡IP,從其他機器訪問, --accept-hosts='^*$' 表示接受所有源IP,否則會顯示不被授權
curl http://192.168.1.52:8001/api/
3.直接訪問
kubectl create sa test
kubectl create clusterrolebinding sa-test-cluster-admin --clusterrole='cluster-admin' --serviceaccount=default:test
TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='test')].data.token}"|base64 -d)
curl --header "Authorization: Bearer $TOKEN" --insecure -X GET https://192.168.1.52:6443/api/v1/nodes
4.通過postman訪問
注意: 使用sa需要關閉ssl驗證