前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务网关Kong系列文章之七:流量控制

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

原创
作者头像
Honest1y
修改2021-01-29 14:24:05
1.3K0
修改2021-01-29 14:24:05
举报
文章被收录于专栏:Kubernetes手记Kubernetes手记

1 请求大小限制

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

1.1 启用大小限制

1、在服务上启用插件

代码语言:txt
复制
$ curl -X POST http://kong:8001/services/{service}/plugins \
    --data "name=request-size-limiting"  \
    --data "config.allowed_payload_size=128"

2、在路由上启用插件

代码语言:txt
复制
$ curl -X POST http://kong:8001/routes/{route_id}/plugins \
    --data "name=request-size-limiting"  \
    --data "config.allowed_payload_size=128"

3、在消费者中启用插件

代码语言:txt
复制
$ curl -X POST http://kong:8001/plugins \
    --data "name=request-size-limiting" \
    --data "consumer_id={consumer_id}"  \
    --data "config.allowed_payload_size=128"
代码语言:txt
复制
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
image-20201229113653517

2 请求速率限制

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

2.1 启用速率限制

1、在服务上启用插件

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

2、在路由上启用插件

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

3、在消费者中启用插件

代码语言:txt
复制
$ curl -X POST http://kong:8001/plugins \
    --data "name=rate-limiting" \
    --data "consumer_id={consumer_id}"  \
    --data "config.second=5" \
    --data "config.hour=10000"
代码语言:txt
复制
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
image-20201229114005501

3 请求终止

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

3.1 启用请求终止插件

1、在服务上启用插件

代码语言:txt
复制
$ 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、在路由上启用插件

代码语言:txt
复制
$ 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!"
代码语言:txt
复制
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
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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 请求大小限制
    • 1.1 启用大小限制
      • 1.2 访问测试
      • 2 请求速率限制
        • 2.1 启用速率限制
          • 2.2 访问测试
          • 3 请求终止
            • 3.1 启用请求终止插件
              • 3.2 访问测试
                • 3.3 备注
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档