不走kubectl proxy執行http請求:
- 實際要實現不透過kubectl proxy
- 則需要有限制,其實相關機制前面也有介紹 — serviceaccount(詳第44篇)
- 所以以下就要先來建立一個serviceaccount元件,來代表呼叫API的身分
- 接著當然就是要有Role與RoleBinding元件來賦予其權限
- 最終就可以透過這個serviceaccount身分來curl到REST API
建立serviceaccount:
- 直接執行指令進行serviceaccount元件的建立,執行:
kubectl create serviceaccount {名稱}
這邊名稱就先用:myscript
同前面44篇提到,此時將連帶建立一個token對應:
建立Role與RoleNinding:
- 接著透過yaml檔格式建立Role元件,撰寫一個yaml檔:
內容如下(細節如apiGroups等可參考40~44篇不再解說):
接著就是透過上述yaml建立Role元件:
接著建立RoleBinding元件,名稱就叫script-role-binding就直接用指令,執行:
kubectl create rolebinding script-role-binding --role=script-role --serviceaccount=default:myscript
實際透過上述ServiceAccount來透過REST API執行kubectl指令尚需要:
- Token
- Server(Endpoint)
1.需要憑證Token
如上有說到,當ServiceAccount被建立時,會自建一個Token,可查找執行:
kubectl get serviceaccount myscript -o yaml
查看其內容可執行:
kubectl get secret {上述secret名稱} -o yaml
這邊首先將這部分做好base64解密,並設定為環境變數使用,先執行:
echo {上面那一大段token} |base --decode|tr -d "\n"
接著將上面結果設為環境變數(TOKEN):
測試一下:
2.需要Server位置:
- 直接透過以下指令取得位置,並做成環境變數:
kubectl config view
此時需要的東西就都準備好了!!
實際執行REST API(不透過kubectl proxy):
實際要選用的http method則要看API定義,下一篇將詳解API這部分
暫時先組成一個curl範例,學會以下怎麼帶入剛剛的TOKEN
還有要帶著SERVER的憑證,也就是ca憑證
如下執行:
curl -X GET $SERVER/api --header "Authorization: Bearer $TOKEN" --cacert /etc/kubernetes/pki/ca.crt
嘗試執行其他的uri:
另一個$SERVER/api/v1/namespaces/default/services
在這邊還有一個問題,如果我不是在存有伺服器憑證(ca.crt檔案)的機台上
該怎麼辦?
這時候可以嘗試不執行server憑證的檢核,所以指令改為以下(不檢核憑證):
curl -X GET $SERVER/api --header "Authorization: Bearer $TOKEN" --insecure
下一篇將針對有哪些REST API (上面那些uri哪裡來的)做講解