迁移Spring Cloud应用到OpenShift Service Mesh
前言
本文描述了如何将Spring Boot / Spring Cloud 应用迁移到OpenShift Service Mesh (Istio) 上。
环境:
- OpenShift 4.6
- Service Mesh 2.x (Istio 1.6.5)
微服务实现方式对比
下表对比了典型的Spring Cloud应用迁移到OpenShift ServiceMesh后实现微服务方式的区别:
分类 | SpringCloud | OpenShift ServiceMesh |
---|---|---|
服务配置 | Spring Cloud Config Server | ConfigMap, Secret |
服务注册与发现 | Eureka | Etcd + Service + 集群内DNS |
负载均衡 | Ribbon | Service, Istio的Envoy数据平面 |
服务间调用 | OpenFeign 或 RestTemplate | 任意HTTP client |
路由管理 | Zuul 或 Spring Cloud Gateway | Istio的VirtualService和DetinationRule |
对外API网关 | Zuul 或 Spring Cloud Gateway | Route,Istio的Ingress gateway和Egress gateway |
限流和熔断 | Hystrix | Istio的Envoy数据平面 |
服务跟踪和调用链 | Zipkin 或 OpenTracing + Jaeger | OpenTracing + Jager |
服务网络拓扑 | 无 | Kiali |
灰度发布和蓝绿部署 | 无 | Istio的Envoy数据平面 |
应用配置
应用改造
Spring Boot应用迁移到Istio,代码无需改动。
但是如果需要用OpenTracing Jaeger来做服务跟踪,则需要按照下面步骤配置。参见:
Spring Cloud应用迁移到Istio,需要将基于Spring Cloud Eureka的服务注册发现,改为基于OpenShift Service的的服务注册发现,否则无法使用Istio的traffic management功能。
OpenShift配置
将项目纳入Istio管理
以Cluster Admin登录,选择istio-system
项目,打开Operators / Installed Operators,找到Red Hat OpenShift Service Mesh,点击打开Istio Service Member Roll。
打开d