我有一个轮廓/特使入口,如下所述: https://projectcontour.io/docs/v1.17.1/deploy-options/
我正在在此集群上更新一些 CRD 版本。在此维护期间,解决方案的所有入口都开始失败。具体来说。所有 Contour 豆荚均正常,但 Envoy 豆荚表示失败。我的应用程序的所有后端服务都很健康,所有公共认证均由证书管理器管理并且是最新的。
我在 Envoy Pod 日志中看到的具体错误是:
│ envoy [2024-07-24 18:22:15.456][1][warning][config] [./source/common/config/grpc_stream.h:201] StreamRuntime gRPC config stream to contour closed since 16 │
│ 682s ago: 14, upstream connect error or disconnect/reset before headers. reset reason: connection failure, transport failure reason: TLS error: 268435581: │
│ SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
此入口设置已运行一年多,没有出现任何问题。
我使用 k9s 来描述 Envoy 和 Contout pod。我使用的是 k8s (1.25)、Contour (1.24.4) 和 Envoy (1.25.6) 的兼容组合。
https://projectcontour.io/resources/compatibility-matrix/
我的所有公共证书都是最新且有效的,并且我在 Contour 级别使用 SSL/TLS 终止。我期待 Envoy 能够与 Contour 通信并开始接收流量。
我在凌晨想出了这个问题,并希望确保人们能够在网上找到答案。
我同时进行的更新可能会产生影响(例如,可能会在新版本的 Envoy 中强制进行 TLS 验证)。但根本问题是有两套证书:
您可以在官方文档中找到有关
envoycert
的更多信息:
https://projectcontour.io/docs/v1.17.1/grpc-tls-howto/
就我而言,虽然我设置了
cert-manager
来轮换面向公众的HTTPS流量证书,但后端envoycert
已过期。需要检查的是 cert
资源的年龄 - 在我的例子中它已经有一年多了。我使用以下命令备份了该证书:
kubectl get secret envoycert-appcorp -n flux-system -o jsonpath='{.data.tls\.crt}' > envoycert-appcorp.txt
然后我删除了证书并重新运行 Contour + Envoy 部署。这重新生成了证书,Envoy 立即表示工作正常。
事后看来,这似乎是显而易见的,但希望这可以帮助人们度过一个不眠之夜的调试。我不确定为什么这在 k8s 版本更新后才出现问题,但我推测受支持的 Envoy 版本中发生了一些变化。