不使用kubectl,如何依托.kubeconfig直接调用Kubernetes REST API
仅持.kubeconfig不用kubectl调用K8s REST API的认证方法
完全可以直接通过解析.kubeconfig的字段实现纯HTTP请求访问K8s APIServer,无需依赖kubectl,具体操作步骤如下:
前置步骤:从.kubeconfig提取必要信息
首先你需要从配置文件中提取三类核心信息:
- K8s APIServer的访问地址(对应
clusters.cluster.server字段) - 集群CA证书(对应
clusters.cluster.certificate-authority-data字段,base64编码格式) - 身份认证凭据,通常分为ServiceAccount Token、客户端证书对两类,少数场景为用户名密码
场景1:Token认证方式
如果你的.kubeconfig中users.user.token字段存在值,用这种方式:
- 解码CA证书并存为本地文件:
grep 'certificate-authority-data:' ~/.kube/config | awk '{print $2}' | base64 -d > ca.crt
- 提取Token和APIServer地址:
# 提取token K8S_TOKEN=$(grep 'token:' ~/.kube/config | awk '{print $2}') # 提取APIServer地址 K8S_APISERVER=$(grep 'server:' ~/.kube/config | awk '{print $2}')
- 发送curl请求:
# 校验证书的安全请求方式 curl --cacert ./ca.crt -H "Authorization: Bearer ${K8S_TOKEN}" ${K8S_APISERVER}/api/v1/pods # 测试场景下可跳过证书校验(不推荐生产使用) curl -k -H "Authorization: Bearer ${K8S_TOKEN}" ${K8S_APISERVER}/api/v1/pods
场景2:客户端证书认证方式
如果你的.kubeconfig中存在client-certificate-data和client-key-data字段,用这种方式:
- 解码所有需要的证书文件:
# 解码CA证书 grep 'certificate-authority-data:' ~/.kube/config | awk '{print $2}' | base64 -d > ca.crt # 解码客户端公钥 grep 'client-certificate-data:' ~/.kube/config | awk '{print $2}' | base64 -d > client.crt # 解码客户端私钥 grep 'client-key-data:' ~/.kube/config | awk '{print $2}' | base64 -d > client.key
- 提取APIServer地址后发送请求:
K8S_APISERVER=$(grep 'server:' ~/.kube/config | awk '{print $2}') curl --cacert ./ca.crt --cert ./client.crt --key ./client.key ${K8S_APISERVER}/api/v1/pods
注意事项
- 如果你的.kubeconfig使用的是动态认证(比如OIDC、云厂商临时凭据),提取的Token或证书有效期很短,需要定期重新提取更新凭据
- 如果你配置了多集群上下文,提取信息前需要先确认当前使用的上下文对应的集群和用户字段
内容的提问来源于stack exchange,提问作者collimarco
相关产品推荐
相关产品推荐

