今天要討論的是如何訪問 cluster (Kube-apiserver),在訪問 Cluster 的時候可以分為 人員 (user) 或者是 服務 (servie) 訪問。
如果是服務訪問時可以透過建立 ServiceAccount 進行服務的溝通及訪問,如果以 EKS 而言還可以透過 annotation 宣告並透過 oidc 串接 AWS IAM role。
ServiceAccount 的部分會在明天介紹。
當 user 要訪問 kube-apiserver 的時候會透過 kubectl
指令訪問,那麼在訪問的時候是如何進行驗證(Authentication)以及授權(Authorization)的呢?
Admins: 透過 kubectl
連線
Developers: 透過 curl https://kube-server-ip:6443/
連線
Service Account
上方所提及的屬於"人"使用,而當服務需要使用時會使用ServiceAccount
由 kube-apiserver 進行驗證(Authentication) , 可以由以下四種方式
token,user,uid,"group1,group2,group3"
並在 /etc/kubernetes/manifests/kube-apiserver 加上
--token-auth-file user-details.csv
可以透過以下指令進行測試取得pod資訊
curl -v -k https://master-node-ip:6443/api/v1/pods --header "Authorization: Bearer token"
# -v 輸出細節
# -k 忽略SSL 證書驗證
# token 為上方建立csv時所給予user的token
主要會在kube-apiserver中設定 --authorization-mode
可以分為以下Mode
訪問node時的憑證,指的是不能跨 Node 存取
直接將 policy 賦予給 user
{"kind":"Policy", "spec":{"user":"test-user","namespace":"*","resource":"pods","apiGroup":"*"}}
建立 role ,並將 user 賦予給 role
Role 分為 Cluster 等級或者是 namespace 等級,Cluster 等級 可以為 nodes, PV, clusterroles, certificatesigningrequests, namespaces
透過 Webhook 的方式將權限控管交由第三方,當向kube API 發起請求時會向該第三方發起
預設允許所有
預設拒絕所有