一、Zuul Http Client

  zuul使用的默认HTTP客户端现在由Apache HTTP Client支持,而不是已弃用的Ribbon RestClient。要使用RestClient或使用okhttp3.OkHttpClient,请分别设置ribbon.restclient.enabled = true或ribbon.okhttp.enabled = true。如果您想定制Apache HTTP客户端或OK HTTP客户端提供ClosableHttpClient或OkHttpClient类型的Bean。

二、Cookies和敏感header头

2.1、基础使用

  在同一个系统中的服务之间共享header是可以的,但你可能不希望敏感的header向下游泄漏到外部服务器中。您可以指定一个忽略的header列表作为路由配置的一部分。Cookie扮演着特殊的角色,因为他们在浏览器中具有明确定义的语义,并且始终将其视为敏感。如果代理的用户是浏览器,那么下游服务的cookie也会给用户带来问题,因为它们都混乱了(所有下游服务看起来都是来自同一个地方)。

  如果您对服务的设计非常小心,例如,如果只有一个下游服务设置了cookie,那么您可能会让它们从后端一路流向调用者。另外,如果您的代理设置了Cookie并且所有后端服务都属于同一个系统,那么简单地共享它们(例如使用Spring Session将它们链接到某个共享状态)可能是很自然的。除此之外,任何由下游服务设置的cookie都可能对调用者不是很有用,因此建议您将(至少)“Set-Cookie”和“Cookie”制作为不属于您的域的路由的敏感header。即使对于属于您的域名的路由,也要尽量仔细考虑它们在允许Cookie与代理之间流动之前的含义。

  敏感header可以配置为每个路由以逗号分隔的列表,例如,

 zuul:
routes:
users:
path: /myusers/**
sensitiveHeaders: Cookie,Set-Cookie,Authorization
url: https://downstream

其中sensitiveHeaders:未传递到下游请求的敏感header列表。默认为通常包含用户凭据的一组“安全”的报头。如果下游服务是与代理相同的系统的一部分,那么它们就可以从列表中删除这些文件,因此它们正在共享认证数据。如果在自己的域之外使用物理URL,那么通常泄漏用户凭据将是一个坏主意。

注意:这是sensitiveHeaders的默认值,所以你不需要设置它,除非你想让它不同。注:这是Spring Cloud Netflix 1.1中的新功能(在1.0中,用户无法控制header和所有cookie在两个方向上流动)。

2.2、空header

sensitiveHeaders是一个黑名单,默认不是空的,所以为了让Zuul发送所有的头文件(除了“被忽略”的头文件),你必须明确地将它设置为空列表。

 zuul:
routes:
users:
path: /myusers/**
sensitiveHeaders:
url: https://downstream

敏感header也可以通过设置zuul.sensitiveHeaders进行全局设置。如果sensitiveHeaders在路由上设置,这将覆盖全局sensitiveHeaders设置。

2.3、忽略header

  除了每个路由敏感报头之外,您还可以为zuul.ignoredHeaders设置一个全局值,以便在与下游服务交互期间应丢弃的值(包括请求和响应)。默认情况下,如果Spring Security不在类路径中,它们是空的,否则它们被初始化为Spring Security指定的一组众所周知的“安全”头文件(例如涉及缓存)。在这种情况下,假设下游服务可能也会添加这些header,并且我们需要来自代理的值。为了不丢弃这些众所周知的安全性头文件,以防Spring Security在类路径中,您可以将zuul.ignoreSecurityHeaders设置为false。如果您在Spring Security中禁用了HTTP安全响应头并且需要下游服务提供的值,这会很有用

三、Manager Endpoint

如果您在Spring Boot Actuator中使用@EnableZuulProxy,您将启用(默认情况下)两个附加端点:

  • Routes
  • Filters

注意:关闭验证或者开启:management.security.enabled=false

3.1、Routes Endpoint

  GET / routes路由端点将返回映射路由列表:

{
/stores/**: "http://localhost:8081"
}

可以通过将?format = details查询字符串添加到/ routes来请求其他路由详细信息。这将产生以下输出:GET /routes?format=details. 

{
"/stores/**": {
"id": "stores",
"fullPath": "/stores/**",
"location": "http://localhost:8081",
"path": "/**",
"prefix": "/stores",
"retryable": false,
"customSensitiveHeaders": false,
"prefixStripped": true
}
}

POST将强制刷新现有routes(例如,如果服务目录中有更改)。您可以通过将endpoints.routes.enabled设置为false来禁用此端点。

注意:路由应该自动响应服务目录中的更改,但POST /路由是强制更改立即发生的一种方式。

3.2、Filters Endpoint

GET / filters中的过滤器端点将按类型返回Zuul过滤器的映射。对于地图中的每种过滤器类型,您可以找到该类型的所有过滤器的列表及其详细信息。

四、绞杀者模式和本地转发

绞杀者模式:参看博客https://martinfowler.com/bliki/StranglerApplication.html

  迁移现有应用程序或API时常见的模式是“扼杀”旧的端点,并慢慢地用不同的实现替换它们。Zuul代理是一个有用的工具,因为您可以使用它来处理来自旧端点客户端的所有流量,但会将某些请求重定向到新端点。

application.yml. 

zuul:
routes:
first:
path: /first/**
url: http://first.example.com
second:
path: /second/**
url: forward:/second
third:
path: /third/**
url: forward:/3rd
legacy:
path: /**
url: http://legacy.example.com

  在这个例子中,我们扼杀了映射到与其他模式不匹配的所有请求的“遗留”应用程序。/ first / **中的路径已被提取到具有外部URL的新服务中。并且/ second / **路径被转发,以便它们可以在本地处理,例如,与一个正常的Spring @RequestMapping。/ third / **中的路径也被转发,但具有不同的前缀(即/ third / foo被转发到/ 3rd / foo)。

  被忽略的模式不会被完全忽略,它们只是不被代理处理(所以它们也被有效地本地转发)。

0602-Zuul构建API Gateway-Zuul Http Client、cookie、header的更多相关文章

  1. 聊聊 API Gateway 和 Netflix Zuul

    最近参与了公司 API Gateway 的搭建工作,技术选型是 Netflix Zuul,主要聊一聊其中的一些心得和体会. 本文主要是介绍使用 Zuul 且在不强制使用其他 Neflix OSS 组件 ...

  2. 0603-Zuul构建API Gateway-通过Zuul上传文件,禁用Zuul的Filter

    一.通过Zuul上传文件 参看地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_ ...

  3. 【记录】API Gateway作用? 与过滤器的区别?Nginx与Zuul区别?

    网关(gateway)的作用: 网关可以拦截客户端所有请求,对该请求进行权限控制.负载均衡.日志管理.接口调用监控等 过滤器与网关的区别是什么? 过滤器是拦截单个tomcat服务器请求. 网关是拦截整 ...

  4. 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul

    通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...

  5. SpringCloud学习笔记(6):使用Zuul构建服务网关

    简介 Zuul是Netflix提供的一个开源的API网关服务器,SpringCloud对Zuul进行了整合和增强.服务网关Zuul聚合了所有微服务接口,并统一对外暴露,外部客户端只需与服务网关交互即可 ...

  6. Spring Cloud第十四篇 | Api网关Zuul

    ​ 本文是Spring Cloud专栏的第十四篇文章,了解前十三篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring C ...

  7. 使用springcloud zuul构建接口网关

    一  微服务网关背景及简介 不同的微服务一般有不同的网络地址,而外部的客户端可能需要调用多个服务的接口才能完成一个业务需求.比如一个电影购票的收集APP,可能回调用电影分类微服务,用户微服务,支付微服 ...

  8. spring cloud 入门系列六:使用Zuul 实现API网关服务

    通过前面几次的分享,我们了解了微服务架构的几个核心设施,通过这些组件我们可以搭建简单的微服务架构系统.比如通过Spring Cloud Eureka搭建高可用的服务注册中心并实现服务的注册和发现: 通 ...

  9. Netflix正式开源其API网关Zuul 2

    5 月 21 日,Netflix 在其官方博客上宣布正式开源微服务网关组件 Zuul 2.Netflix 公司是微服务界的楷模,他们有大规模生产级微服务的成功应用案例,也开源了相当多的微服务组件(详见 ...

  10. 0601-Zuul构建API Gateway-API gateway简介、基础使用、路由配置、负载配置

    一.API Gateway简介 参看:http://www.cnblogs.com/bjlhx/p/8794437.html 二.zuul简介[路由器和过滤器:Zuul] 在微服务架构的组成部分进行路 ...

随机推荐

  1. 多媒体开发之分场图像和交错图像interlacing---一个破解版的迅雷云点播网站

    [-] 目录 编辑描述 编辑去交错方法 编辑去交错源自电影的影像 编辑去交错交错式影像 编辑单一场去交错intra-field deinterlacing 编辑场间去交错inter-field dei ...

  2. maven公布jar、aar、war等到中央库(Central Repository)的步骤

    步骤一:注冊账号.申请ticket. 注冊在这里:https://issues.sonatype.org 申请ticket:创建一个issue.注意这里要选OSSRH,且是PROJECT而不是TASK ...

  3. 【OpenWRT】网络配置

    cd /etc/config vim network vim wireless cd /etc/init.d/network

  4. CStringArray序列化处理

    开发中需要对CStringArray进行保存操作,涉及到序列化,特总结一下: //写 CStringArray saTmp1; CStringArray saTmp2 saTmp1.AddString ...

  5. AWS系列-Amazon Simple Notification Service (SNS)

    SNS是一项 Web 服务,用于协调和管理向订阅终端节点或客户交付或发送消息的过程.在 Amazon SNS 中有两种类型的客户端:发布者和订阅者,也称为生产者和消费者.发布者通过创建消息并将消息发送 ...

  6. 提高ASP.NET网站性能的方法

    http://www.360doc.com/content/14/0705/18/7662927_392224856.shtml   Asp.NET有许多秘密,当你了解了这些秘密后,可以使得你的ASP ...

  7. DM8168 OpenCV尝试与评估(编译ARM版OpenCV)

     交叉编译opencv2.3.1,并在DM8168 cortex A8中执行图像处理. 开发环境: PC:ubuntu12.04LTS.Intel Core 2 Duo CPU  E7200@2. ...

  8. 应用开发之Asp.net

    本章简言 上一章中笔者讲到关于Linq和EF的用法.并以hibernate来进行讲解.那么本章笔者来讲一下C#的Asp.Net.即是在B/S模式下开发.现在企业大部分的业务都是面向B/S模式的.所以对 ...

  9. Spring 集合注入

    Spring注入是spring框架的核心思想之一.在实际的开发中,我们经常会遇见这样一些类的注入,这些类中包含一些集合作为类的属性,那么要怎样想类中的集合注入数据呢?本文通过一个简单的示例向大家介绍一 ...

  10. 参数估计(1):从最小二乘到最小b乘

    机器学习到底学习到了什么,或者说“训练”步骤到底在做些什么?在我看来答案无非是:所谓的“学习”就是把大量的数据归纳到少数的参数中,“训练”正是估计这些参数的过程.所以,除了“参数估计”, 我想不到还有 ...