网关(API Gateway)

什么是网关(API Gateway)

在微服务架构里,服务被进一步的细粒化,各个服务都可以被独立的开发,设计,测试,管理。各个独立的单元可能被不同的开发者各种语言进行应用,这就要求必须使用一种语言和平 台无关的服务协议作为各个单元间的通讯方式。在这里插入图片描述

API网关的定义

网关就是保护,增强,控制api服务的访问。api网关是处于应用程序和服务之前的系统。这样REST API服务接口就被网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施

API网关的职能

1. 接入请求
作为所有API请求的接口
2.业务聚合
作为所有后台业务的聚合点
3.中介策略
实现安全,验证,路由,过滤,流控等策略
4.统一管理
对所有API服务和策略统一管理

Gateway是什么

Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
GateWay描述
(图片来自网络)

最重要的几个概念

路由、断言、过滤器
Route(路由)网关的基本构建模块。它由一个ID,一个URL,一组断言和一组过滤器定义。如果断言为真,则路由匹配。

Predicate(断言):输入一个类型是ServerWebExchange。我们可以用它来匹配HTTP里面的任何内容。

拦截器(filter):Gateway中的Filter分为两种Filter类型,分别是Gateway Filter 和Global Filter。过滤器Filter会将请求和响应进行修改处理。

网关请求方式
上述图片中,总结了常用网关的请求方式。那么如何配置:

匹配方式

  1. 通过时间匹配
spring:
  cloud:
    gateway:
      routes:
       - id: time_route
        uri: http://ityouknow.com
        predicates:
         - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]

Spring 是通过 ZonedDateTime 来对时间进行的对比,ZonedDateTime 是 Java 8 中日期时间功能里,用于表示带时区的日期与时间信息的类,ZonedDateTime 支持通过时区来设置时间,中国的时区是:Asia/Shanghai。

After Route Predicate 是指在这个时间之后的请求都转发到目标地址。上面的示例是指,请求时间在 2018 年 1 月 20 日 6 点 6 分 6 秒之后的所有请求都转发到地址http://ityouknow.com。+08:00是指时间和 UTC 时间相差八个小时,时间地区为Asia/Shanghai。

添加完路由规则之后,访问地址http://localhost:8080会自动转发到http://ityouknow.com。

2.通过请求路径匹配

spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: http://ityouknow.com
        predicates:
        - Path=/foo/{segment}

如果请求路径符合要求,则此路由将匹配,例如:/foo/1 或者 /foo/bar

3.通过请求 ip 地址进行匹配
Predicate 也支持通过设置某个 ip 区间号段的请求才会路由,RemoteAddr Route Predicate 接受 cidr 符号 (IPv4 或 IPv6) 字符串的列表(最小大小为 1),例如 192.168.0.1/16 (其中 192.168.0.1 是 IP 地址,16 是子网掩码)。

spring:
  cloud:
    gateway:
      routes:
      - id: remoteaddr_route
        uri: http://ityouknow.com
        predicates:
        - RemoteAddr=192.168.1.1/24

可以将此地址设置为本机的 ip 地址进行测试。

如果请求的远程地址是 192.168.1.10,则此路由将匹配。

当然也可以进行组合使用:

spring:
  cloud:
    gateway:
      routes:
       - id: host_foo_path_headers_to_httpbin
        uri: http://ityouknow.com
        predicates:
        - Host=**.foo.org
        - Path=/headers
        - Method=GET
        - Header=X-Request-Id, \d+
        - Query=foo, ba.
        - Query=baz
        - Cookie=chocolate, ch.p
        - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]

各种 Predicates 同时存在于同一个路由时,请求必须同时满足所有的条件才被这个路由匹配。

转载至:
Gateway网关简介及使用

侵删!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值