有个问题想请教下各位nacos大佬,我这边有两个微服务,service-a和service-b,都注册到nacos上,service-a通过resttemplate的方式请求service-b,service-b有两个版本,现在想基于istio实现对service-b的灰度发布。现在的做法是用istio拦截service-a向nacos server端获取service-b实例列表的接口请求,把接口响应中service-b的实例ip替换成service-b服务名,因为istio需要根据服务名做灰度发布,没办法按照实例ip做灰度发布,但发现一个问题
访问service-b的请求可以一段时间内只访问灰度版本,但过一段时间就又变成两个版本随机访问了,再过一段时间又可以只访问灰度版本了,如此循环往复
打开service-a的debug日志
发现切换的时间点,上面一条是期望的,发起的请求host是服务名,下面的一条是有问题的,发起的请求host是服务实例ip
对nacos及底层的机制不熟,是nacos哪里缓存问题,还是什么问题么?
你的问题看起来像是由于Nacos和Istio之间的交互导致的问题。Nacos通常根据实例IP来路由请求,而Istio则依赖于服务名称来进行流量控制。因此,在你拦截并更改Nacos的响应时,可能会导致不一致的行为。
一个可能的解决方案是在服务A和服务B之间直接使用服务名称而不是IP地址进行通信,然后在Istio中配置灰度发布策略。这将确保所有的流量都是由Istio处理的,从而避免了与Nacos的冲突。
然而,这种方法可能需要对你的应用程序进行一些修改,以适应使用服务名称而非IP地址。
还有另一种可能是,你在配置灰度发布的百分比时遇到了一些问题。如果你没有正确地设置这个值,那么你可能会看到流量在不同的版本之间交替变化。
你可以检查一下你的灰度发布策略,并确保它们被正确地配置和应用。同时,你也应该继续监控你的应用程序的日志,以找出可能导致这个问题的其他潜在原因。
这个问题看起来像是Istio的流量切换策略的问题。Istio默认的流量切换策略是基于百分比的比例分配,也就是说,它会根据配置的灰度比例,将请求分配到不同的版本。但是,如果请求的host是实例IP,那么Istio就无法正确地处理这种请求,因为它需要根据服务名来路由请求。
你可以尝试以下几种解决方案:
在Istio的配置中,将流量切换策略改为基于服务的灰度发布。这样,Istio就可以根据服务名来路由请求,而不会因为实例IP的变化导致请求路由错误。
在Nacos的配置中,将实例的host设置为服务名,而不是实例IP。这样,当请求到达Nacos时,Nacos就可以根据服务名来路由请求,而不会因为实例IP的变化导致请求路由错误。
在Service-A的配置中,将请求的host设置为服务名,而不是实例IP。这样,当请求到达Service-A时,Service-A就可以根据服务名来路由请求,而不会因为实例IP的变化导致请求路由错误。
没玩过istio的方式, 只玩过另一种改写LoadBalancer调用, 根据标记调用注册在nacos上不同标记的灰度服务。类似这种方式,
https://bbs.huaweicloud.com/blogs/360671
只是可以更加细分,不是简单的从网关直接分灰度,而是重写了nacos负载均衡策略。此回答整理自钉群“Nacos社区群4”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。