一、网关
在微服务框架中,网关是一个提供统一访问地址的组件,它充当了客户端和内部微服务之间的中介。网关主要负责流量路由和转发,将外部请求引导到相应的微服务实例上,同时提供一些功能,如身份认证、授权、限流、监控、日志记录等。
二、网关作用
- 路由功能:网关可以根据目标地址的不同,选择最佳的路径将数据包从源网络路由到目标网络。它通过维护路由表来确定数据包的转发方向,并选择最优的路径。
- 安全控制:网关可以实施网络安全策略,对进出的数据包进行检查和过滤。它可以验证和授权来自源网络的数据包,并阻止未经授权的访问。防火墙是一种常见的网关设备,用于过滤和保护网络免受恶意攻击和未经授权的访问。
- 协议转换:不同网络使用不同的通信协议,网关可以进行协议转换,使得不同网络的设备可以互相通信。例如:将HTTPS 协议转换成 HTTP 协议。
- 网络地址转换(NAT):网关可以执行网络地址转换,将内部网络使用的私有 IP 地址转换为外部网络使用的公共 IP 地址,以实现多台计算机共享一个公共 IP 地址上网
三、Spring Cloud Gateway 组成
- 路由:定义了请求应该被转发到哪个目标地址。路由由 ID、目标 URI 、断言、和过滤器组成。通过配置多个路由,可以实现不同请求的路由规则。
- 断言:用于匹配请求条件,如果请求匹配断言条件,则会被映射到对应目标地址上。断言可以基于请求的路径、请求头、请求参数等信息进行匹配。
- 过滤器:用于在请求路由前或路由后进行一些处理,如添加头部信息、修改请求体等。过滤器可以在全局范围或特定路由范围内配置,多个路由器可以组成过滤器链。
四、Spring Cloud Gateway 的使用
使用步骤如下:
1. 添加 Gateway 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2. 设置网关路由规则
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://192.168.146.1:8082 #映射的ip和端口
predicates:
- Path=/user/**,/log/** #当请求路径满足配置的path时,将ip和端口映射到上面的uri
五、断言(Predicate)类型
Spring Cloud Gateway 支持的断言类型目前有 12 中, 包含以下这些:
1. 根据时间匹配:
- After: 请求在指定时间之后才匹配
- Before:请求在指定时间之前才匹配
- Between:请求在指定时间中间才匹配
2. Cookie:匹配求中的Cookie值
3. Header:匹配请求中的 Header 值
4. Host:匹配请求中的 Host 值
5. Method:匹配请求头中的 Method 的值
6. Path:匹配请求路径
7. Query:匹配请求参数
8. RemoteAddr:匹配请求的 IP 地址,支持 IPV4 和 IPV6
9. Weight:根据权重来分发请求,权重根据 group 来计算
10. XForwardedRemoteAddr:根据 X-Forwarded-For 匹配
5.1 根据时间匹配
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://192.168.146.1:8082
predicates:
- Path=/user/**,/log/**
- Before=2024-07-15T19:00:00.000+08:00[Asia/Shanghai] #上海时间2024-7-15 19点前允许访问
between
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://192.168.146.1:8082
predicates:
- Path=/user/**,/log/**
- Between=2024-07-13T19:00:00.000+08:00[Asia/Shanghai],2024-07-15T19:00:00.000+08:00[Asi