You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Kubernetes Python客户端中指定CA证书以通过HTTPS访问API

解决Kubernetes Python客户端SSL证书验证失败问题

我之前也碰到过一模一样的情况——用Python客户端连接使用自定义CA签发证书的K8s集群时,总是触发SSL证书验证失败的错误,一开始也困惑于部分API模块里有ca_bundle参数,但core_v1_api.pyapi_client.py里找不到对应的配置入口。后来摸索出两种可行的解决办法,分享给你:

方法一:通过kubeconfig文件配置CA证书

如果你习惯用config.load_kube_config()加载集群配置,问题大概率出在你的~/.kube/config文件里没明确指定CA证书路径。虽然kubectl能正常运行(可能它自动识别了系统里的CA证书),但Python客户端需要显式配置。

你只需要修改~/.kube/config,在clusters节点下添加certificate-authority字段,填入你的CA证书路径:

apiVersion: v1
clusters:
- cluster:
    api-version: v1
    certificate-authority: /path/to/ca_chain.crt  # 替换为你的CA证书实际路径
    server: "https://my-kubernetes-cluster"
# 其他配置内容保持不变...

修改完成后,再运行以下代码就能正常访问API了:

from kubernetes import client, config
config.load_kube_config()

# 测试调用API,示例:列出所有命名空间的Pod
v1 = client.CoreV1Api()
v1.list_pod_for_all_namespaces(watch=False)

方法二:手动构建Configuration对象(无需依赖kubeconfig文件)

如果不想依赖主机上的~/.kube/config文件,也可以直接在代码里手动构建配置,指定CA证书:

from kubernetes import client
from kubernetes.client import Configuration, ApiClient

# 初始化配置对象
config = Configuration()
config.host = 'https://my-kubernetes-cluster'  # 替换为你的集群API地址
# 若使用Token认证,配置api_key;如果是客户端证书认证,可调整为对应配置项
config.api_key = {'authorization': 'Bearer <your_api_token>'}
# 指定CA证书路径
config.ssl_ca_cert = "/path/to/ca_chain.crt"

# 创建ApiClient并初始化CoreV1Api实例
api_client = ApiClient(configuration=config)
v1 = client.CoreV1Api(api_client)

# 测试API调用
v1.list_pod_for_all_namespaces(watch=False)

这样配置后,Python客户端就会用你指定的CA证书来验证集群的SSL证书,顺利解决验证失败的问题。

内容的提问来源于stack exchange,提问作者zoidberg

火山引擎 最新活动