You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Python Kopf Operator至K8s集群时遇SSL证书验证失败求助

Kopf Operator部署K8s集群时SSL证书验证错误的解决办法

问题说明

部署Python Kopf Operator到K8s集群时,调用Kubernetes API发起GET请求出现SSL证书验证失败,错误提示无法获取颁发者证书,此前在Minikube环境可正常运行。

解决方案

1. 注入集群CA证书到Operator信任链

集群环境的K8s API证书通常由自定义CA颁发,而Kopf默认依赖容器内系统CA证书池。可通过挂载K8s集群的kube-root-ca.crt证书到Operator容器的信任目录:

  • K8s会自动为每个Service Account挂载该证书到路径/var/run/secrets/kubernetes.io/serviceaccount/ca.crt,确保Operator的Deployment配置中正确挂载了该路径;
  • 若需手动挂载,可在Deployment的Volume配置中添加:
    volumes:
      - name: kube-ca
        secret:
          secretName: kube-root-ca.crt
    volumeMounts:
      - name: kube-ca
        mountPath: /etc/ssl/certs/kube-ca.crt
        subPath: ca.crt
    

2. 配置Kopf的SSL验证参数

在Operator代码中通过Kopf的启动配置指定CA证书路径,或临时禁用验证(仅测试环境使用):

  • 指定CA证书路径(生产环境推荐):
    import kopf
    
    @kopf.on.startup()
    def configure(settings: kopf.OperatorSettings, **_):
        settings.networking.ssl_ca_cert = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
    
  • 禁用SSL验证(仅测试用,存在安全风险):
    import kopf
    
    @kopf.on.startup()
    def configure(settings: kopf.OperatorSettings, **_):
        settings.networking.verify_ssl = False
    

3. 检查Service Account配置

确保Operator使用的Service Account拥有访问K8s API的权限,且集群已自动为其挂载kube-root-ca.crt证书。若未自动挂载,需手动添加Volume配置。

4. 环境差异排查

Minikube的自签名CA证书默认被容器信任链包含,而目标集群的自定义CA证书不在默认信任池中,这是导致环境差异的核心原因,需通过上述配置补全信任链。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:15:13