天天看点

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