九析帶你用 curl 輕鬆完爆 k8s apiserver

目錄

1 apiserver 客戶端訪問方式

2 curl 訪問 apiserver

    2.1 獲取 apiserver 地址

    2.2 獲取 token

        2.2.1 確定 service account

        2.2.2 創建 clusterrolebindings 資源

        2.2.3 獲取 token

    2.3 使用 token 訪問 apiserver


1 apiserver 客戶端訪問方式

        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

clipboard1.pngspacer.gif        也可以通過如下命令一次性獲取:

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),從而可以訪問什麼資源。

spacer.gifclipboard2.png

        上面介紹的三個術語(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

clipboard3.pngspacer.gif

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

clipboard4.pngspacer.gif        再根據 secret 獲取 token,如下圖所示:

clipboard5.png        因爲 secret 中的 token 是經過 base64 編碼過的,所以需要解碼纔可以使用。命令如下。注意 token 拷貝要完整,切記,切記,切記。

## YOUR_TOKEN 就是你 default 用戶的 token 值。需根據個人情況填寫。

echo 'YOUR_TOKEN' | base64 -d

clipboard6.pngspacer.gif2.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/apispacer.gif

clipboard7.png         自此,使用 curl 輕鬆完爆 k8s apiserver。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章