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

目錄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

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。

相關文章
相關標籤/搜索