• 微服务
  • istio 入口服务灰度发布不生效

istio灰度发布入口服务不生效

环境信息
Kubernetes 1.19 + Cilium 1.9.9 + KubeSphere 3.2.0

部署情况

​ 创建了一个单独的项目demo-project,并且开启了微服务治理NodePort类型的项目网关,使用样例部署了bookinfo应用,部署好后创建了ingress路由,在集群内curl路由生成的访问地址。

nginx.ingress.kubernetes.io/service-upstream=true注解也已经加入到ingress路由内

问题描述

​ 按照bookinfo样例测试reviews等非入口服务的金丝雀发布一切都正常,并且可以按照比例分配流量。

​ 但当对入口服务productpage进行金丝雀发布时,创建了新版本的productpage,并且接管100%的流量,但v1版本依旧可以接收到流量;按照比例分配流量,也没有按照预期实现,一直在不断飘动,时而生效,时而相反,时而飘忽不定。

  • 情景复现一

​ 创建了v3版本的productpage,让其中一个版本接管100%的流量,不改变流量分配比例,观察半个小时的流量走势。

​ 从图中趋势可以看到,当我让v1接管所有流量的时候,过了大概六七分钟才生效,但是没过多久就开始反复波动,甚至20分钟后流量分配直接相反持续很久,当我刚记录完这种情况,流量分配再次交叉。

​ 按比例流量分配亦是如此

  • 情景复现二

​ 当我发现这种后置服务生效但流量入口服务不生效情况后,又重新创建了一个新的test项目,部署了一个nginx服务,将项目网关和ingress路由都配置好后,再次在集群内curl路由生成的地址

​ 金丝雀部署的v2版本的nginx接管所有流量,跑十分钟情况

尝试和理解

​ 在一开始并没有通过kubesphere的网关去访问服务,直接访问的入口服务的NodePort,发现reviews类型的服务是可以正常灰度发布的,但是入口的productpage并不可以,而是几乎1:1的分配流量,应该是轮询调度。

​ 后来意识到可能是直接访问入口服务,可能没法接管入口的流量,也就没法控制,就开始尝试手动部署istio-gateway监听特定端口,再在istio-ingressgateway服务转NodePort端口到istio-gateway监听的端口形式,也没有生效。

​ 再后来开始尝试kubesphere的项目网关和ingress路由,发现入口服务已经有按照分配的流量进行分配的趋势,但是并没有真正生效,也参照过之前的帖子,微服务治理的注解和网关路由配置应该都没有问题,但问题依旧没有解决。

​ 感觉是不是因为某种原因失败回滚,还是有两个上层控制器是冲突的?还是我的步骤有什么错误,还请各位大佬指教。

    1764115099
    非常详细的反馈, 👍

    第一种情况,项目的网关是否开启了应用治理?
    第二种情况,你的服务端口是不是没有设置成 HTTP 的形式,这里识别成了TCP,你改成 HTTP 再试下

      Jeff 您用kubesphere创建项目部署这种服务,入口服务灰度发布是正常的吗,网关开启了链路追踪,ingress路由添加了 nginx.ingress.kubernetes.io/service-upstream=true 注解,http请求,访问也是用ingress路由生成的地址,不是用入口服务的nodeport端口访问的,sidecar也注入了,我能想到的都做了,我这样是有什么遗漏吗。

        1764115099 我测试下来都是正常的。 持续请求,2-3分钟后折线图就可以稳定在相应的比例了。

        2 个月 后

        我这也是 ,工作负载两个v1 v2我改成不通的首页测试的时候,发现金丝雀里根本没有流量!

        2 年 后