如何直接从节点访问 Kubernetes API

How to access Kubernetes API from node directly

如何从 Kubernetes 节点访问 API 服务器,如何找到 API 端点并处理身份验证?顺便说一句,它是一个Windows节点。

我很惊讶在 Internet 上找不到太多关于此的信息,直接从节点访问 Kubernetes API 是一个糟糕的设计吗?

“来自节点”听起来像是一个边缘用例,例如插件,通常使用在节点附加期间部署的“admin.conf”文件来覆盖,该文件包含您需要连接到的任何内容api 服务器。

一种更常用的方法是将您的工作负载部署在一个 Pod 中,该 Pod 中的服务帐户将具有适当的角色绑定以访问 API 服务器。

如何从节点直接访问 Kubernetes API?

  • 有多种方式,其中一种方式来自主节点
# Get API Server URL:
kubectl cluster-info

#access it using the curl 
curl https://<api serverIP>:6443/api/v1/nodes  --cacert /etc/srv/kubernetes/pki/ca-certificates.crt   --cert /var/lib/kubelet/pki/kubelet-client.crt   --key /var/lib/kubelet/pki/kubelet-client.key

如何找到 API 端点并处理身份验证?

  • 我使用的一种技术是将 --v=11 与 kubectl 命令一起使用,它将提供 kubernetes 资源的端点
#example :
 kubectl get pods --v=11 2>&1 | grep GET
I1229 10:20:41.098241   42907 round_trippers.go:423] curl -k -v -XGET  -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.19.4 (linux/amd64) kubernetes/d360454" 'https://10.157.160.165:6443/api/v1/namespaces/default/pods?limit=500'
I1229 10:20:41.116964   42907 round_trippers.go:443] GET https://<apiserver>:6443/api/v1/namespaces/default/pods?limit=500 200 OK in 18 milliseconds

顺便说一下是一个Windows节点

  • 理想情况下,上述步骤应该有效,可能您需要找出 grep 和 curl 的等效命令。将证书的位置更改为适当的位置。您可以从 admin.conf 文件中找到证书的位置。