天天看點

Python通過K8s API實作對K8S叢集的通路認證

文章目錄

  • ​​一、環境準備​​
  • ​​`1.1.安裝python相關子產品`​​
  • ​​二、Kubernetes API使用​​
  • ​​`2.1.API是什麼?`​​
  • ​​`2.2.K8s認證方式`​​
  • ​​1、HTTPS證書認證(kubeconfig)​​
  • ​​2、HTTP Token認證(ServiceAccount)​​
  • ​​擷取Token字元串​​
  • ​​拷貝ca證書到python腳本所在的目錄​​
  • ​​python調用​​
  • ​​3、使用者名+密碼的方式認證基本不用​​

參考視訊:https://ke.qq.com/course/320021

一、環境準備

​1.1.安裝python相關子產品​

pip3 install kubernetes      

二、Kubernetes API使用

​2.1.API是什麼?​

API(Application Programming Interface,應用程式接口): 是一些預先定義的接口(如函數、HTTP接口),或指軟體系統不

同組成部分銜接的約定。 用來提供應用程式與開發人員基于某軟體或硬體得以通路的一組例程,而又無需通路源碼,或了解内

部工作機制的細節。

K8s也提供API接口,提供這個接口的是管理節點的apiserver元件,apiserver服務負責提供HTTP API,以便使用者、其他元件互相通信。

有兩種方式可以操作K8s中的資源:

  • HTTP API:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/
  • 用戶端庫: https://github.com/kubernetes-client/python【推薦】

​2.2.K8s認證方式​

K8s支援三種用戶端身份認證:

  • HTTPS 證書認證:基于CA憑證簽名的數字證書認證
  • HTTP Token認證:通過一個Token來識别使用者
  • HTTP Base認證:使用者名+密碼的方式認證

1、HTTPS證書認證(kubeconfig)

把/root/.kube/config檔案拷貝到python腳本所在的路徑【我是在Windows上開發】

Python通過K8s API實作對K8S叢集的通路認證
from kubernetes import client,config

config.load_kube_config(r'E:\學習\python\django\project\k8sPlatform\K8sSdk\K8sSdk\config')   # 加載config檔案,用于通路k8s
apps_api = client.AppsV1Api()   # 資源接口類執行個體化

print(len(apps_api.list_namespaced_deployment(namespace="kube-system").items))   # 傳回一個清單
for info in apps_api.list_namespaced_deployment(namespace="kube-system").items:
    print(info.metadata.name)       # deployment的名字      
Python通過K8s API實作對K8S叢集的通路認證

2、HTTP Token認證(ServiceAccount)

擷取Token字元串

建立service account并綁定預設cluster-admin管理者叢集角色

# 建立使用者
kubectl create serviceaccount dashboard-admin -n kube-system
# 使用者授權
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 擷取使用者Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')      

拷貝ca證書到python腳本所在的目錄

python調用

configuration = client.Configuration()
configuration.host = "https://192.168.137.2:6443"   # api-server位址
configuration.ssl_ca_cert = r'E:\學習\python\django\project\k8sPlatform\K8sSdk\K8sSdk\ca.crt' # 指定CA憑證
configuration.verify_ssl = True     # 啟用證書驗證
token = "eyJhbGciOiJSUzI1NiIsImtpZCI6ImlZVXc5RHZQckZubUotZzNES3BtSEROejRyT3QySG1kMlZ6TXNrYW5UWFUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tOGhsOHEiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYzAyZDQ1MzktNDY4My00YWE5LWIxODctNDBkZDBkNWIwZWRlIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.0nx74MKfOrToRTkjF8Uv-CawmlhCNa2cx9ORdXiOvQkSzvrwlgIF_R2Fgm4CfcJgnMI6oBqpKfhBOSnF-N3akjC4lf5OcTMeJvq_1cw8iKlfp9f16AN5y-4mR8TERELKPtiGElp53vsHsTEhyjKwDNip5mrzWOx7FP9uKlcJofnn-EE_SRZnouYHrtlZaJgJPZ2zo8-Sx8oLLgbTrG_PR-idZAgpsWAKlYBdquSeFQ9nQ16i-AhgpdrPRttFVSiSH90avPEjzSmU0cgyy0WrHGe4-pRtD7r0zSWFv_7vkjRh2A3P7nmn7Pr2TeTTLR9X74JSj5N3BYace-y_CtVkLw"
configuration.api_key = {"authorization": "Bearer " + token}    # 指定Token字元串
client.Configuration.set_default(configuration)

apps_api = client.AppsV1Api()

print(len(apps_api.list_namespaced_deployment(namespace="kube-system").items))     # 是一個清單
for info in apps_api.list_namespaced_deployment(namespace="kube-system").items:
    print(info.metadata.name)       # deployment的名字      

3、使用者名+密碼的方式認證基本不用

上一篇: Helm快速入門
下一篇: k8s學習 - API