微服务的开发模式下,联调和服务注册一旦涉及多个环境(开发/SIT/UAT),就会变得有些复杂。本文总结一下我们在此问题上尝试过的几个workaround,以及最终推荐的方案。
1. 背景
以下描述的案例中,将我们所拥有的服务精简为三个:
- um:用户微服务
- ent:企业微服务
- bi:BI微服务
ent会调用um;bi会调用ent和um。
网络环境分成办公网段和开发环境网段。办公网段可以访问开发环境网段,但开发环境网段无法访问办公网段。
三个微服务都被打包成镜像,以单副本Pod的形式部署在K8S云的开发环境节点上。
服务注册使用Nacos,网关路由使用的是Zuul。
2. 单环境内部请求流程
如果只考虑SIT环境,整个服务注册+请求的处理流程可以简单描述如下:
- um-sit服务(um的sit环境,下同)启动,将自己的service ip注册到Nacos服务端
- ent-sit服务启动,将自己的service ip注册到Nacos服务端
- 前端web对http://域名/api/ent-sit 的某个接口发起请求
- 通过K8S Ingress的域名映射,找到了Zuul应用
- Zuul向Nacos查询ent-sit的地址,得到ip:172.0.0.2。这个是ent-sit的service内部ip
- Zuul将请求转给ent-sit的service,Pod里的ent-sit容器中的应用接收到请求,开始处理
- ent-sit容器在处理过程中需要解析token,于是向Zuul请求um-sit
- Zuul向Nacos查询um-sit的地址,得到ip:172.0.0.1。这个是um-sit的service内部ip
- Zuul将请求转给um-sit。um处理完token,返回用户信息
- ent-sit处理结束,将结果返回给Zuul
- Zuul将结果转给前端web,流程结束