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

Envoy Pod因TLS证书验证失败无法连接Contour求助排查

Contour/Envoy 入口流量中断排查方案(TLS证书验证失败)

针对日志中SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED错误,以下是具体排查步骤:

1. 检查Contour与Envoy通信的服务端证书

  • 定位Contour用于gRPC通信的TLS Secret(默认部署中通常为contour-tls),查看其状态:
    kubectl describe secret contour-tls -n projectcontour
    
  • 提取证书内容验证有效期与颁发信息:
    kubectl get secret contour-tls -n projectcontour -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout
    
    确认证书未过期,且颁发者与Envoy信任的CA一致。

2. 验证Envoy挂载的CA证书

  • 进入Envoy Pod,检查挂载的CA证书内容:
    kubectl exec -it <envoy-pod-name> -n projectcontour -- cat /etc/envoy/ssl/ca.crt | openssl x509 -text -noout
    
  • 对比该CA证书与Contour服务端证书的颁发者、指纹,确认两者匹配。
  • 检查Envoy Pod的VolumeMount配置,确保CA证书挂载路径正确,无路径错误或文件缺失。

3. 检查Contour的gRPC TLS配置

  • 查看Contour Deployment的启动参数,确认gRPC TLS证书路径配置正确:
    kubectl get deployment contour -n projectcontour -o jsonpath='{.spec.template.spec.containers[0].args}'
    
    验证--grpc-tls-cert-file和--grpc-tls-key-file指向的文件路径与Secret挂载路径一致。

4. 排查CRD更新期间的Secret变更

  • 查看通信证书Secret的更新时间,确认是否在CRD更新过程中被意外修改:
    kubectl get secret contour-tls -n projectcontour -o wide
    
  • 若使用cert-manager管理该通信证书,检查证书资源状态:
    kubectl get certificates -n projectcontour
    
    确保证书处于Ready状态,无签发失败记录。

5. 直接测试Envoy到Contour的TLS连接

  • 在Envoy Pod内使用openssl测试gRPC端口的TLS连接:
    kubectl exec -it <envoy-pod-name> -n projectcontour -- openssl s_client -connect contour:8001 -CAfile /etc/envoy/ssl/ca.crt
    
    根据输出判断具体失败原因(如证书不匹配、CA不信任、主机名验证失败等)。

6. 检查Contour Pod的证书加载状态

  • 查看Contour Pod日志,确认证书加载无错误:
    kubectl logs <contour-pod-name> -n projectcontour
    
  • 进入Contour Pod验证证书文件存在且权限正常:
    kubectl exec -it <contour-pod-name> -n projectcontour -- ls -l /var/lib/contour/certs
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:53:16