Zuul

Zuul上实现限流(spring-cloud-zuul-ratelimit)

只愿长相守 提交于 2020-05-03 20:32:02
简述 Spring Cloud Zuul RateLimit项目Github地址: https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit 该包实现了在Zuul对每个服务进行限流。提供的几种限流方式: 1. 认证用户(Authenticated User) 使用已认证的用户名(username)或'anonymous' 2. 原始请求(Request Origin) 使用用户的原始请求 3. URL 使用上游请求的地址 4. 针对每个服务的全局配置 该方式不会验证Request Origin,Authenticated User或URL 使用该方式只需不设置‘type’参数即可 使用方式 pom.xml增加依赖: <dependency> <groupId>com.marcosbarbero.cloud</groupId> <artifactId>spring-cloud-zuul-ratelimit</artifactId> <version>1.3.2.RELEASE</version> </dependency> 配置示例: zuul: ratelimit: key-prefix: your-prefix #对应用来标识请求的key的前缀 enabled: true repository: REDIS

Service Mesh 和 API Gateway 关系深度探讨

半世苍凉 提交于 2020-04-30 11:42:32
前言 关于 Service Mesh 和 API Gateway 之间的关系,这个问题过去两年间经常被问起,社区也有不少文章和资料给出解答。其中不乏 Christian Posta 这样的网红给出过深度介绍。我在这里做一个资料的整理和汇总,结合个人的理解给出一些看法。另外在本文最后,介绍蚂蚁金服在 Service Mesh 和 API Gateway 融合的这个最新领域的一些开创性的实践和探索,希望给大家一个更有体感的认知。 备注1:为了节约篇幅,我们将直奔主题,假定读者对 Service Mesh 和 API Gateway 已有基本的了解。 备注2: 这边文章更关注于梳理整个脉络,内容不会展开的特别细,尤其是其他文章已经详细阐述的部分。如果您在浏览本文之后,还想更深入的了解细节,请继续阅读文章最后的参考资料和推荐阅读。 原本清晰的界限:定位和职责 首先,Service Mesh 和 API Gateway 在功能定位和承担的职责上有非常清晰的界限: Service Mesh:微服务的网络通信基础设施,负责(系统内部的)服务间的通讯; API Gateway: 负责将服务以 API 的形式暴露(给系统外部),以实现业务功能; 如上图所示: 从功能和职责上说: 位于最底层的是拆分好的原子微服务,以服务的形式提供各种能力; 在原子微服务上是(可选的)组合服务

API网关

回眸只為那壹抹淺笑 提交于 2020-04-29 14:21:23
API网关一般伴随着微服务架构出现,不同的微服务一般会有不同的网络地址,特别是每个微服务还会部署多份服务实例,外部客户端如果调用时一是如果需要三个微服务组合才能完成一次调用,客户端需要知道这三个微服务的地址,端口号等.有可能会出现如下问题: 客户端多次请求不同的微服务,增加了客户端的复杂性 存在跨域请求,在某些场景下处理相对复杂 认证复杂及重复,每个微服务都需要独立认证 重构困难,随着项目的迭代和产品的发展,可能需要重新划分微服务,如将多个微服务合并为一个或将一个微服务分拆为多个,此时客户端调用微服务时成本又会增加 有一些微服务可能放置于防火墙后或其他访问限制,直接访问会不可达 所以出现了API网关,它是介于客户端和服务端之间的桥梁,所有外部请求都会先给过网关层再路由到相应的微服务进行处理,根据这一特性我们一般会在网关层用来处理安全,性能,监控等通用的功能等,而不会用来处理业务逻辑. 网关的优势及选型 易于监控,认证 减少客户端与各个微服务之间的交互,直接和网关交互 网关技术选型 自研 Nginx衍生的Kong Netflex Zuul:zuul1,zuul2(闭源) Spring Cloud Gateway 下面我们主要以spring cloud gateway为例来讲网关. Spring cloud gateway包含spring 5,spring boot 2,project

【Spring Cloud】Spring Cloud使用总结

北城余情 提交于 2020-04-28 06:59:29
##项目概要 项目环境信息 IDEA ultimate 2018.3.2 springboot 2.1.7.RELEASE springCloud Greenwich.SR2 ###Eureka 介绍 基于netflix eureka做了二次封装 两个组件组成: Eureka Server 注册中心 Eureka Client 服务注册 搭建Eureka Server 1、配置Eureka 的application.yml eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ #默认为true,是否向自己注册自己 register-with-eureka: false #关闭Eureka自我保护(生产环境要设置为true,测试环境设置为false) server: enable-self-preservation: false #配置服务实例名 spring: application: name: spring-cloud-eureka #配置服务实例端口 server: port: 8761 注意:如果报错读取application.yml文件错误,检查Settings->File Encodings,全部设置为UTF-8 2、配置Eureka pom.xml <?xml version="1

SpringCloud-Gateway 网关路由、断言、过滤

假装没事ソ 提交于 2020-04-28 04:47:04
Gateway 简介 是什么? Spring Cloud 全家桶中有个很重要的组件:网关。在 1.x 版本中使用的是 Zuul 网关,但是到了 2.x,由于Zuul的升级不断跳票,Spring Cloud 自己研发了一套网关组件:Spring Cloud Gateway。 Spring Cloud Gateway基于 Spring Boot 2.x,Spring WebFlux 和 Project Reactor 构建,使用了 Webflux 中的 reactor-netty 响应式编程组件,底层使用了 Netty 通讯框架。 详见: 官网 能干嘛? 反向代理 鉴权 流量控制 熔断 日志监控 ...... 网关在微服务架构中的位置 Gateway 的三大概念 Route(路由) :路由是构建网关的基本模块,它由 ID、目标 URI、一系列的断言和过滤器组成,如果断言为 true 则匹配该路由 Predicate(断言) : 参考的是 Java8 中的 java.util.function.Predicate 。开发人员可以匹配 HTTP 请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由 Filter(过滤) :指的是 Spring 框架中 GatewayFilter 的实例,使用过滤器,可以在请求被路由之前或之后对请求进行修改 工作流程 Clients

Spring Cloud微服务安全实战_5-5_refresh_token

大城市里の小女人 提交于 2020-04-28 03:23:38
本篇解决一个问题,token有效期 token是一个短活的东西,session可能是3天,但是token可能就2个小时,此时就会出现一种情况,session还有效但是token失效了,此时再拿着这个token去调用其他微服务就会失败了。 这就涉及到了OAuth2协议中的Refresh token,刷新令牌。刷新令牌说的是,不管你使用OAuth协议中的四种授权类型中的哪一种(密码模式、授权码模式、简化模式、客户端模式),当token失效的时候,你可以拿着一个refresh_token去重新获取一个令牌,而不需要输入用户名密码。这样用户拿到一个短生命周期的access_token,和一个长生命周期的refresh_token,当access_token失效的时候,就拿refresh_token去换取一个新的access_token。 理论上来说,access_token可以设置一个很长的有效期,但是这样是不安全的,只要拿到access_token,就可以访问你的服务了,所以如果这样做,风险很高。而refresh_token就不一样了,如下图可以看到,要想通过refresh_token换取access_token,需要携带clientId和clientSecret,认证服务器会校验他俩,这两者是保存在服务器端的,别人是拿不到的,所以即使别人拿到了refresh_token也是没用的。

Spring Cloud微服务安全实战_5-8_基于Cookie的SSO

我们两清 提交于 2020-04-28 03:23:20
前几篇说的都是基于session的SSO(客户端应用的session、认证服务器的session),客户端应用拿到认证服务器返回的token后,将其存在自己的session, 用户登录状态是存在服务器端的。 本篇要说的是,要实现一个基于浏览器cookie的SSO,客户端应用获取到令牌后,不是将其存到session,而是写入浏览器cookie,这个改变会带来一些列问题,本篇将解决这些问题。 在OAuth授权回调里处理 客户端应用 客户token后的改造,在OAuth授权回调里处理,拿到token后写入cookie: CookieTokenFilter 在客户端应用,引入zuul的依赖,写一个CookieTokenFilter,从cookie拿出token 加在请求头里。 package com.nb.security.admin; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import org.apache.commons.lang3.StringUtils; import org.springframework.http.* ; import org

Spring cloud微服务安全实战_汇总

会有一股神秘感。 提交于 2020-04-28 03:23:06
Spring cloud微服务安全实战 https://coding.imooc.com/class/chapter/379.html#Anchor Spring Cloud微服务安全实战-1-1 课程导学 Spring Cloud微服务安全实战- 2-1 环境安装 Spring cloud微服务安全实战-3-1 API安全 常见的安全机制 Spring cloud微服务安全实战-3-2 第一个API及注入攻击防护 Spring cloud微服务安全实战-3-3 API安全机制之流控 Spring cloud微服务安全实战-3-4 API安全机制之认证(1) Spring cloud微服务安全实战-3-5 API安全机制之认证(2) Spring cloud微服务安全实战-3-6API安全机制之数据校验 Spring cloud微服务安全实战-3-7API安全机制之数据加密 Spring cloud微服务安全实战-3-8API安全机制之Https Spring cloud微服务安全实战-3-9API安全机制之审计日志 Spring cloud微服务安全实战-3-10API安全机制之授权 Spring cloud微服务安全实战-3-11API安全机制之登录 Spring cloud微服务安全实战-3-12session固定攻击防护 Spring cloud微服务安全实战-3

spring gateway 学习

我的梦境 提交于 2020-04-26 09:47:31
为什么需要使用网关 1.实现统一认证 2.统一一个域名,解决调用困难。 3.协议转换 将不友好的协议转成友好的协议。 spring cloud gateway 是什么 是spring cloud 的第二代网关,会替代zuul 第一代网关。 基于 netty,reactor,webflux 构建。 优点: 1.性能强劲 是 zuul 的1.6倍 2.功能强大 内置 监控,限流,转发等 3.设计优雅,容易扩展。 编写spring cloud gateway 增加依赖 < dependency > < groupId > org.springframework.cloud </ groupId > < artifactId > spring-cloud-starter-gateway </ artifactId > </ dependency > < dependency > < groupId > org.springframework.cloud </ groupId > < artifactId > spring-cloud-starter-alibaba-nacos-discovery </ artifactId > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > <

Spring Cloud Gateway 服务网关快速上手

情到浓时终转凉″ 提交于 2020-04-26 09:15:21
Spring Cloud Gateway 服务网关 API 主流网关有NGINX、ZUUL、Spring Cloud Gateway、Linkerd等;Spring Cloud Gateway构建于 Spring 5+,基于 Spring Boot 2.x 响应式的、非阻塞式的 API。同时,它支持 websockets,和 Spring 框架紧密集成,用来代替服务网关Zuul,开发体验相对来说十分不错。 Spring Cloud Gateway 是 Spring Cloud 微服务平台的一个子项目,属于 Spring 开源社区,依赖名叫:spring-cloud-starter-gateway。 Zuul 是 Netflix 公司的开源项目,Spring Cloud 在 Netflix 项目中也已经集成了 Zuul,依赖名叫:spring-cloud-starter-netflix-zuul。 API 网关 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会多次请求不同的微服务,增加了客户端的复杂性。 存在跨域请求,在一定场景下处理相对复杂。 认证复杂,每个服务都需要独立认证。 难以重构,随着项目的迭代,可能需要重新划分微服务。例如