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

求助:Kubernetes部署的Sentry出现SSL证书验证失败(urlopen错误)

解决Sentry在Kubernetes中发送错误时的SSL证书验证失败问题

首先得明确,这个问题大概率是Python 2.7.15的信任证书池里没有包含Let's Encrypt的根证书(ISRG Root X1),或者Sentry容器的证书加载路径不对导致的。下面给你几个逐步排查和解决的方案,都是安全合规的,不用关闭TLS验证:

1. 更新或补充Python certifi的信任证书

Python 2.7.15默认的certifi版本可能比较旧,没包含Let's Encrypt的最新根证书。你可以这么做:

  • 先在Sentry容器里查看certifi的证书文件路径:
    python -c "import certifi; print(certifi.where())"
    
  • 升级到Python 2.7支持的最新certifi版本(最后兼容版本是2021.10.8):
    pip install --upgrade certifi==2021.10.8
    
  • 如果升级后还是不行,手动把ISRG Root X1根证书追加到certifi的证书文件里:
    1. 先从你的目标域名(example.host.com)导出根证书:
      openssl s_client -showcerts -connect example.host.com:443 < /dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > isrg-root-x1.pem
      
    2. 把证书追加到certifi的信任池:
      cat isrg-root-x1.pem >> $(python -c "import certifi; print(certifi.where())")
      

2. 配置Sentry容器使用系统级证书存储

有时候Python会优先读取系统的CA证书,而不是certifi的。你可以让Sentry容器加载cert-manager生成的证书根CA到系统信任池:

  • 修改Sentry的Kubernetes Deployment配置,挂载cert-manager生成的证书Secret到容器的证书目录,并更新系统证书:
    containers:
    - name: sentry-web
      image: getsentry/sentry:你的版本号
      volumeMounts:
      - name: sentry-ca-cert
        mountPath: /usr/local/share/ca-certificates/isrg-root-x1.crt
        subPath: ca.crt
      command:
      - /bin/sh
      - -c
      - update-ca-certificates && exec /docker-entrypoint.sh run web
    volumes:
    - name: sentry-ca-cert
      secret:
        secretName: example-host-com-tls  # 替换成你的cert-manager生成的Secret名称
        items:
        - key: ca.crt
          path: ca.crt
    
  • 然后设置Python环境变量,让它使用系统证书:
    在Deployment的env字段里添加:
    env:
    - name: REQUESTS_CA_BUNDLE
      value: /etc/ssl/certs/ca-certificates.crt
    
    这个变量会让urllib2、requests等库优先读取系统的证书链。

3. 验证证书链完整性

先确认你的cert-manager生成的证书链是完整的:

  • 在容器里执行以下命令检查证书链:
    openssl s_client -connect example.host.com:443 -servername example.host.com
    
    看输出里的Verify return code是否为0 (ok)。如果不是,说明cert-manager的Issuer/ClusterIssuer配置可能有问题,要确保你用的是Let's Encrypt的生产端点(https://acme-v02.api.letsencrypt.org/directory),并且生成的Secret里包含完整的ca.crt文件。

4. 修复Python 2.7的SNI支持问题

Python 2.7对SNI(Server Name Indication)的原生支持有限,这也可能导致证书验证失败。你可以安装几个增强包来解决:

pip install pyopenssl ndg-httpsclient pyasn1

这些包会替换Python的原生SSL模块,让它更好地支持SNI,避免因为域名匹配问题导致证书验证失败。

按照上面的步骤一步步来,应该能解决证书验证的问题,同时保持TLS验证的安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:32:06