当http连接池遇到istio

背景:
最近再鼓捣公司微服务上service_mesh,在使用istio进行流量分发的过程中遇到了一个让人头疼的问题,流量分发并没有按照预期中的来,配置什么的也完全正确,百思不得其解。最终发现源头在于业务代码中使用的http连接池。

Istio配置:
说说istio配置,我们希望有三个环境,stage、gray和online。
stage:预发布,仅公司内部测试机使用,数据与线上联通。
gray:灰度小流量,预期承载1%的线上真实流量。
online:剩下的线上全部流量。

配置了2个subsets,具有特定请求头的流量走stage,否则根据规则分流到gray和online上

问题:
配置反复确认是没有问题的,并且使用了ingressgateway配置的外部dns来访问的话,是能够正确按照比重配比分流的。

原因:
经过反复的尝试和排查,最终确定问题所在,是业务代码中使用了连接池保持了tcp层的长链接,结果流量分发只作用在了第一次的链接建立的时候,随后的请求都直接作用在了长链接上,并没有经过istio的流量分发,从而导致最后观察到的流量分配不均。

解决:
思路是,一是业务代码取消使用连接池,使用http.DefaultClient即可,已验证可行。
二是可以考虑看看有没有istio什么地方可以通过配置来解决这个问题,正在探索中。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容