上云无忧 > 文档中心 > 腾讯云微服务引擎 TSE - 灰度配置 Ingress
微服务引擎 TSE
腾讯云微服务引擎 TSE - 灰度配置 Ingress

文档简介:
TSE 云原生 API 网关支持基于 Method 、特定位置(Header,Query、Body、Cookie)参数、系统参数(domain,clientIP,httpScheme,clientUa)的灰度发布能力。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠
TSE 云原生 API 网关支持基于 Method 、特定位置(Header,Query、Body、Cookie)参数、系统参数(domain,clientIP,httpScheme,clientUa)的灰度发布能力。
通过灰度条件和目标服务进行配置。路由规则的多个条件为逻辑与(AND)关系,即一个路由规则内的条件都满足了,才会转发到对应的后端服务。
后端服务通过 Kong Upstream 来定义,绑定容器集群后,Kong Ingress Controller 从 K8S Service 中同步过来自动生成资源。
参数支持表达式运算:
支持<,<=, >, >=, ==, != 运算符。
支持存在与正则表达式
支持包含和不包含

实现原理

tse-route 插件为 TSE 提供的用于进行参数路由的插件。通过将 tse-route 插件绑定在原始服务上,通过参数条件路由到目标服务(灰度服务)以进行灰度发布。

tse-route 插件介绍可参考:实现规则路由

操作步骤

步骤1:创建Ingress

前提:已在 k8s 创建好正式服务(nginx)和灰度服务(demo1,demo2)。
创建 Ingress 定义转发规则:
		
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
konghq.com/strip-path: 'true'
name: demo
namespace: default
spec:
ingressClassName: kong
rules:
- http:
paths:
- backend:
service:
name: nginx
port:
number: 80
path: /nginx
pathType: Prefix
- backend:
service:
name: demo1
port:
number: 80
path: /demo1
pathType: Prefix
- backend:
service:
name: demo2
port:
number: 80
path: /demo2
pathType: Prefix

步骤2:定义 TSE Route 插件的 KongPlugin 注解

1. 插件配置字段:
配置字段
配置说明
备注
rules-weight
规则优先级,支持 0-100,数值越大优先级越高。
/
rules-upstream-name
目标服务名称。
/
rules-upstream-weight
目标服务流量百分比,默认 100。
所有 upstream 的 weight 加起来等于100
rules-condition
灰度规则的条件说明,支持 header 参数,query 参数,system 参数,cookie 参数,path 和 method。
/
description
插件说明。
/
2. 表达式写法
大于>
		
- value: '1'
operator: gt
key: 'version'
global_config_id:
delimiter:
小于<
		
- value: '1'
operator: lt
key: 'version'
global_config_id:
delimiter:
等于==
		
- value: '1'
operator: eq
key: 'version'
global_config_id:
delimiter:
不等于!=
		
- value: '1'
operator: ne
key: 'version'
global_config_id:
delimiter:
大于等于>=
		
- value: '1'
operator: ge
key: 'version'
global_config_id:
delimiter:
小于等于<=
		
- value: '1'
operator: le
key: 'version'
global_config_id:
delimiter:
存在
		
- operator: exists
key: 'version'
global_config_id:
delimiter:
正则表达式
		
- value: '1'
operator: regex
key: 'version'
global_config_id:
delimiter:
场景一:基于 Header 的灰度发布
使用 KongPlugin 注解,定义插件配置,condition 配置 header 参数的转发条件。
例如:请求 Header 为 version=v1 时,转发到目标灰度服务(demo1),其他情况访问正式服务(nginx)。
		
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: my-test-route
config:
description: test
rules:
- enabled: true
condition:
cookie:
system:
path:
body:
method:
header:
- global_config_id:
key: version
value: '1'
delimiter:
operator: eq
query:
weight: 22
upstream:
- weight: 100
name: demo1.default.80.svc
plugin: tse-route
场景二:基于Query的灰度发布
使用 KongPlugin 注解,定义插件配置,condition 配置 query 参数的转发条件。
例如:请求 Query 参数 age <3 0 时,转发到目标灰度服务(demo1),其他情况访问正式服务(nginx)。
		
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: my-test-route
config:
description: test
rules:
- enabled: true
condition:
cookie:
system:
path:
body:
method:
header:
query:
- global_config_id:
key: age
value: '30'
delimiter:
operator: lt
weight: 22
upstream:
- weight: 100
name: demo1.default.80.svc
plugin: tse-route
场景三:基于权重的灰度发布
使用 KongPlugin 注解,定义插件配置,配置不同后端服务百分比的转发条件。
例如:配置灰度服务 demo1的百分比为 20%,灰度服务 demo2的百分比为 30%,剩余流量(50%)访问正式服务 nginx。
		
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: my-test-route
config:
description: test
rules:
- enabled: true
condition:
cookie:
system:
path:
body:
method:
header:
query:
weight: 10
upstream:
- weight: 20
name: demo1.default.80.svc
- weight: 30
name: demo2.default.80.svc
- weight: 50
name: nginx.default.80.svc
plugin: tse-route

步骤3:将插件绑定在服务上

为正式服务 Nginx 添加注解,将插件绑定到该正式服务上。
		
kubectl apply -f tseroute.yaml
kubectl annotate service nginx konghq.com/plugins=my-test-route

步骤4:访问正式服务

访问正式服务,将根据条件依次匹配,满足匹配条件则按照条件转发到对应的灰度服务。
				
claire@CLAREZZHANG-MB0 ~ % curl -i 'http://1.15.161.241/hello?uid=/custokjhjhjkkj&whiteList=qatest'
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 615
Content-Type: text/html; charset=UTF-8
Date: Wed, 01 Mar 2023 13:47:53 GMT
Etag: "6398a011-267"
Last-Modified: Tue, 13 Dec 2022 15:53:53 GMT
Server: nginx/1.23.3
Via: kong/2.5.1
X-Kong-Proxy-Latency: 7
X-Kong-Route-Rule: 100
X-Kong-Route-Upstream: nginx.default.80.svc
X-Kong-Upstream-Latency: 2

相似文档
  • 什么是 Web 安全防火墙? Web 应用防火墙(Web Application Firewall,WAF)能够帮助腾讯云内及云外用户应对 Web 攻击、入侵、漏洞利用、挂马、篡改、后门、爬虫等网站及 Web 业务安全防护问题。企业通过部署腾讯云 WAF 服务,将 Web 攻击威胁压力转移到腾讯云 WAF 防护集群节点,分钟级获取腾讯 Web 业务防护能力,为网站及 Web 业务安全运营保驾护航。
  • 本文介绍云原生 API 网关如何结合 WAF 通过添加域名的方式与云原生 API 网关的资源(包括服务、路由)进行绑定,实现对经过云原生 API 的流量进行检测和拦截。
  • 本文介绍云原生 API 网关如何结合 WAF 通过对象防护的方式实现网关安全防护。对象防护开启后,所有访问网关的请求都默认进行防护。
  • 操作背景: DDoS 防护(Anti-DDoS)具有全面、高效、专业的 DDoS 防护能力,为企业组织提供 DDoS 高防包、DDoS 高防 IP 等多种 DDoS 解决方案,应对 DDoS 攻击问题。通过充足、优质的 DDoS 防护资源,结合持续进化的“自研+AI 智能识别”清洗算法,保障用户业务的稳定、安全运行。
  • 应用场景: 云原生 API 网关可结合 Web 应用防火墙与 DDoS 高防包联动,为用户提供全方位的安全防护。 Web 应用防火墙提供实时防护能力,可有效拦截 Web 攻击,保障用户业务的数据和信息安全。 DDoS 高防包可以提供上百 Gbps 的 DDoS 防护能力,轻松应对 DDoS 攻击,保障业务稳定运行。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部