目錄api
1 apiserver 客戶端訪問方式app
2 curl 訪問 apiservercurl
2.1 獲取 apiserver 地址ide
2.2 獲取 token網站
2.2.1 肯定 service account編碼
2.2.2 建立 clusterrolebindings 資源url
2.2.3 獲取 tokenspa
2.3 使用 token 訪問 apiserver3d
1 apiserver 客戶端訪問方式server
apiserver 經常使用的客戶端訪問方式有兩種:
1)數字證書認證:基於 k8s CA 簽發的數字證書認證方式
2)TOKEN 認證:基於 TOKEN 識別合法用戶的認證方式
本文介紹使用 curl + TOKEN 的認證方式來訪問 apiserver。
2 curl 訪問 apiserver
命令格式以下:
## -k:容許 curl 不使用數字證書能夠訪問 https 網站
## -H:自定義 http header 內容
curl -k -H 'Authorization: Bearer $TOKEN' $APISERVER/api
如上可知,若是想訪問 apiserver,只須要獲取 token、apiserver 便可。
2.1 獲取 apiserver 地址
kubectl config view
也能夠經過以下命令一次性獲取:
kubectl config view | grep -i server | cut -d ':' -f 2-
2.2 獲取 token
在獲取 token 時,須要介紹一下 k8s RBAC(Role-based Access Control),簡單來講,RBAC 就是誰(service account)用什麼角色(role)進行綁定(role/clusterrole binding),從而能夠訪問什麼資源。
上面介紹的三個術語(service account、role/clusterrole、rolebinding/clusterrolebinding)中咱們並無發現 token,那麼 token 在哪裏?答案是 secret 對象中,而 secret 存在於 service account 中。
所以,若是想擁有集羣的最高訪問權限,最簡單的作法就是將某個 service account 綁定到集羣管理員便可(cluster-admin)。
2.2.1 肯定 service account
這裏咱們採用 k8s 安裝時默認生成的 default 用戶。
kubectl get sa
2.2.2 建立 clusterrolebindings 資源
建立 default-clusterrolebings.yaml 資源文件:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: default-admin-cluster
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: default
namespace: default
執行下面命令給 default 用戶綁定集羣管理員角色:
kubectl apply -f default-clusterrolebings.yaml
2.2.3 獲取 token
查找 service account 信息獲取 secret。
kubectl get sa default -o yaml
再根據 secret 獲取 token,以下圖所示:
由於 secret 中的 token 是通過 base64 編碼過的,因此須要解碼纔可使用。命令以下。注意 token 拷貝要完整,切記,切記,切記。
## YOUR_TOKEN 就是你 default 用戶的 token 值。需根據我的狀況填寫。
echo 'YOUR_TOKEN' | base64 -d
2.3 使用 token 訪問 apiserver
## YOUR_DECODE_TOKEN_VAL 是上面通過 base64 解碼後的值
export TOKEN=YOUR_DECODE_TOKEN_VAL
## 設置 apiserver 地址
export APISERVER=$(kubectl config view | grep -i server | cut -d ':' -f 2-)
curl -k -H 'Authorization: Bearer $TOKEN' $APISERVER/api
自此,使用 curl 輕鬆完爆 k8s apiserver。