系统解决方案

gateway网关 Gateway网关

小编 2024-10-05 系统解决方案 23 0

Gateway网关

一、Gateway简介

网关,在微服务架构中,主要用来路由,增强和控制对服务的访问,同时也具备负载均衡、流量控制、访问控制等能力,SpringCloud Gateway是Spring官方基于Spring5.0、SpringBoot2.0等技术开发的网关,SpringCloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。

第二代网关技术和SpringCloud配合更紧密,之前的网关技术是zuul

底层Netty(网络框架,封装了NIO)性能更好,多路复用

路由过滤器合理的API设计,功能更加强大

二、为什么使用网关

目前项目的问题:

微服务外部调用微服务集群里面的内容时,遇到问题,服务太多,需要记住所有的服务的地址

一个服务有很多台机器,需要做负载均衡,浏览器显然不能做这件事情

无法对请求进行统一的统计和过滤

网关就可以解决这些问题

微服务网关封装了应用程序的内部结构,客户端只需要跟网关交互,而无需直接调用特定微服务

方便监控,所有的请求都可以先请求网关,方便了对请求的管理和监控

统一过滤处理,方便管理

可以做负载均衡

三、Gateway使用

创建一个服务(coding-gateway),并注册到注册中心

引入gateway网关依赖

XML<!--引入gateway网关依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

注意:不能导入SpringBoot Web的依赖spring-boot-start-web

网关配置

Properties#路由的id 可以认为是当前路由规则的名字 要求唯一性spring.cloud.gateway.routes[0].id=product_route#匹配后的路由地址 【目标服务地址】spring.cloud.gateway.routes[0].uri=http://localhost:8080#断言 也就是匹配规则spring.cloud.gateway.routes[0].predicates[0]=Path=/coding-product/**#路由的id 可以认为是当前路由规则的名字 要求唯一性spring.cloud.gateway.routes[1].id=order_route#匹配后的路由地址 【目标服务地址】spring.cloud.gateway.routes[1].uri=http://localhost:8090#断言 也就是匹配规则spring.cloud.gateway.routes[1].predicates[0]=Path=/coding-order/**server.port=8001

启动项目测试

http://localhost:网关服务端口/coding-product/products

四、路径重写

后台接口:http://localhost:8001/coding-order/order,如果前端调用时,地址为http://localhost:8001/api/coding-order/order,那么我们需要对路径进行重写

方式一

Properties#路由的id 可以认为是当前路由规则的名字 要求唯一性spring.cloud.gateway.routes[1].id=order_route#匹配后的路由地址 【目标服务地址】spring.cloud.gateway.routes[1].uri=http://localhost:8090#断言 也就是匹配规则# 1、添加上apispring.cloud.gateway.routes[1].predicates[0]=Path=/api/coding-order/**# 2、对路径进行重写,把/api/coding-order重写成/coding-orderspring.cloud.gateway.routes[1].filters[0]=RewritePath=/api/coding-order(?<segment>/?.*),/coding-order/$\{segment}server.port=8001

YAMLspring:cloud:gateway:routes:- id: order_routeuri: http://localhost:8090predicates:- Path=/api/coding-order/**filters:- RewritePath=/api/coding-order(?<segment>/?.*),/coding-order/$\{segment}

方式二

YAMLspring:cloud:gateway:routes:- id: order_routeuri: http://localhost:8090predicates:- Path=/api/coding-order/**filters:# - RewritePath=/api/coding-order(?<segment>/?.*),/coding-order/$\{segment}# 去除Path中前两个路径- StripPrefix=2# Path中路径换成/coding-order- PrefixPath=/coding-orderserver:port: 8001

五、动态路径(负载均衡)

Gateway能够以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能

配置【以订单服务为例】

YAMLspring:cloud:gateway:routes:- id: order_route# uri: http://localhost:8090uri: lb://coding-orderpredicates:- Path=/api/coding-order/**filters:# - RewritePath=/api/coding-order(?<segment>/?.*),/coding-order/$\{segment}- StripPrefix=2- PrefixPath=/coding-order- id: product_routeuri: lb://coding-productpredicates:- Path=/coding-product/**server:port: 8001

测试

同时开启两个订单服务,重复请求,查询是否访问的不是同一个

订单服务控制器

Java@RestController()public class OrderController {@Value("${server.port}")private Integer port;@GetMapping("/order")public String getOrder(){return "订单服务测试..."+port;}}

六、处理跨域问题

YAMLspring:cloud:gateway:globalcors:corsConfigurations:'[/**]':allowedHeaders: "*"allowedOrigins: "*"allowCredentials: trueallowedMethods:- GET- POST- DELETE- PUT- PATCH- OPTIONserver:port: 8001

七、自定义过滤器(GlobalFilter)

案例:判断请求中是否携带token

Java@Componentpublic class MyGlobalFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//某个参数 对不对String username = exchange.getRequest().getQueryParams().getFirst("username");if (username==null) {//拦截// 设置响应状态码exchange.getResponse().setStatusCode(HttpStatus.MULTI_STATUS );return exchange.getResponse().setComplete();}//放行return chain.filter(exchange);}@Overridepublic int getOrder() {return 0; // 多个Filter中,数值越小越先执行}}

一文讲清楚什么是网关、DNS、子网掩码、MAC地址

上次我们发布了局域网ip地址不够用怎么解决?很多朋友多次问到什么是网关、dns、子网掩码,它有什么作用,确实,我们平时在网络中总是在不断的提到网关,却很少真正的去了解它。

例:

一、什么是网关

一、什么是网关

网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。

二、如何来理解网关

大家都知道,从一个房间走到另一个房间,必然要经过一扇门 。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口 ”。

按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是最常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关。

三、网关的ip地址

那么网关到底是什么呢?

网关实质上是一个网络通向其他网络的IP地址,网关在网段内的可用ip中选一个 ,不过,一般用的是第1个和最后一个

例如

比如有网络A和网络B,

网络A: 的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩255.255.255.0;

如果需要与其它网段通信,那么它的网关可以设置为192.168.1.1,当然也可以设置为网段内 其它的一个ip地址。

网络B: 的IP地址范为“192.168.2.1~192.168.2.254”,子网掩码255.255.255.0。

如果需要与其它网段通信,那么它的网关可以设置为192.168.2.1,当然也可以设置为网段内 其它的一个ip地址。

四、网关是如何实现通信?

在没有路由器 的情况下,不同的两个网络之间是不能 进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关

如果网络A 中的主机发现数据包 的目的主机不在 本地网络中,就把数据包转发给它自己的网关 ,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络B向网络A转发数据包的过程。

所以说,只有设置好网关的IP地址 ,TCP/IP协议才能实现不同网络之间的相互通信。

五、什么是默认网关?

如果搞清了什么是网关,默认网关也就好理解了。就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关 的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关 ,由这个网关来处理数据包。现在主机 使用的网关,一般指的是默认网关。

二、什么是DNS

DNS是域名解析服务器(Domain Name System),是把网址变成IP地址的服务器。

DNS说白了是把域名翻译成IP地址用的,这里面举个例子 ,大家就很容易清楚了。

例如我们在浏览器里面输入www.baidu.com的时候,机器要跟百度这个网站进行通信 ,机器要往外面发送 数据包,数据包里面要写百度这台服务器的IP地址 ,我们不知道IP地址是多少,那么就需要主机问DNS服务器 ,DNS服务器就自动帮我们把www.baidu.com这个域名翻译成 了IP地址61.135.169.105。然后写到了数据包的目的IP地址里面就可以进行通信。

就跟我们写信一样,你得写个收信人的地址 邮局才能给你发送吧,你给国外写信,你写中文地址邮局不认识,需要这个一个人帮你翻译成英语。这就是DNS的作用,所以你的在本地连接里面写DNS才可以正常浏览网页,如果不设置DNS,是无法正常访问网页的。

三、MAC地址

讲到MAC地址,就不得不提ip地址,这里顺便把ip地址也说下。

IP与MAC

虽然现在已经ipv6了,但我们基本用的大多数还是ipv4协议,所谓ip就是你电脑整个网络的编号 。其他电脑想访问电脑就得需要这个编号。但是这个编号很多情况下是一直在变化 的。唯一不变的是你的MAC地址:物理地址

MAC是网络中用来标识网卡设备的唯一网络地址。由相关硬件制造商统一分配,每台电脑的MAC地址都是唯一 的。

做个比喻,你经常搬家,你没搬一次家都有一个地址,XX小区XX单元XX号,这个就是IP。但是你的名字不变,这个就是MAC,不同的是我们的MAC不允许重名。

我们的IP分为两个部分: 如上图分为网络部分主机部分 。 网络部分好比就是你在XX省XX市XX镇,这个是国家固定下来了的。但是XX小区XX单元XX号是开发商自己定的。两个编号加起来 就是你的ip了。 不同的是在现实中两个编号的长度是固定的,在网络上A、B、C、D的ip地址却是变化的,这个在前天有详细讲到。

四、子网掩码

子网掩码是为了区分网络位和主机位,上面我们说到过,一个ip地址是由网络部分主机部分。 正如一个人的名字由姓与名组成。

那么我们可以把IP地址比作一个人的名字,那么子网掩码就像是一份名单,可以快速的知道那些人同姓,那些人不同姓,把同姓的人分在一组,让他们之前可以互相交流。

举个例子

有一个网段 是192.168.1.0-192.1.254,这个网段就像一个村子一样,就称它为安防村 ,此这网段有个ip地址是192.168.1.1,我们就叫他安防一,另外一个人叫安防二,它的ip地址为192.168.1.2,我们一看他们,就知道他们是同村的。

另外有一个网段, 是192.168.0.0——192.168.255.254,我们叫它安村 ,村里有个同样有两个ip地址192.168.1.1与192.168.1.2,也叫安防一,安防二,那么问题来了?这个时候,如何区分他们是属于那个村的?

这个时候就需要子网掩码 了来判断他们是属于那个网段的,需要把安防一、安防二带到村里去认下,就知道他们是属于那个村了,安防村 的网段是255.255.255.0,安村 的网段是255.255.0.0。

网络中也会出现类似于“同名”“同姓”的ip地址,如何区分他们到底是属于那个网段,就需要依靠子网掩码了。

相关问答

什么叫 网关 和子网掩码?

1、网关(Gateway),将两个使用不同协议的网络段连接在一起的设备。(1)它的作用就是对两个网络段中的使用不同传输协议的数据进行互相的翻译转换。(2)举个例...

路由器与 网关 的区别?

一、概念上的区别:交换机为电(光)信号转发的网络设备,路由器(Router)则是一种计算机网络设备(路由器不能处理光信号源),而网关则为连接两个网络的设备,...一...

何为 网关 WIFI?

网关WiFi是光猫和WiFi的结合体,不仅可以单独使用,也可搭配路由器使用,具有更强的功能性。网关WiFi虽然可充当无线路由器使用,但是其对同时上网的终端设备...

网关 是多少?

网关是一种连接不同网络的设备或软件,它可以将来自一个网络的数据转发到另一个网络,同时可以对数据进行转换、过滤、加密等操作。网关在计算机网络中起着重要...

ip子网掩码和 网关 的区别?

1、子网掩码(subnetmask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码...

wifi 网关 入口?

WiFi网关入口是指使用无线网络连接设备连接互联网的门户。通常,WiFi网关入口是一个路由器或者调制解调器,它们充当设备和Internet之间的桥梁,将无线信号转化为...

WIFI 网关 什么意思?

WIFI网关又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连...

网关 有什么用?

网关(Gateway)是计算机网络体系结构中的一个重要组件,位于两个或多个网络之间,用来连接和传递数据。网关具有以下几个主要的功能和用途:1.数据转发与路由...

网关 怎么填?

第一项:IP地址IP地址通常是自己自由指定的,但是也有严格的限制IP地址需要和网关在同一个IP段,例如:默认网关为192.168.1.1那么IP地址就需要填写192.168.1...

网关 与防火墙的区别?

防病毒网关是网络协议的数据防范层面,防火墙系统是应用软件的防护层面。2.一般认为防病毒网关包括以病毒扫描为首要的代理服务器;以及需要与防火墙配合使用...

猜你喜欢