当我在Istio Gateway负载均衡器后面尝试连接到AWS时,我得到了一个奇怪的400错误。
我在istio-ingresgateway日志中看不到任何活动(即使启用了调试设置),但是当我在ingressgateway pod上运行sysdig时,我看到了奇怪的半随机文本,其中经常包含"QUIT !T"。
当我尝试从集群外部通过浏览器或curl发出http请求时,会出现这种情况。
当我尝试在minikube或Azure中发出请求时,相同的Istio配置也可以工作。
我还可以使用相同的AWS lb指向Nginx入口控制器,它工作得很好。
sudo sysdig -s2000 -A -c echo_fds fd.ip=10.1.2.3有时输出中没有GET请求
------ Read 100B from 10.1.1.3:44404->10.1.2.3:80 (envoy)
QUIT
!T
C
ct>
------ Write 66B to 10.1.1.3:44404->10.1.2.3:80 (envoy)
HTTP/1.1 400 Bad Request
content-length: 0
connection: close而且,有时这恰好发生在GET请求之前
------ Read 3.39KB from 10.1.1.3:35430->10.1.2.3:80 (envoy)
QUIT
!T
C
atfI>GET /myapp/ HTTP/1.1我想知道是不是奇怪的字符导致envoy路由不匹配,但我不知道这可能是从哪里来的。
对于这可能是什么有什么建议吗?
有没有调试Istio入口的一般策略?
任何帮助都是非常感谢的。
发布于 2020-06-03 03:48:45
所以我找到了这个问题的答案。请求中的垃圾是一个无关紧要的问题。
有关设置的更多信息:
AWS负载均衡器正在终止TLS,因此它后面的所有流量都通过http端口31380。我已经通过istio设置传递了X-Forwarded-Proto: https报头,所以后端应用程序可以假定流量已经终止了VirtualService流量。
解决方案:
在我的案例中,问题是AWS Target Group设置了Proxy protocol v2: Enabled。关闭此功能解决了问题。
https://stackoverflow.com/questions/61419096
复制相似问题