Kubernetes CKA課程筆記 70

Kubernetes REST API — without kubectl proxy

ZONGRU Li
Nov 28, 2021

前一篇透過kubectl proxy得以實現curl等機制

來發動http請求,透過API ServerREST APIK8s Cluster溝通

但是這仍然不夠方便來寫成腳本,尤其是還要建立kubectl proxy

所以接下來就來學習如何不透過kubectl proxy一樣能夠發動http請求

不走kubectl proxy執行http請求:

  • 實際要實現不透過kubectl proxy
  • 則需要有限制,其實相關機制前面也有介紹 — serviceaccount(詳第44篇)
  • 所以以下就要先來建立一個serviceaccount元件,來代表呼叫API的身分
  • 接著當然就是要有RoleRoleBinding元件來賦予其權限
  • 最終就可以透過這個serviceaccount身分來curlREST 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指令尚需要:

  1. Token
  2. 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哪裡來的)做講解

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet