首页 > 解决方案 > 使用 varnish 从 EKS 中寻找有关 SSL 错误的调试建议

问题描述

我知道这是一个特定的问题,但我遇到了一个我似乎无法追踪的问题。我有一个部署到 EKS 的 pod - 该 pod 包含一个 python 应用程序和一个清漆反向缓存代理。我正在提供分块 json(即 json 的流式传输线,例如http://jsonlines.org/),它可以是多 GB 的数据。

我第一次发出请求时,它到达了 python 服务器,一切正常。它比缓存版本需要(多)长的时间,但是会下载整组 json 行。但是,现在它缓存在清漆中,如果我使用 curl,我会得到:

curl: (56) GnuTLS recv error (-110): The TLS connection was non-properly terminated.

或者

curl: (56) GnuTLS recv error (-9): A TLS packet with unexpected length was received.

SSL 在 ELB 处终止,当我从代理容器本身使用 curl 时(使用curl http://localhost?....),没有问题。

困难的部分是这个问题有点间歇性。

如果有任何关于巧妙varnishlog使用的建议,或者 AWS 上的任何类似内容,我将不胜感激。

谢谢!

标签: kubernetesvarnishamazon-eks

解决方案


因为TLS在您的ELB负载均衡器上终止,所以它们之间的连接应该是纯 HTTP。

该错误可能不是来自 Varnish,因为 Varnish 当前不原生处理 TLS。我不确定是否varnishlog可以让您更好地了解实际发生的情况。

清单

我能给你的唯一清单如下:

  • 确保您使用的证书有效
  • 确保您通过 HTTP 而不是 HTTPS 连接到目标组
  • 如果您在 ELB 上启用 PROXY 协议,请确保 Varnish在常规 HTTP 请求之上有一个-a侦听协议请求的侦听器。PROXY

调试

执行自顶向下调试:

  • 增加cURL调用的详细程度并尝试获取有关错误的更多信息
  • 尝试访问ELB的日志并在那里获取更多详细信息
  • 从您的EKS日志中获取更多信息
  • 最后,执行 avarnislog -g request -q "ReqUrl eq '/your-url'"以获取特定 URL 的完整 Varnishlog

推荐阅读