1、网关介绍
上篇对微服务中的nacos注册中心进行集成讲解。nacos主要作用是管理多服务之间复杂关系的组件。微服务是非常庞大且问题突出的架构,HTTP协议具有跨源资源共享 (CORS) Cross- Origin Resource Sharing机制,而处于安全考虑往往前端架构都会对跨域进行拦截,此时前端继续调用微服务中的其它任何一个服务都会被拦截无法访问。虽然可以通过配置的方式处理,但就会出现和微服务一样的问题,配置繁琐且不好管理。
此时需要gateway的介入将所有HTTP请求通过网关在网络层实现重打包转发的方式下发到对应的微服务接口上去。gateway统一管理所有微服务的访问入口,对于前端来讲只需要暴露网关服务的地址即可,同时网关还兼顾系统安全、认证、过滤、限流等控制策略。
2、项目集成网关
本文使用Spring版本:
SpringBoot:2.7.5;
Spring Cloud:2021.0.5;
Spring Cloud Alibaba:2021.1;
在上一篇创建的项目中继续创建子级工程gateway,添加网关依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
本文使用的配置文件为bootstrap方式,并未用到Spring默认的application配置,两者区别感兴趣可以问度娘。本项目使用认证中心接口演示网关的接口统一管理下发。
在gateway项目中主配置文件bootstrap.yml中配置网关服务:
spring:
application:
name: oto-gateway
profiles:
active: dev
在gateway项目中开发环境配置文件bootstrap-dev.yml中配置网关注册信息:
server:
port: 9999
spring:
cloud:
nacos:
# 注册中心
discovery:
server-addr: http://localhost:8848
# 共享的配置文件
config:
server-addr: http://localhost:8848
file-extension: yaml
shared-configs[0]:
data-id: oto-common.yaml
refresh: true
在nacos中还有一些网关有关的配置:
spring:
cloud:
gateway:
discovery:
locator:
enabled: true # 启用服务发现
lower-case-service-id: true
routes:
- id: 认证中心
uri: lb://oto-auth
predicates:
- Path=/oto-auth/**
filters:
- StripPrefix=1
在nacos中配置项目配置信息可以及时生效,所以基本不变的配置信息可以放在项目中配置,可能发生变动的通通放到nacos中去动态配置。
由于我们本篇主要讲解演示gateway,所以其它配置信息都被我干掉了,因为太多了怕影响大家阅读。配置文件中的内容啥意思,这里就不再一个一个讲了非常简单随便百度都有解释。
在网关启动类中添加nacos服务发现与注册注解:
@SpringBootApplication
@EnableDiscoveryClient
public class OtoGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(OtoGatewayApplication.class, args);
}
}
至此网关部分代码完成,超级简单。
我们启动的网关端口为9999,认证中心端口为8000。
现在我们可以打开postman来测试端口是否可以调用。
从测试结果来看我们直接访问认证中心localhost:8000/ras/publicKey,获取公钥的接口可以成功拿到公钥。接下来我们通过网关来获取公钥。
可以看到我们通过在nacos配置的网关转发地址为/oto-auth/**,通过访问localhost:9999/oto-auth/rsa/publicKey同样成功的获取到了公钥。证明网关配置成功。
本篇只演示讲解关于网关的集成和配置使用,等后续讲到认证中心的时候在认证中心讲网关的认证、鉴权功能。