当我在AWS
负载均衡器后面尝试连接到Istio Gateway
时,我遇到了一个奇怪的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
入口的通用策略?
非常感谢您的帮助。
所以我找到了这个问题的答案。请求中的垃圾是在转移注意力。
关于设置的更多信息:
AWS负载均衡器正在终止TLS,因此它后面的所有流量都通过http端口31380。我已经通过istio-VirtualService设置传递了X-Forwarded-Proto: https
标头,因此后端应用程序可以假设流量已经终止TLS流量。
解决方案:
在我的案例中,问题是AWS目标组上设置了Proxy protocol v2: Enabled
。关闭它解决了问题。