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路由,发现入口服务已经有按照分配的流量进行分配的趋势,但是并没有真正生效,也参照过之前的帖子,微服务治理的注解和网关路由配置应该都没有问题,但问题依旧没有解决。
感觉是不是因为某种原因失败回滚,还是有两个上层控制器是冲突的?还是我的步骤有什么错误,还请各位大佬指教。