您可以将Spring Cloud业务应用接入ASM,从而可以使用云原生化的服务治理能力,不需要业务做任何代码修改,即可管理Spring Cloud业务服务。本文介绍如何使用ASM管理Spring Cloud服务。
前提条件
- 已创建ASM实例。具体操作,请参见创建ASM实例。
- 已创建ACK集群。具体操作,请参见创建Kubernetes托管版集群。
- 添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
背景信息
Spring Cloud是一个标准,有不同的实现,比如Spring Cloud Netflix、Spring Cloud Alibaba、Spring Cloud
Consul 等。不同的Spring Cloud 实现对于ASM 来说核心区别主要在于采用了不同的服务发现,ASM 针对这些不同的Spring Cloud 版本迁移支持列表如下:
Spring Cloud版本 | 服务发现 | 迁移支持 (零代码修改) |
---|---|---|
Spring Cloud Alibaba | MSE Nacos (阿里云上产品) | 支持 |
Spring Cloud Alibaba | Nacos(自建) | 支持 |
Spring Cloud Netflix | Eureka | 暂不支持,建议采用Nacos注册中心 |
Spring Cloud Consul | Consul | 暂不支持,建议采用Nacos注册中心 |
Spring Cloud Zookeeper | Zookeeper | 暂不支持,建议采用Nacos注册中心 |
Demo介绍
本文部署的Spring Cloud服务可以通过此nacos-example下载。
Spring Cloud服务包含Consumer服务和Provider服务,其中Provider有v1和v2两个版本,并且都注册到Nacos注册中心。Consumer从Nacos注册中心同步Provider服务地址进行负载均衡发起请求,其中Consumer暴露一个8080端口,提供了一个echo接口,对应逻辑是将请求转发给Provider,并输出Provider返回的结果,不同的Provider版本返回结果不同:
- Provider v1版本收到echo请求会返回
Hello Nacos Discovery From v1xxx
。 - Provider v2版本收到echo请求会返回
Hello Nacos Discovery From v2xxx
。
其中返回结果中
.xxx
为echo接口对应的具体参数,例如请求/echo/world发送到Provider v1版本,则会返回Hello Nacos Discovery From v1world
。
步骤一:配置ServiceEntry和EnvoyFilter
您需要在ASM中配置ServiceEntry和EnvoyFilter,使ASM可以管理Spring Cloud服务。
- 通过kubectl连接ASM实例。
- 创建ServiceEntry。
- 创建EnvoyFilter。
步骤二:在ACK创建Spring Cloud服务
说明
- 因为需要拦截注册流程,EnvoyFilter需要先于业务工作负载Deployment之前创建。若某些业务Deployment先于EnvoyFilter创建,您需要滚动更新该业务Deployment。
- 业务服务需要创建Kubernetes Service资源,并且需要有Cluster IP。
步骤三:创建网关规则和虚拟服务
- 通过kubectl连接ASM实例。
- 创建网关规则。
- 创建虚拟服务。
步骤四:验证ASM是否管理Spring Cloud服务成功
FAQ
为什么我参照该文档,自己部署的SpringCloud业务服务不生效呢?
- 请检查是否开启了针对Nacos端口或者IP的流量拦截
- 因为需要拦截注册流程,EnvoyFilter需要先于业务工作负载Deployment之前创建。若某些业务Deployment先于EnvoyFilter创建,您需要滚动更新该业务Deployment。
- 请检查业务服务是否创建了Kubernetes Service资源,并且Type类型为Cluster IP。
- Nacos Client SDK版本需低于2.0版本,因为Nacos 2.0+ Client SDK 采用GRPC和服务端建立,当前方案不适用。