专栏首页Kubernetes手记微服务网关Kong系列文章之七:流量控制
原创

微服务网关Kong系列文章之七:流量控制

1 请求大小限制

阻止输入的请求,其主体大于特定大小的兆字节

1.1 启用大小限制

1、在服务上启用插件

$ curl -X POST http://kong:8001/services/{service}/plugins \
    --data "name=request-size-limiting"  \
    --data "config.allowed_payload_size=128"

2、在路由上启用插件

$ curl -X POST http://kong:8001/routes/{route_id}/plugins \
    --data "name=request-size-limiting"  \
    --data "config.allowed_payload_size=128"

3、在消费者中启用插件

$ curl -X POST http://kong:8001/plugins \
    --data "name=request-size-limiting" \
    --data "consumer_id={consumer_id}"  \
    --data "config.allowed_payload_size=128"
curl -X POST http://172.16.60.8:8001/routes/b0db420a-d3c3-45ee-8b25-11f3fd8ca283/plugins \
    --data "name=request-size-limiting"  \
    --data "config.allowed_payload_size=-20"
    
{
	"created_at": 1609212809,
	"id": "08112606-e023-4d1b-ba76-853832585feb",
	"tags": null,
	"enabled": true,
	"protocols": ["grpc", "grpcs", "http", "https"],
	"name": "request-size-limiting",
	"consumer": null,
	"service": null,
	"route": {
		"id": "b0db420a-d3c3-45ee-8b25-11f3fd8ca283"
	},
	"config": {
		"size_unit": "megabytes",
		"allowed_payload_size": -20
	}
}

1.2 访问测试

image-20201229113653517

2 请求速率限制

速率限制开发人员在给定的时间、分钟、小时、日、月或年的时间内可以发出多少HTTP请求

2.1 启用速率限制

1、在服务上启用插件

$ curl -X POST http://kong:8001/services/{service}/plugins \
    --data "name=rate-limiting"  \
    --data "config.second=5" \
    --data "config.hour=10000"

2、在路由上启用插件

$ curl -X POST http://kong:8001/routes/{route_id}/plugins \
    --data "name=rate-limiting"  \
    --data "config.second=5" \
    --data "config.hour=10000"

3、在消费者中启用插件

$ curl -X POST http://kong:8001/plugins \
    --data "name=rate-limiting" \
    --data "consumer_id={consumer_id}"  \
    --data "config.second=5" \
    --data "config.hour=10000"
curl -X POST http://172.16.60.8:8001/routes/b0db420a-d3c3-45ee-8b25-11f3fd8ca283/plugins \
    --data "name=rate-limiting"  \
    --data "config.second=2" \
    --data "config.hour=10000"

{
	"created_at": 1609213117,
	"id": "0329fd21-3844-4a84-b325-68282577c78a",
	"tags": null,
	"enabled": true,
	"protocols": ["grpc", "grpcs", "http", "https"],
	"name": "rate-limiting",
	"consumer": null,
	"service": null,
	"route": {
		"id": "b0db420a-d3c3-45ee-8b25-11f3fd8ca283"
	},
	"config": {
		"minute": null,
		"redis_host": null,
		"redis_timeout": 2000,
		"limit_by": "consumer",
		"hour": 10000,
		"policy": "cluster",
		"month": null,
		"redis_password": null,
		"second": 2,
		"day": null,
		"hide_client_headers": false,
		"path": null,
		"redis_database": 0,
		"year": null,
		"redis_port": 6379,
		"header_name": null,
		"fault_tolerant": true
	}
}

2.2 访问测试

image-20201229114005501

3 请求终止

这个插件使用指定的状态码和消息终止传入的请求。这允许(暂时)停止服务或路由(或废弃的API实体)上的通信,甚至阻塞用户

3.1 启用请求终止插件

1、在服务上启用插件

$ curl -X POST http://kong:8001/services/{service}/plugins \
    --data "name=request-termination"  \
    --data "config.status_code=403" \
    --data "config.message=So long and thanks for all the fish!"

2、在路由上启用插件

$ curl -X POST http://kong:8001/routes/{route_id}/plugins \
    --data "name=request-termination"  \
    --data "config.status_code=403" \
    --data "config.message=So long and thanks for all the fish!"
curl -X POST http://172.16.60.8:8001/routes/b0db420a-d3c3-45ee-8b25-11f3fd8ca283/plugins \
    --data "name=request-termination"  \
    --data "config.status_code=403" \
    --data "config.message=The service is under maintenance"

{
	"created_at": 1609213373,
	"id": "77c99041-0a99-4388-b4fa-9378791c3839",
	"tags": null,
	"enabled": true,
	"protocols": ["grpc", "grpcs", "http", "https"],
	"name": "request-termination",
	"consumer": null,
	"service": null,
	"route": {
		"id": "b0db420a-d3c3-45ee-8b25-11f3fd8ca283"
	},
	"config": {
		"status_code": 403,
		"content_type": null,
		"body": null,
		"message": "The service is under maintenance"
	}
}

3.2 访问测试

image-20201229114344488

3.3 备注

  • config.status_code :要发送的响应代码。
  • config.message :如果使用默认响应生成器,则发送的消息。
  • config.body : 要发送的raw响应体,跟config.message相互排斥
  • config.content_type : 为config.body配置raw响应的内容类型,默认:application/json; charset=utf-8

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 微服务网关Kong系列文章之四:Kong代理

    8000:此端口是Kong用来监听来自客户端的HTTP请求的,并将此请求转发到您的上游服务。这也是本教程中最主要用到的端口。

    Honest1y
  • 微服务网关Kong系列文章之二:Kong安装

    如我们在术语部分的介绍,服务是上游服务的抽象,可以是一个应用,或者具体某个接口。Kong 提供了管理接口,我们可以通过请求 8001 管理接口直接创建,也可以通...

    Honest1y
  • 微服务网关Kong系列文章之六:安全

    Honest1y
  • 微服务网关Kong系列文章之一:简介

    当使用单体应用程序架构时,客户端(Web 或移动端)通过向后端应用程序发起一次 REST 调用来获取数据。负载均衡器将请求路由给 N 个相同的应用程序实例中的一...

    Honest1y
  • 微服务网关Kong系列文章之三:Konga安装

    Honest1y
  • 微服务网关Kong系列文章之五:身份验证

    API网关身份验证是控制允许使用您的API传输的数据的重要方法。基本上,它使用一组预定义的凭据来检查特定使用者是否有权访问API。

    Honest1y
  • 微服务网关方案:Kong & Nacos

    文章连接:https://mp.weixin.qq.com/s/Kk6Cl7n0sFGgCyyZtExa6A

    程序员架构进阶
  • 微服务网关方案:Kong & Nacos

    前面我们介绍了 Spring Cloud 体系下的网关 Gateway(Zuul)。事实上,还有很多开源且广泛应用的网关方案,例如 Kong 和 Nacos。本...

    程序员架构进阶
  • Kong入口控制器和服务网格:Kubernetes设置入口到Istio

    Kubernetes已经成为在服务中编排容器和服务的实际方法。但是我们如何让集群外部的服务访问集群内部的内容呢?Kubernetes附带了Ingress API...

    CNCF
  • 选择Kong作为你的API网关

    在微服务架构之下,服务被拆的非常零散,降低了耦合度的同时也给服务的统一管理增加了难度。如上图左所示,在旧的服务治理体系之下,鉴权,限流,日志,监控等通用功能需要...

    kirito-moe
  • 云原生架构下的 API 网关实践: Kong (二)

    Kong 是 Mashape 开源的一款云原生架构下的分布式 API 网关,其性能和可扩展性在同类组件中,表现都很优异。Kong 官方提供了很多直接可用的插件,...

    aoho求索
  • 云原生架构下的 API 网关实践:Kong (一)

    ,有点懒怠。最近抽空捣鼓了 Kong 网关的使用实践,微服务网关之前的文章也写过,读者可以翻看之前的文章推送。插件是 Kong 扩展的重要特性,这次除了会介绍 ...

    aoho求索
  • 主流云原生微服务API网关成熟度与安全功能对比分析

    在整个微服务架构中,API网关充当着非常重要的一环,它不仅要负责外部所有的流量接入,同时还要在网关入口处根据不同类型请求提供流量控制、日志收集、性能分析、速率限...

    绿盟科技研究通讯
  • 花5分钟时间来了解一下高性能网关Kong会有意外收获

    前几天开源发布了 Kong.Net 项目,收到了大量园友的反馈,开源当天就突破了 100 个star ,可喜可贺,但是从侧面也说明,我们 .NetCore 阵营...

    心莱科技雪雁
  • Kong发布新项目Kuma 通用的服务网格

    Kong 发布了新的开源项目 Kuma,一个通用的现代服务网格控制平面。Kuma 基于 Envoy 构建,Envoy 是一个为云原生应用设计的强大的代理软件。E...

    Debian中国
  • 微服务网关除了zuul、spring cloud gateway还有更出色的

    在微服务架构中,由于系统和服务的细分,导致系统结构变得非常复杂, 为了跨平台,为了统一集中管理api,同时为了不暴露后置服务。甚至有时候需要对请求进行一些安全、...

    码农小胖哥
  • 云原生时代的流量入口:Envoy Gateway

    流量入口代理作为互联网系统的门户组件,具备众多选型:从老牌代理 HAProxy、Nginx,到微服务 API 网关 Kong、Zuul,再到容器化 Ingres...

    深度学习与Python
  • 因为没有网关,我的服务器被 DDoS 了

    大家好,我是鸭血粉丝,想起来之前生产发生的事故,阿粉我的内心到现在都还很忐忑不安,今天我们来学习一个 Kong 以及跟你们聊聊做好网关限流控制的重要性。

    纯洁的微笑
  • 亿级流量架构之网关设计思路、常见网关对比

    本文准备围绕七个点来讲网关,分别是网关的基本概念、网关设计思路、网关设计重点、流量网关、业务网关、常见网关对比,对基础概念熟悉的朋友可以根据目录查看自己感兴趣的...

    周辰晨

扫码关注云+社区

领取腾讯云代金券