Kubernetes api-server 调用

访问 API 有两种方式

  1. 通过 API 客户端库
  2. 常规请求方式

API 客户端调用

  • 详情请查阅 client-libraries 或 api-client-libraries,如:python 的 kubernetes-client

常规请求方式

了解即可

  1. 创建 ServiceAccountRoleBinding
apiVersion: v1
kind: ServiceAccount
metadata:
  name: api-operator
  namespace: default

---
# 这里使用的是 ClusterRoleBinding,请根据实际需求创建 role 及绑定 sa
# kubectl create clusterrolebinding api-operator-admin --clusterrole=cluster-admin --serviceaccount=default:api-operator
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: api-operator-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: api-operator
    namespace: default
  1. 获取 Token 及证书
# 获取 secret 名称
SECRET_NAME=`kubectl get sa api-operator -o jsonpath='{.secrets[0].name}'`
# 获取 secret 中的 token 及证书并 base64 解码
TOKEN=`kubectl get secrets $SECRET_NAME -o jsonpath='{.data.token}' | base64 -d`
kubectl get secret ${SECRET_NAME} -o jsonpath="{.data.ca\.crt}" | base64 -d > api-operator-admin.crt
  1. 获取当前 K8s 集群的 api-server,有两种方式,如下:

    1. 直接查看 kube-config 文件
    2. 通过命令获取
    # 若集群存在多台 master 取任一一个即可
    API_SERVER=kubectl -n default get endpoints kubernetes --no-headers | awk '{print $2}' | cut -d "," -f 1
    
  2. 请求示例,更多 API 请查阅 kubernetes-api 文档

curl -s $API_SERVER/api/v1/namespaces/default/pods/ --header "Authorization: Bearer $TOKEN" --cacert api-operator-admin.crt'
  • 参考
    • kubernetes之使用 http rest api 访问集群

你可能感兴趣的:(Kubernetes api-server 调用)