kubernetes - 使用 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 上的任何类似内容,我将不胜感激。
谢谢!
解决方案
因为TLS在您的ELB负载均衡器上终止,所以它们之间的连接应该是纯 HTTP。
该错误可能不是来自 Varnish,因为 Varnish 当前不原生处理 TLS。我不确定是否varnishlog
可以让您更好地了解实际发生的情况。
清单
我能给你的唯一清单如下:
- 确保您使用的证书有效
- 确保您通过 HTTP 而不是 HTTPS 连接到目标组
- 如果您在 ELB 上启用 PROXY 协议,请确保 Varnish在常规 HTTP 请求之上有一个
-a
侦听协议请求的侦听器。PROXY
调试
执行自顶向下调试:
- 增加cURL调用的详细程度并尝试获取有关错误的更多信息
- 尝试访问ELB的日志并在那里获取更多详细信息
- 从您的EKS日志中获取更多信息
- 最后,执行 a
varnislog -g request -q "ReqUrl eq '/your-url'"
以获取特定 URL 的完整 Varnishlog
推荐阅读
- node.js - fs.copyFile 和 child_process(cmd 复制方法)在文件被复制后挂起几分钟,可能是内存丢失?反应+电子
- spring - Spring存储库修改单独的日志记录
- r - 和加权瑞利分布
- mysql - 如何使用 Qt 上的 INSERT Query 修复 synthax 错误?
- python - 熊猫滚动在窗口中获得最频繁的值
- android - 由于代码问题,android-10.0.0_r10 的 AOSP 构建失败
- flutter - Flutter / 小部件放置问题 - 文本表单出现白屏
- python - Pandas 对值进行排序并在条件下忽略 NaN 值
- stripe-payments - 如何在 Stripe webhook 中获取产品信息(退款)
- python - Trying to understand what's happening over key=lambda x: (count[x], -x)?