1、k8s+istio+envoy GRPC级联调用,其中一个客户端提示这个错误(可以认为这个错误是HTTP版本问题造成的)

2、jaeger-query查看各服务间协议情况,发现出错的两服务间使用的是HTTP1.1,正常的服务间使用的是HTTP2.0

3、去掉envoy注入,一切正常,全部是HTTP2.0,基本认为是envoy相关的。

4、查看encoy配置:
istioctl ps cluster {pod-name}.{domain-name} --direction outbound --port xxxxx -o json
发现对端服务的type是EDS,实际上对端是stateful部署,访问方式是endpoint,endpoint方式istio不支持,必须是ORIGINAL_DST。

5、经检查,发现是服务端成了ClusterIP方式(应该是ClusterIP none才是对的)
对于ClusterIP方式部署的组件,coredns只生成service的解析,不能解析到endpoint

6、为什么会是通了,HTTP版本不对?
域名解析是在服务客户端POD里进行的(到coredns解析),可以解析到IP,但报文被envoy截取后,envoy不认识这种报文(envoy不支持endpoint,可能是因为http头里边域名带了pod名字,EDS的认为是匹配不到),所以走了默认协议,即HTTP1.1

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐