为什么我的 Envoy Pod 失败并显示“重置原因:连接失败,传输失败原因:TLS 错误”

问题描述 投票:0回答:1

我有一个轮廓/特使入口,如下所述: 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 通信并开始接收流量。

kubernetes contour envoyproxy
1个回答
0
投票

我在凌晨想出了这个问题,并希望确保人们能够在网上找到答案。

我同时进行的更新可能会产生影响(例如,可能会在新版本的 Envoy 中强制进行 TLS 验证)。但根本问题是有两套证书:

  • Contour 终止的面向公众的 TLS 流量证书
  • envoy 使用的内部 Envoy 证书

您可以在官方文档中找到有关

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 版本中发生了一些变化。

© www.soinside.com 2019 - 2024. All rights reserved.