2020年10月31日星期六

萨德系统解析

小编其实非常不想说萨德,因为这个应该是军事范畴。但是又不得不说,因为美国人已经在我们家门口放了个碉堡。这个所谓的防御系统,其实更是一个攻击系统。经济上的美国越来越失道寡助,他们便使用惯用的大棒。不过,小编引用毛主席的话:“一切反动派都说纸老虎。”上个世纪中叶,我们第一次让美帝国主义吃了败仗,半个多世纪过去了。我们依然有信心。如上甘岭电影中唱的——“朋友来了有好酒,豺狼来了有棍棒”。所以对萨德小编并不担心。倒是美国在选地签订完协议后的几天,就赶紧运输萨德的导弹,让人觉得他的忧虑,怕夜长梦多。这场闹剧,最终还是会让美国自己脚很痛。

美国在韩国部署了萨德,意味着中国超50%的土地都会将被雷达覆盖,等于你的所有隐私生活都24小时被全部监测这个理。如韩国部署了萨德,那么紧着跟着其他国家都会追随。另外两会期间,中国军工企业代表也表示,他们会造出先进高速武器来应对萨德对我们的威胁。中国人从来就不怕外来入侵者,究其是在我们祖国统一,富强的时候。

“萨德”系统全名为“末段高空区域防御系统”(THAAD),是目前唯一能在大气层内和大气层外拦截弹道导弹的陆基高空远程反导系统,总承包商为洛克希德-马丁公司。“萨德”系统于1989年提出计划,并开始一系列验证试验;2000年转入工程研制阶段,第一套系统于2008年部署。

美军

  美军“萨德”系统在进行拦截导弹测试

  “萨德”系统是美国新导弹防御计划的重要组成部分,主要是针对高空导弹进行拦截,采用卫星、红外、雷达三位一体的综合预警方式。该系统由拦截弹、车载式发射架、地面雷达,以及战斗管理与指挥、控制、通信、情报系统等组成。

  “萨德”系统的拦截弹长6.17米,最大弹径0.37米,起飞重量900公斤,最大速度可达2500米/秒,由助推器、动能拦截器及整流罩组成。动能拦截器由姿控、轨控发动机组合提供直接控制力,采用侧窗探测红外凝视成像寻的末制导,能够识别、锁定并直接碰撞摧毁弹道导弹弹头。

  “萨德”系统的拦截高度达到40至150公里,这一高度段是射程3500公里以内弹道导弹的飞行中段,是3500公里以上洲际弹道导弹的飞行末段。因此,它与陆基中段拦截系统配合,可以拦截洲际弹道导弹的末段;也可以与“爱国者”等低层防御中的“末段拦截系统”配合,拦截中短程导弹的飞行中段,在美国导弹防御系统中起到了承上启下的作用。

  “萨德”系统射程远(达到300公里)、防护区域大(防御半径200公里),而“爱国者”-2的射程只有15公里,“爱国者”-3也仅为30公里。因此,“爱国者”被称为点防御系统,而“萨德”是面防御系统,主要用于保护较大的具有战略意义的地区和目标,用来保护美国、盟国军队、人口中心及关键设施免遭中、短程弹道导弹打击。

  “萨德”系统具有较高的机动能力,可以通过公路机动变换阵地,躲避空中打击,提高系统生存性。拦截弹发射车是以美国陆军M1075卡车为基础设计的自行式机动发射平台,每辆发射车可以携带10枚“萨德”拦截弹,全重40吨。可用C-141“运输星”战略运输机空运,便于在全球范围内快速部署,具有较高的战略机动性。拦截弹发射前密封在装运箱(同时也是发射筒)内,发射车从装弹到完成发射准备的时间不超过30分钟,待命中的拦截弹在接到发射命令后,几秒钟内便能发射。

  2008年5月28日,美国陆军宣布第11防空炮兵旅第4防空炮兵团的“阿尔法”连组建,部署在得克萨斯州的布利斯堡,该连装备24枚“萨德”拦截弹,2009年形成战斗力。2009年10月,美国陆军和导弹防御局组建了第二支“萨德”系统部队,也就是位于布利斯堡的第2防空炮兵团的“阿尔法”连。

  2009年6月,美国首次在夏威夷部署了一套“萨德”系统以及海基X波段雷达,以防御“朝鲜可能的攻击”。2013年4月,美国宣布将第4防空炮兵团的“阿尔法”连部署到关岛。2014年3月,第2防空炮兵团的“阿尔法”连轮换部署关岛。迄今为止,美军的整套“萨德”系统均未在国外进行部署。

  不过,作为“萨德”系统核心单元的AN/TPY-2有源相控阵雷达则部署在多个国家,包括以色列的内盖夫沙漠和土耳其的一处空军基地。此外,日本也部署了两套AN/TPY-2雷达。

  “萨德”系统如果成功进驻韩国,中国和俄罗斯远东地区部署的弹道导弹发射将被“一览无余”。美国军事专家称,由于射程限制,中国当前最先进的“东风”-31系列洲际导弹可攻击美国本土的发射阵地仅有东北、华北等有限国土,均距韩国不远。而“萨德”系统配套的X波段AN/TPY-2雷达可探测起飞阶段的洲际导弹,为后续拦截提供预警和情报支持。中国在东北、华北的导弹发射,基本上没出大气层就会被韩国境内的AN/TPY-2雷达精确捕获。

原文转载:http://tech.shaoqun.com/a/298241.html

55海淘网:https://www.ikjzd.com/w/1723

asinseed:https://www.ikjzd.com/w/533

ad公司:https://www.ikjzd.com/w/1332


小编其实非常不想说萨德,因为这个应该是军事范畴。但是又不得不说,因为美国人已经在我们家门口放了个碉堡。这个所谓的防御系统,其实更是一个攻击系统。经济上的美国越来越失道寡助,他们便使用惯用的大棒。不过,小编引用毛主席的话:“一切反动派都说纸老虎。”上个世纪中叶,我们第一次让美帝国主义吃了败仗,半个多世纪过去了。我们依然有信心。如上甘岭电影中唱的&mda
刘小东:https://www.ikjzd.com/w/1853
徐家骏:https://www.ikjzd.com/w/1803
深圳福田街道办附近有什么好玩的地方?:http://tour.shaoqun.com/a/623.html
九寨沟藏饰 :http://tour.shaoqun.com/a/14613.html
凤凰古城住宿推荐 :http://tour.shaoqun.com/a/55461.html

kong in kubernetes

网关

这里提到的网关特指API网关。API网关是在微服务架构的演进过程中产生的,其核心功能是聚合后端服务,为客户端调用提供统一的门户。由于网关的集中式管理,在其上又衍生了限流、负载、路由管理、安全防护等新的需求和功能。基于应用系统现状,我们将网关进一步的细分为带有业务逻辑的业务网关和专注于服务聚合、路由的中台网关。具体来说,业务网关一般是指某一个业务系统的网关,其除了聚合本系统的后端服务之外,还会额外承担一些业务逻辑,比如通用的用户鉴权、基于业务的路由规则等。中台网关,是跨系统的、是将已有的平台能力抽象、聚合,统一包装成API服务,以便各平台、业务复用;中台网关关注的重点是服务的路由、抽象,提供基本的身份认证、限流等功能即可,不会嵌入具体的业务逻辑。注意这里的身份认证和业务网关里的是不一样的,业务网关身份认证一般是具体的终端用户,中台网关里的身份认证是对调用方的识别、鉴权,不涉及具体终端用户。
image

网关产品对比

目前比较流行的API网关主要分为三类:

1、 基于NGINX的反向代理

2、 基于网络编程框架(netty、socket)自开发

3、 基于组件的API网关框架,主要有:spring cloud gateway、zuul1、zuul2

基于网络编程框架的自开发不在我们考虑范围内,主要原因有:自开发周期长,未经过实战验证可靠性需要长时间的磨合,而且自开发性能不会比已有框架表现的更好。因此我们不考虑此类情况。下面我们将分析1和3两种情况。

nginx与spring cloud gateway、zuul对比

nginx

nginx由内核和模块组成,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件与客户端请求进行URL匹配,然后启动不同的模块去完成相应的工作。下图反映了HTTP请求处理的常规流程:
image

spring cloud gateway

spring cloud gateway是在spring boot基础上构建的,用于快速构建分布式系统的通用模式的工具集。其核心也是基于filter的,可以实现类似于zuul的特性功能,但是使用spring cloud 开发的应用程序非常适合在Docker或者Paas上部署。
image

zuul

zuul是Netflix开源的微服务网关组件,它可以和Euraka、Ribbon、Hystrix等组件配合使用。其核心是一系列的过滤器,通过这些过滤器我们可以实现身份认证、审查、监控、动态路由、压力测试、负载分配、静态影响处理、多区域弹性等。
image

对比

不难看出三者在处理请求的思想上是一致的,都是基于filter做逻辑嵌入和处理。

产品模型优势劣势
nginx基于进程,采用epoll_wait、select这样的I/O多路复用模型。采用了异步非阻塞的方式处理请求,理论上是可以同时处理成千上万个请求。内核小巧,自身占用资源少,久经高并发考验,产品稳定、性能最好。只有基本功能配置,额外的功能需要自开发插件,插件语言与一般企业开发人员差异较大,学习成本较高。
spring cloud gatwayspring自己的gateway,基于Spring Boot2.x响应式的、非阻塞的API,支持WebSocket等长连接,和Spring框架紧密集成;整体模型与Nginx类似spring组件,与传统业务开发组件能很好集成,易于添加定制化需求,周边扩展组件丰富,学习成本较低。自身资源消耗较大,在资源有限的情况下(1核2G),性能较差。相同配置下,并发的天花板要比nginx低不少。属于技术组件、没有成熟的产品,需要自开发。
zuul 1基于servlet框架,采用阻塞和多线程方式,存在内部延迟严重、设备故障较多情况下会引起存活连接增多和线程增加的情况发生。而且不支持如WebSocket之类的长连接和其他几款相比,没有明显优势这个没什么好说的,性能表现差、并发数小、且不支持长连接。
zuul 2与1相比,最大的区别是它采用了异步和无阻塞框架,每个CPU一个线程,整体模型与Nginx类似有netflix的成套产品支持,常用功能容易实现,相对于nginx来说更容易定制化开发。整体缺点与spring cloud类似,自身资源占用较大、低配下表现差,且需要一定的定制化开发才能使用。

从上面对比可以看到,各类网关都有其自身的优劣势和适用场景。对于业务网关开发,spring cloud gateway 或许是个不错的选择。中台网关,对于定制化功能要求不多,对于性能和稳定性要求是第一位的,因此nginx内核网关是个不错的选择。

基于以上原因我们选择了基于nginx内核的kong作为中台网关基座。首先,kong的内核是基于nginx的,其性能和稳定性是有保障的,而且也经过了大厂的实践验证;其次,kong是一个完整的网关产品,可以开箱即用,并且提供了丰富的插件以及简单的插件扩展机制。因此无论从性能、稳定性还是从时间成本上看,kong都是首选。

微服务五种开源API网关实现组件对比:https://blog.csdn.net/squirrelanimal0922/article/details/88946900

kong简介及概念

Kong是Mashape开源的高性能高可用API网关和API服务管理层,在Mashape 管理了超过15,000个API,为200,000开发者提供了每月数十亿的请求支持。
image
在微服务架构之下,按照康威定律,我们系统架构会拆的很散,系统由一堆服务组成,降低了耦合度的同时也给服务的统一管理增加了难度。 上图左边描述了在旧的服务治理体系之下,鉴权,限流,日志,监控等通用功能需要在每个服务中单独实现,这使得系统维护者没有一个全局的视图来统一管理这些功能。 Kong致力于解决的问题便是为微服务纳管这些通用的功能,在此基础上提高系统的可扩展性。如右图所示,微服务搭配上 Kong,可以使得服务本身更专注于自己的领域,很好地对服务调用者和服务提供者做了隔离。

网关所需要的基本特性,Kong 都如数支持:
image

  • 云原生 : 与平台无关,Kong 可以从裸机运行到 Kubernetes
  • 动态路由 :Kong 的背后是 OpenResty+Lua,所以从 OpenResty 继承了动态路由的特性
  • 熔断
  • 健康检查
  • 日志 : 可以记录通过 Kong 的请求和响应。
  • 鉴权 : 权限控制,IP 黑白名单
  • 监控 : 提供了实时监控插件
  • 认证 : 如数支持 HMAC, JWT, Basic, OAuth2.0 等常用协议
  • 限流
  • REST API: 通过 Rest API 进行配置管理,从繁琐的配置文件中解放
  • 可用性 : 天然支持分布式
  • 高性能 : 背靠非阻塞通信的nginx,性能高
  • 插件机制 : 提供众多开箱即用的插件,且有易于扩展的自定义插件接口,用户可以使用 Lua 自行开发插件

Kong整体架构如下所示:
image

从技术的角度讲,Kong可以认为是一个OpenResty应用程序。 OpenResty 运行在 Nginx 之上,使用 Lua 扩展了 Nginx。 Lua 是一种非常容易使用的脚本语言,可以让你在Nginx中编写一些可以执行的操作。

  • Kong核心基于OpenResty、nginx构建,用来接收 API 请求;
  • Kong插件拦截请求/响应,进行处理;
  • 提供 restfull 方式管理 admin api;
  • 数据库存储Kong集群节点信息、API、消费者、插件等信息,目前提供了PostgreSQL和Cassandra支持。

Kong 抽象了一些概念Route、Service、Upstream、Consumer等,他们之间的关系如下图所示 :
image

  • Route 路由相当于nginx 配置中的location Route实体定义匹配客户端请求的规则. 每个路由都与一个服务相关联,而服务可能有多个与之相关联的路由. 每一个匹配给定路线的请求都将被提交给它的相关服务. 路由和服务的组合提供了强大的路由机制, 可以在Kong中定义细粒度的入口点,从而引导访问到不同upstream服务
  • service 是抽象层面的服务,他可以直接映射到一个物理服务 (host 指向 ip + port),也可以指向一个 upstream 来做到负载均衡,一个Service可以有很多Route,匹配到的Route就会转发到Service中
  • upstream 是对上游服务器的抽象;target 代表了一个物理服务,是 ip + port 的抽象
  • Consumer 对象表示服务的使用者或者用户。最简单的理解和配置consumer的方式是,将其于用户进行一一映射,即一个consumer代表一个用户(或应用),但如果你将几个应用定义统一个consumer,这些都可以。

插件机制与常用插件说明

openresty定义的请求生命周期如下:

image
Kong插件遵循严格的文件结构,即包命,类名,文件位置等组织代码的方式是固定的,详细的文件结构如下图所示:

image

Kong 提供了一个基类,允许开发者覆盖类中提供的方法,这些方法的本质是openresty定义的请求生命周期,可以在request/response 的生命周期中的几个入口点注入自定义逻辑。每一个方法有一个config参数,这个参数即schema.lua 中声明的,在使用插件时的配置。详细的逻辑如下图所示:

image

Kong 默认自带的插件集,按照功能的不同大致可以分为以下这些类:Authentication 认证、Security 安全、Serverless、Traffic Control 流量控制、Analytics & Monitoring 分析监控、Transformations 请求报文处理、Logging 日志等

我们目前用到的插件如下:

类别插件名使用场景
认证key-auth对于服务或者路由提供用关键字认证机制
认证jwt提供JWT(JSON WEB Token)的认证方式
安全acl通过ACL(Access Control List)的组名称对服务或者路由进行黑白名单的访问控制
日志tcp-log发送请求和响应日志到TCP服务器
流量控制rate-limiting提供对给定时间请求数目的控制功能
流量控制request-termination根据响应的状态码和信息,可停止对某个服务或者路由的流量
监控prometheus暴露kong的metric endpoint

部署架构

image

压力测试

基础配置

服务配置说明
SLB阿里云SLB,QPS:10000,IP:10.163.240.30
kong单节点独立部署,4核8G,IP:10.163.204.90
负载均衡compass负载均衡,IP:10.163.204.8
后端服务容器化部署,0.3核,400m
日志服务1核,2G
ESES集群,3台,16核64G

服务说明

后端服务是标准Spring Boot服务,部署在Compass平台,没有做额外业务逻辑,提供以下接口

  • /api/v1/quick:直接返回计数,不错额外处理
  • /api/v1/slown:直接返回计数,但会延迟3~10秒钟,该值为随机值

测试网络拓扑

image

吞吐量测试

jmeter测试软件,进行吞吐量测试,测试样本为1000并发,1000次轮询,即100w次调用。以下是测试结果统计:

序号测试用例总耗时最小耗时最大耗时平均耗时CPU_startCPU_endmemory_startmemory_endmemory_max备注
1直连服务,不经过网关161s1ms496ms156ms------
2网关+服务+logstash日志服务168s2ms6255ms161ms0.237.828.355.370.4日志服务滞后服务吞吐量,日志写完约用时8分钟;且在日志写入期间网关内存持续上升
3网关+服务+filebeat日志服务163s2ms5286ms155ms0.244.910.811.211.2日志滞后约1分钟,耗时3分半。无其他明显影响
4网关+服务161s2ms5134ms156ms0.234.88.99.29.2-
5短连接+https+网关+filebeat561s2ms255ms128ms0.225.19.39.19.3在短链接情况下,吞吐量为2000/s所以耗时较长,但是每条的耗时并没有受到太大影响
6短连接+http+网关+filebeat160s2ms4988ms156ms0.244.411.210.811.2关闭SLB的https协议转换之后,吞吐量明显提升,与上文长连接测试结果一致

网关+服务+logstash日志服务内存/CPU变化曲线

image

从上图不难看出,在客户端访问结束(3.5分钟)时,CPU占用就开始明显下降,但是由于日志服务处理效率跟不上,网关内存却继续上升,最高占用70%左右,随后下降。从这里不难看出,logstash日志处理方案,在大吞吐量时会成为瓶颈,进而影响网关机器。

网关+服务+filebeat日志服务内存/CPU变化曲线

image

从上图看,filebeat对于网关内存几乎没有影响,实际测试中,filebeat日志吞吐量约为4200/s,滞后网关吞吐量,但是并不会造成额外的内存开销。

网关+服务内存/CPU曲线

image

日志相关横向对比

image

从上图不难看出,就网关本身的吞吐量看,三者基本是一致的。logstash日志服务,会有较大的额外内存开销和较小的CPU开销;filebeat几乎没有额外的内存开销,仅有少量的CPU开销。 综上在大吞吐量及日志需求下,filebeat是个不错的选择。

性能结果

经过对比和统计测试数据,发现kong本身,在启用插件的情况下,额外的性能损耗约为0.11ms。

需要注意的是,由于我们使用的是阿里云的SLB,在https和短连接并发的情况下,会带来比较严重的性能损失,因此在实际应用中,需要根据API安全级别去考虑策略。

并发测试

1、测试方案

基本配置与吞吐量测试一致。资源所限,很难达到nginx的访问瓶颈(这也从侧面说明了nginx内核的强大).我们修改了kong的nginx配置项,将连接上限改为100.

nginx_work_processes=1nginx_events_work_connections=100

2、测试结论

我们以100并发访问后端应用,后端应用耗时在3~10秒之间随机。测试中发现当并发数达到40左右就达到了上限。这时网关其他服务也不可用,范文均返回502;直至测试结束才逐步恢复。 因此可以推断出,在规模化场景中,低质的后端服务会对网关自身的运行造成影响,严重的情况下会是致命的。我们在设计网关的高可用方案时要考虑此类情况。

kong高可用

部署方案

参考《部署架构》章节,我们采用集群模式部署。该模式允许我们水平的扩展集群大小,以应对不同的流量。从kong的设计上讲其水平扩展是平滑且简单的。唯一的影响就是,它是基于数据库做的一致性,为了提高效率,所有数据是缓存在内存中的,因此在一致性上会存在一定的延迟(5S左右)。集群前端我们采用阿里云的SLB作为负载均衡,以保证整个集群的高可用。

运行监控

结合prometheuse以及告警平台实现网关集群运行状态的监控。

具体来说就是启用prometheuse插件,将Kong与上游服务的相关指标,以prometheuse exposition的形式公开。prometheuse集群会对这些指标进行抓取。主要指标包括:

  • 节点内存占用情况
  • API服务请求数
  • API响应耗时
  • 当前活跃连接数
  • 数据存储是否可达
  • 基于指标,指定相关告警规则,通过告警平台,实现集群运行状态监控。

服务管理

上文提到了,上游低质服务会对网关本身的可用性造成影响,严重情况下会导致网关宕机。作为服务中枢的网关一旦宕机,后果将是灾难性的。因此对于上游服务的管理和监控是必要的。目前主要从以下三个方面着手:

启用健康检查

我们通过启用上游的健康检查,来实现对后端服务可用性的实时监测,以便kong及时发现异常服务,并终止到其的路由。kong提供两类健康检查:

1.主动健康检查(active)

主动健康检查是指,上游服务提供一个心跳接口,由空定时调用,当达到指定阈值时,就认定服务不可用;

同时根据设置的阈值,一旦服务达到健康阈值,kong会自动恢复对该服务的路由。

优点:与实际运行无关,由kong主动探查服务,可以及时发现异常,并能自动恢复。缺点:该方案会对上游服务带来额外的流量消耗。

2.被动健康检查(passive)

被动健康检查是指,kong不会主动心跳上游服务,而是根据实际路由情况,结合设置的阈值来判断服务是否可用。

优点:不会对上游服务带来任何影响缺点:一旦异常,服务不能自动恢复,而且异常的发现取决于实际的路由访问情况,不能及时发现

启用限流插件(rate limiting)

限流插件,顾名思义就是对后端服务的访问流量进行限制。kong提供了灵活的限流策略,他允许我们对消费者访问某个服务、API进行限制。提供了多种级别的阈值设置。该插件可以有效的拦截恶意攻击请求。

服务隔离

我们通过配置SLB策略,将低质服务全部负载到独立的网关集群,使其与其他服务在物理上隔离,以避免其可能带来的雪崩。
image

调用日志收集流程

Kong的日志插件中我们选用http-log,原理是设置一个log-server地址,Kong会将日志通过post请求发送到设置的log-server,然后log-server把日志给沉淀下来。 这里的log-server我们使用logstash实现,将收集到的日志发送到ES中。

日志收集流程如下:
image

logstash计划根据集群地域不同分别部署,青岛集群共用一套,北京集群另外搭建。 青岛kong集群分为测试和生产环境,logstash将开放两个http服务端口,9000对应接收测试环境日志,9001对应接收生产环境日志。 根据端口数据来源不同,logstash将日志存储到es的不同索引上,用以区分环境信息。

logstash配置文件

logstash青岛集群服务部署在容器云内, 所有配置文件都使用配置文件挂载的形式,方便修改配置。

image

kong日志结构

官方文档地址:https://docs.konghq.com/hub/kong-inc/http-log/

每次请求都会以JSON形式的内容记录,格式如下:

{ "request": {  "method": "GET",  "uri": "/get",  "url": "http://httpbin.org:8000/get",  "size": "75",  "querystring": {},  "headers": {   "accept": "*/*",   "host": "httpbin.org",   "user-agent": "curl/7.37.1"  },  "tls": {   "version": "TLSv1.2",   "cipher": "ECDHE-RSA-AES256-GCM-SHA384",   "supported_client_ciphers": "ECDHE-RSA-AES256-GCM-SHA384",   "client_verify": "NONE"  } }, "upstream_uri": "/", "response": {  "status": 200,  "size": "434",  "headers": {   "Content-Length": "197",   "via": "kong/0.3.0",   "Connection": "close",   "access-control-allow-credentials": "true",   "Content-Type": "application/json",   "server": "nginx",   "access-control-allow-origin": "*"  } }, "tries": [  {   "state": "next",   "code": 502,   "ip": "127.0.0.1",   "port": 8000  },  {   "ip": "127.0.0.1",   "port": 8000  } ], "authenticated_entity": {  "consumer_id": "80f74eef-31b8-45d5-c525-ae532297ea8e",  "id": "eaa330c0-4cff-47f5-c79e-b2e4f355207e" }, "route": {  "created_at": 1521555129,  "hosts": null,  "id": "75818c5f-202d-4b82-a553-6a46e7c9a19e",  "methods": null,  "paths": [   "/example-path"  ],  "preserve_host": false,  "protocols": [   "http",   "https"  ],  "regex_priority": 0,  "service": {   "id": "0590139e-7481-466c-bcdf-929adcaaf804"  },  "strip_path": true,  "updated_at": 1521555129 }, "service": {  "connect_timeout": 60000,  "created_at": 1521554518,  "host": "example.com",  "id": "0590139e-7481-466c-bcdf-929adcaaf804",  "name": "myservice",  "path": "/",  "port": 80,  "protocol": "http",  "read_timeout": 60000,  "retries": 5,  "updated_at": 1521554518,  "write_timeout": 60000 }, "workspaces": [  {   "id":"b7cac81a-05dc-41f5-b6dc-b87e29b6c3a3",   "name": "default"  } ], "consumer": {  "username": "demo",  "created_at": 1491847011000,  "id": "35b03bfc-7a5b-4a23-a594-aa350c585fa8" }, "latencies": {  "proxy": 1430,  "kong": 9,  "request": 1921 }, "client_ip": "127.0.0.1", "started_at": 1433209822425}
  • request 包含客户端发送的请求内容
  • response 包含发送到客户端的响应内容
  • tries 包含负载均衡器为此请求进行的(重新)尝试(成功和失败)列表
  • route 包含请求匹配的route信息
  • service 包含请求匹配的service信息
  • authenticated_entity 包含身份验证的凭据属性(如果已启用身份验证插件)
  • workspaces 包含路由关联的工作空间的Kong属性(仅限Kong Enterprise版本> = 0.34)
  • consumer 包含消费者认证信息(如果已启用身份验证插件)
  • proxy 是最终服务处理请求所花费的时间
  • kong 是运行所有插件所需的内部Kong延迟
  • request 是从客户端读取的第一个字节之间以及最后一个字节发送到客户端之间经过的时间。用于检测慢速客户端
  • client_ip 包含原始客户端IP地址
  • started_at 包含开始处理请求的UTC时间戳

filter插件

Pre Filter

配置一个webhook,网关根据返回响应码决定是否继续执行路由。

在Service启用插件

通过发出以下请求在Service上配置次插件

$ curl -X POST \ --data "name=pre-filter" \ --data "config.http_endpoint=http://mockbin.org/bin/:id" \ --data "config.header_names=headers" \ --data "config.timeout=1000" \ --data "config.keepalive=1000"

{service}是此插件配置将定位的Service的id或name

在Route上启用插件

$ curl -X POST \ --data "name=pre-filter" \ --data "config.http_endpoint=http://mockbin.org/bin/:id" \ --data "config.header_names=headers" \ --data "config.timeout=1000" \ --data "config.keepalive=1000"

{route}是此插件配置将定位的Route的id或name

全局插件

后面结合k8s进行演示

参数

以下是此插件使用的参数列表

参数默认值说明
name要启用的插件的名称,本例中为pre-filter
service_id此插件定位的Service的Id,可以为空
route_id此插件定位的Route的ID,可以为空
enabledtrue是否应用此插件
config.http_endpoint将要调用的webhook地址,需要是GET请求
config.timeout1000调用服务的超时时间,默认是1000ms
config.header_namesauthorization需要转发的请求头信息

使用

该插件处于路由转发的前置位置。在请求到来时,会根据header_names配置,从请求头中获取对应的信息,并封装到新的请求中,发送到指定的http_endpoint。根据返回状态码来判断是否继续执行。

  • 200 表示通过,会继续执行后续操作
  • 302 表示通过,会继续执行后续操作
  • 大于等于400,表示不通过,会阻断请求,返回401到前端;注意如果http_endpoint出现异常,也会阻断请求。

裸机部署kong

kong 搭建手册

环境检查

操作系统版本

lsb_release -a内核版本uname -a记录好系统版本

kong安装

在yum源配置完善的情况下可以直接执行$ sudo yum install epel-release$ sudo yum install kong-2.0.2.el7.amd64.rpm --nogpgcheck如果yum源配置有问题,可以手动指定远程资源安装安装epel-release软件包,以便Kong可以获取所有必需的依赖项:$ EL_VERSION=`cat /etc/redhat-release | grep -oE '[0-9]+\.[0-9]+'`$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-${EL_VERSION%.*}.noarch.rpm安装Kong 对应的packages可以从https://docs.konghq.com/install/centos/#packages 对照系统版本选择:$ sudo yum install -y https://bintray.com/kong/kong-rpm/download_file?file_path=centos/7/kong-2.0.2.el7.amd64.rpm --nogpgcheck

部署

修改配置数据库cp /etc/kong/kong.conf.default /etc/kong/kong.confvi /etc/kong/kong.confgrep -E "pg|post" /etc/kong/kong.confdatabase = postgres    # Determines which of PostgreSQL or Cassandra         # Accepted values are `postgres`,pg_host = 127.0.0.1    # Host of the Postgres server.pg_port = 5432     # Port of the Postgres server.pg_timeout = 5000    # Defines the timeout (in ms), for connecting,pg_user = kong     # Postgres user.pg_password = 123456     # Postgres user's password.pg_database = kong    # The database name to connect to.初始化数据库kong migrations bootstrap   #集群其中一个节点配置完成即可,其余节点无需重复执行启动kong start检查状态kong health

所有节点启动完成之后,可以自主部署nginx负载,至此集群部署完成。

在k8s上部署kong

组件版本
kubectl1.16.9
kong2.0

Kong Gateway中的流量

默认情况下,Kong Gateway在其配置的代理端口8000和8443上侦听流量。它评估传入的客户端API请求,并将其路由到适当的后端API。在路由请求和提供响应时,可以根据需要通过插件应用策略。

例如,在路由请求之前,可能需要客户端进行身份验证。这带来了许多好处,包括:

  • 由于Kong Gateway正在处理身份验证,因此该服务不需要自己的身份验证逻辑。
  • 该服务仅接收有效请求,因此不会浪费周期来处理无效请求。
  • 记录所有请求以集中查看流量。
plantuml@startuml "API CLIENT" -> "KONG GATEWAY": REQUESTSactivate "KONG GATEWAY""KONG GATEWAY" -> "BACKEND API": REQUESTS"BACKEND API" -> "KONG GATEWAY": RESPONSES"KONG GATEWAY" -> "API CLIENT": RESPONSESdeactivate "KONG GATEWAY"@enduml

kong中的插件

image

转发时序图

plantuml@startuml"API CLIENT" -> "KONG GATEWAY": REQUESTSactivate "KONG GATEWAY""KONG GATEWAY" -> "KONG GATEWAY": "forward-plugin""KONG GATEWAY" -> "AUTH BACKEND SERVER": REQUEST"AUTH BACKEND SERVER" -> "KONG GATEWAY": RESPONSES"KONG GATEWAY" -> "KONG GATEWAY": "forward-plugin""KONG GATEWAY" -> "BACKEND API": REQUESTS"BACKEND API" -> "KONG GATEWAY": RESPONSES"KONG GATEWAY" -> "API CLIENT": RESPONSESdeactivate "KONG GATEWAY"@enduml

安装部署流程

kubectl apply -k manifests/base

查看po状态

# kubectl get po -n kongNAME       READY STATUS RESTARTS AGEingress-kong-7f8f64c5fc-xrsbg 2/2  Running 1   17m

查看svc

# kubectl get svc -n kongNAME      TYPE   CLUSTER-IP  EXTERNAL-IP PORT(S)          AGEkong-proxy    LoadBalancer 10.96.178.210 <pending>  80:32724/TCP,443:31298/TCP,8100:32415/TCP 25mkong-validation-webhook ClusterIP  10.104.253.149 <none>  443/TCP          25m

运行以下命令

# export PROXY_IP=$(kubectl get -o jsonpath="{.spec.clusterIP}" service kong-proxy -n kong)

这个时候访问kong服务,响应头包含kong信息。

curl -i $PROXY_IP

运行两个测试服务

以本demo为例,构建服务镜像

docker build -t kong-test-server apps/test/

docker build -t kong-auth-server apps/auth/

在kubernetes环境跑起来

kubectl apply -f apps/test/test.yamlkubectl apply -f apps/auth/auth.yaml

访问服务

可以看到结果如下,流量经过kong访问到了test和auth

curl -i $PROXY_IP/test/

curl -i $PROXY_IP/auth/

使用官方插件

设置局部插件

  • 注:设置在Ingress或Service,都能使插件生效。以下以Ingress为例,Service同。

查看Ingress资源,可以看到刚刚创建的两个Ingress资源

kubectl get ingress

声明官方插件

$ echo 'apiVersion: configuration.konghq.com/v1kind: KongPluginmetadata: name: add-response-headerconfig: add: headers: - "demo: injected-by-kong"plugin: response-transformer' | kubectl apply -f -

将官方插件与Ingress规则相关联

kubectl patch ingress kong-test-server -p '{"metadata":{"annotations":{"konghq.com/plugins":"add-response-header"}}}'

查看ingress信息

访问服务,可以看到响应头多了刚刚插件的信息

curl -i $PROXY_IP/test/


设置全局插件

$ echo "apiVersion: configuration.konghq.com/v1kind: KongPluginmetadata: name: global-rate-limit labels: global: \"true\"config: minute: 5 limit_by: consumer policy: localplugin: rate-limiting" | kubectl apply -f -

查看插件资源

kubectl get kp -A


再次访问服务,响应头多了全局插件信息(全局插件不需要在指定ingress或service配置注解)

curl -i $PROXY_IP/test/

安装自定义插件

本demo使用lua实现了两个自定义插件:

  • my-custom-plugin:根据配置文件返回指定响应头
  • request-uri-pass-auth:根据配置文件,配置路由白名单,对不符合路由白名单规则的请求作拦截

为插件代码创建ConfigMap

以ConfigMap的方式将插件加载进kong服务里

下面创建这2个自定义插件

kubectl create configmap kong-plugin-myheader --from-file=demo/custom-plugins/myheader -n kongkubectl create configmap kong-plugin-request-uri-pass-auth --from-file=demo/custom-plugins/request-uri-pass-auth -n kong

查看创建的configmap

kubectl get configmap -n kong

更新kong Deployment资源

要使用自定义插件,需要新增自定义插件环境变量,并且将上述生成的插件代码以ConfigMap的方式映射到kong中。

apiVersion: apps/v1kind: Deploymentmetadata: name: ingress-kong namespace: kongspec: template: spec:  containers:  - name: proxy  env:  - name: KONG_PLUGINS   value: request-uri-pass-auth,myheader  - name: KONG_LUA_PACKAGE_PATH   value: "/opt/?.lua;;"  volumeMounts:  - name: plugin-request-uri-pass-auth   mountPath: /opt/kong/plugins/request-uri-pass-auth  - name: my-custom-plugin   mountPath: /opt/kong/plugins/myheader  volumes:  - name: plugin-request-uri-pass-auth  configMap:   name: kong-plugin-request-uri-pass-auth  - name: my-custom-plugin  configMap:   name: kong-plugin-myheader

更新kong Deployment资源

kubectl apply -k demo/custom-plugins/

创建Kong Plugin自定义资源

分别对刚刚2个插件创建Kong Plugin

myheader.yaml

apiVersion: configuration.konghq.com/v1kind: KongPluginmetadata: name: my-custom-pluginconfig: header_value: "my first plugin"plugin: myheader

request-uri-pass-auth.yaml

apiVersion: configuration.konghq.com/v1kind: KongPluginmetadata: name: request-uri-pass-authconfig: prefixs: - "/open/"plugin: request-uri-pass-auth# kubectl apply -f demo/custom-plugins/myheader/myheader.yamlkongplugin.configuration.konghq.com/my-custom-plugin created# kubectl apply -f demo/custom-plugins/request-uri-pass-auth/request-uri-pass-auth.yamlkongplugin.configuration.konghq.com/request-uri-pass-auth created

查看Kong Plugin

可以看到官方的Kong Plugin和自定义Kong Plugin

kubectl get KongPlugin -A

注意!这里有一个坑!当使用自定义插件的时候。我们需要声明KONG_PLUGINS环境变量,这会导致官方的插件失效。这个时候需要将官方插件也加入到声明的KONG_PLUGINS中。

官方插件失效后访问设置了官方插件注解的服务时返回以下结果

以本demo为例,完整的yaml应该为: custoem-plugin.yaml

apiVersion: apps/v1kind: Deploymentmetadata: name: ingress-kong namespace: kongspec: template: spec:  containers:  - name: proxy  env:  - name: KONG_PLUGINS   value: request-uri-pass-auth,myheader,response-transformer,rate-limiting  - name: KONG_LUA_PACKAGE_PATH   value: "/opt/?.lua;;"  volumeMounts:  - name: plugin-request-uri-pass-auth   mountPath: /opt/kong/plugins/request-uri-pass-auth  - name: my-custom-plugin   mountPath: /opt/kong/plugins/myheader  volumes:  - name: plugin-request-uri-pass-auth  configMap:   name: kong-plugin-request-uri-pass-auth  - name: my-custom-plugin  configMap:   name: kong-plugin-myheader

更新kong Deployment资源

kubectl apply -k demo/custom-plugins/

测试

测试自定义插件是否生效

为test服务添加request-uri-pass-auth插件

kubectl patch ingress kong-test-server -p '{"metadata":{"annotations":{"konghq.com/plugins":"request-uri-pass-auth"}}}'


为auth服务添加my-custom-plugin插件

kubectl patch ingress kong-auth-server -p '{"metadata":{"annotations":{"konghq.com/plugins":"my-custom-plugin"}}}'

测试自定义插件是否生效

访问test服务

curl -i $PROXY_IP/test/


可以看到/test/路由被"request-uri-pass-auth"插件拦截

curl -i $PROXY_IP/open/


可以看到,/open/路由没有被拦截,因为"request-uri-pass-auth"插件对/open/路由作了放行。然后还放回了全局插件"rate-limit"信息。自定义插件和官方对全局插件生效。

访问auth服务

curl -i $PROXY_IP/auth/

可以看到,返回了"my-custom-plugin"插件信息和"rate-limit"插件信息。自定义插件和官方全局插件生效。

注意!KongPlugin资源需要跟对应的svc或ingress处于同一个命名空间。本demo都是声明在default空间。

aliyun上使用kong

创建slb

修改manifests/base/service.yaml

...metadata: name: kong-proxy namespace: kong annotations:  ## ALIYUN SLB service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: lb-wxxxxxxxxxxxe service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet...

安装官方插件之prometheus插件

综合demo/custom-plugins/README.md 以及manifests/base/kong-ingress-dbless.yaml和manifests/base/service.yaml

github:https://github.com/zisefeizhu/konginkubernetes

原文转载:http://www.shaoqun.com/a/485865.html

邮乐网购物商城:https://www.ikjzd.com/w/1776

ifttt:https://www.ikjzd.com/w/956

patents:https://www.ikjzd.com/w/857


网关这里提到的网关特指API网关。API网关是在微服务架构的演进过程中产生的,其核心功能是聚合后端服务,为客户端调用提供统一的门户。由于网关的集中式管理,在其上又衍生了限流、负载、路由管理、安全防护等新的需求和功能。基于应用系统现状,我们将网关进一步的细分为带有业务逻辑的业务网关和专注于服务聚合、路由的中台网关。具体来说,业务网关一般是指某一个业务系统的网关,其除了聚合本系统的后端服务之外,还会额
rfq:https://www.ikjzd.com/w/251
巴克莱银行:https://www.ikjzd.com/w/2775
口述:七夕节老公当街打肿我的脸老公当街脾气:http://lady.shaoqun.com/m/a/38048.html
2020年公司年会准备什么节目好?年会节目有什么?:http://tour.shaoqun.com/a/4416.html
暑假去福建泰宁寨下大峡谷门票贵吗?会涨价吗?:http://tour.shaoqun.com/a/5520.html

道路拥堵700公里!欧洲大批量民众“逃离”出城,UPS、HDL紧急暂停发货服务

道路拥堵700公里!欧洲大批量民众"逃离"出城,UPS、HDL紧急暂停发货服务

近来,欧洲多国迎来第二波新冠疫情。面对疫情反弹,确诊人数激增,德国、法国宣布"封城",意大利、西班牙、比利时施行严格的限制措施,英国也被曝将进入"封城"状态。

"封城"的背后发生了多层裂变,意西民众暴力抗议"封城",恐怖袭击、暴力抗议、烧砸抢劫……正在席卷欧洲多个国家。

据《每日邮报》10月30日报道,意大利佛罗伦萨和博洛尼亚都爆发了数百人参与的抗议活动,抗议者未经批准就上街游行,与警方爆发冲突。西班牙巴塞罗那民众也走上街头,抗议区域边界封锁。抗议活动一度发展为暴力冲突,有人朝警察扔石头和闪光弹,有人放火将垃圾桶点燃。


10月29日,数千名法国人在"封城"前一晚离开巴黎。视频显示,成千上万辆汽车当晚涌出巴黎,道路上挤满车辆,闪烁的车灯和喇叭声充斥着整个街道,造成数百英里的交通堵塞,场面十分壮观。据外媒估计,巴黎城内外的堵车队伍加起来绵延700公里。


据在欧华人透露,现在的欧洲已经陷入一片恐慌,有人在"跑路",有人在疯狂囤货,超市遭到了严重的"洗劫",这次除了意大利面面粉罐头、食品、厕纸和生活用品等这些常规囤货操作之外,各大购物者还抢购了瑜伽垫。


除此之外,有不少人直接放弃"逃亡"选项,开始"及时行乐",在封锁令生效之前,很多居民选择在巴黎酒吧餐厅打烊前好好喝上一杯酒、吃上一顿饭,于是,各种人山人海。当晚巴黎餐厅酒吧爆满,室内外座无虚席,堪称"某日狂欢趴"。

看到这里跨境电商圈许多人都倒吸一口冷气,欧洲市场已经受到了明显的影响,欧洲市场的卖家欲哭无泪。

UPS、HDL紧急暂停欧洲部分国家发货服务

今日,许多货代发布紧急通知:香港DHL全球渠道产品将暂停德国、葡萄牙、西班牙、奥地利、罗马尼亚、尼日利亚6个国家0.5-5KG以内包裹寄运服务,恢复时间另行通知。

除此之外,由于欧洲二次疫情爆发,欧洲多个国家的UPS派送将会受到延误及停止派送:

1.捷克取件、派送会有延误。

2.德国几个邮编的派送会有延误:83317,83364,83395,83404,83410,83413,83416,83417,83435,83451,83454,83457,83458,83471,83483,83486,83487。

3.意大利下列邮编派送延误:16010-16199;意大利下列邮编暂停派送:11020,11023,92017,90040,90030,98070,81030,81025,80022,80054,89027,88060,89026,87053,87059,89020,89843,89014,39030,39035。

4.斯洛文尼亚:派送延误。

5.英国和爱尔兰,派送会有影响,到11月底。

6.罗马尼亚邮编137190暂停派送;罗马尼亚几个邮编的派送会有影响:437210,437390,407505,407506,407507,407508,4075091

货代表示也接到了邮政的通知,由于德、法等欧洲6国相继下达封锁禁令,情况预计延迟到12月初,在此期间,欧洲路线的货物派送时效预计受到不同程度的延误。

值得一提的是,联邦快递在阿根廷、德国 、西班牙 、克罗地亚 、匈牙利 、哈萨克斯坦 、荷兰 、沙特阿拉伯 、斯洛伐克 、意大利 、白俄罗斯 、塞尔维亚 、葡萄牙 和俄罗斯等国家没有弃件销毁服务,要多多注意!

"疫情加重,封城对于发货物流肯定有影响的。人手不足操作效率降低,导致时效延误是最基本的了。"

"危机中寻生存,危机中寻机遇。疫情当下,物流是个难题,即使到了目的港,也不知道多久才能提货派送和上架,今年仓库有货才是王道。"

"现在的情况,对于那些能未雨绸缪的商家来说这次将赚到手软,选对产品赢一半。"

卖家们的各种吐槽也透露着对现状的无奈,物流延迟,运费暴涨,销量暴跌.......无人知晓后面的发展趋势。

欧洲多地取消圣诞市场,卖家销售大跌

鉴于欧洲地区第二波新冠肺炎疫情来势汹汹,出于防疫考虑,欧洲多地宣布取消今年的圣诞市场。德新社27日报道,继法兰克福、爱尔福特等地宣布取消圣诞市场,德国最著名、最大的纽伦堡圣诞市场26日也宣布取消。这一市场每年可吸引超过200万人,包括慕名而来的外国游客。法国斯特拉斯堡圣诞市场和捷克布拉格圣诞市场分别于22日和26日宣布取消。

除了圣诞节以外,今年的万圣节遇到疫情和周末,销量大跌,几乎没有单量。

但欧洲疫情反扑国外正在疯抢中国家具,许多外贸厂家出口订单排到年后,家居板块全线飘红。受海外门店关停的影响,今年3-4月出现的"宅经济"正在重回海外,进一步催生网购热潮。

以速卖通为例,9月份平台上大件家具销售额同比暴涨3倍,居家办公椅在欧洲销售额暴涨500%,沙发销售额同比上涨超200%,大型室内灯具上涨超50%,紫外线杀菌灯同比增幅近200%。

除家具、灯具外,其他宅家品类也出现暴涨。比如为法国人大量购买植物灯"宅"家种菜,这一品类同比增幅达129%;疫情同时拉动DIY热潮,DIY木工小电锯同比增幅258%;烘焙用具、咖啡用具在法国也分别有50%和150%的增长。

对此,卖家可以抓住商机,在选品上进行调整。

面对这种情况,业内人士也提出四点建议:

1、法国、德国封国后,时效会有不同程度的延误,派件可能受阻,不确定原线路那个派件员是否感染,造成尾程时效延误。请注意留意服务商信息,特别是法国可能部分要定点自提。

2、请特别注意下办公区的地址,很可能这些地址已经无人上班,造成投递失败率提高。

3、为应对突发,保证利润,个人建议,目前估计法国、德国投递失败率可能提升2-3个点,请核算好成本,提前做好应对。

4、另外请注意欧洲海外仓提前发货便于后期中转!

来源:跨境犀牛

文章来源:https://www.ikjzd.com/home/132747

盘古集团:https://www.ikjzd.com/w/1448

丰趣海淘:https://www.ikjzd.com/w/1716

五洲会海购:https://www.ikjzd.com/w/1068

聚贸:https://www.ikjzd.com/w/1305

万色:https://www.ikjzd.com/w/2382

道路拥堵700公里!欧洲大批量民众"逃离"出城,UPS、HDL紧急暂停发货服务

​近来,欧洲多国迎来第二波新冠疫情。面对疫情反弹,确诊人数激增,德国、法国宣布"封城",意大利、西班牙、比利时施行严格的限制措施,英国也被曝将进入"封城"状态。