Kong入门学习实践(7)灰度发布与蓝绿部署
两年前,我在学习K8s的时候有写过一篇基于Nginx Ingress实现灰度发布的博文。这次,我们基于Kong来实践一下。灰度发布的具体实现其实是流量切分,那就让我们先回顾一下流量切分的实现方式。
流量切分实现方式
Kong可以支持实现不同场景下的灰度发布和测试,可以满足金丝雀发布、蓝绿部署与 A/B 测试等业务场景。一般来说,有两种流量切分的方式:一是基于用户请求的流量切分,具体又包括了基于Request Header的流量切分与基于Cookie的流量切分两种方式;如下图所示:

二是基于服务权重的流量切分,如下图所示:

综上所述,我们可以知道,灰度发布与蓝绿部署的本质就是冗余,利用冗余来降低大版本发布带来的风险,从而提高发版上线的效率。
准备工作
在本系列前文的ASP.NET Core示例的基础上,部署两个新的sample-order-api实例,让它作为灰度版本,它和老版本的差别在于健康检查接口返回的是"ok-grey",而老版本返回的是"ok"。
namespace EDT.MSA.Ordering.API.Controllers
{
[Route("api/Health")]
[ApiController]
[ApiExplorerSettings(IgnoreApi = true)]
public class HealthController : ControllerBase
{
[HttpGet]
public IActionResult Get() => Ok($"ok-grey"); ......
}
}
那么,现在已有的微服务的信息为:

基于用户请求的流量切分
根据Request Header的流量切分方式的约定,适用于灰度发布及A/B测试。
对于同一个路由路径,如果加上了指定的Header,就会被转发到灰度版本的上游服务中。
需求明确了,我们就可以在Kong中来进行配置了:
(1)创建一个Upstream,命名为 sample-order-api-grey

具体配置内容和前面示例中的保持一致即可。
然后,添加目标节点,如下图所示:

(2)创建一个Service,命名为 sample-order-api-service-grey

具体配置内容见下图:

这里需要注意的仍然是Host选项,需要和Upstream的名字保持一致。
(3)为新添加的service添加一条路由route,命名为:sample-order-api-grey-route,具体的配置内容如下:

可以看到,和原有版本route唯一的区别就在于Headers选项,这里我们添加了一个Headers的匹配,只有当Headers中有canary:true的时候,才能匹配到这条路由,才能转发到灰度版本中。
(4)验证测试
这里我们借助PostMan来进行一个简单的验证测试,首先,在不带Header的情况下会转发到原有版本:

其次,在带了指定Header值的情况下会转发到灰度版本:

基于服务权重的流量切分
根据基于服务权重的流量切分方式的约定,适用于蓝绿部署,权重范围 0 - 100 按百分比将请求路由到指定的不同版本的上游服务。
权重为 0 意味着该金丝雀规则不会向 灰度版本 的服务发送任何请求。权重为 100 意味着所有请求都将被发送到 灰度版本。
在Kong中,我们只需要加灰度版本的目标节点也加入原有版本的目标节点列表中,配置一下权重即可:

我们来利用PostMan简单验证一下,需要注意的是这里配置的权重其实是一个近似分布值,可能实际中不会太精确。

参考资料
闫观涛,《Kong入门与实践-基于Nginx和OpenRestry的云原生微服务网关》

Kong入门学习实践(7)灰度发布与蓝绿部署的更多相关文章
- 蓝绿部署、滚动部署、金丝雀(Canary)发布、灰度发布、A/B测试
最近看到Canary发布,一时没有反应过来是什么,一查才发现就是鼎鼎有名的金丝雀发布,发现经常一起出现的还有灰度发布.蓝绿部署.滚动部署.A/B测试,故一起学习一下这几个概念. 1. 蓝绿部署 目的: ...
- Contour 学习笔记(二):使用级联功能实现蓝绿部署和金丝雀发布
上篇文章介绍了 Contour 分布式架构的工作原理,顺便简单介绍了下 IngressRoute 的使用方式.本文将探讨 IngressRoute 更高级的用法,其中级联功能是重点. 1. Ingre ...
- 蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别(转)
出处:https://www.baidu.com/link?url=QjboallwNm_jxcL3fHG57wEakiBfAs_3-TChTGu1eBXstlHEsGBc-NDA7AKTqsiroB ...
- 蓝绿部署、A/B测试以及灰度发布(金丝雀发布)
过去的10多年里,很多大公司都在使用蓝绿部署,安全.可靠是这种部署方式的特点.蓝绿部署虽然算不上”Sliver Bullet“,但确实很实用.在有关于“微服务”.“DevOps”.“Cloud-nat ...
- 蓝绿部署、金丝雀发布(灰度发布)、A/B测试
本文转载自蓝绿部署.金丝雀发布(灰度发布).A/B测试的准确定义 概述 蓝绿部署.A/B测试.金丝雀发布,以及灰度发布.流量切分等,经常被混为一谈,影响沟通效率. 根本原因是这些名词经常出现,人们耳熟 ...
- 蓝 / 绿部署(Blue/Green) 金丝雀发布(Canary Release) 功能标记(Feature Flagging)
https://www.cnblogs.com/apanly/p/8784096.html 最终,我选择了 GraphQL 作为企业 API 网关 蓝 / 绿部署(Blue/Green) 金丝雀发布( ...
- Nginx详解二十四:Nginx深度学习篇之灰度发布
实战场景 - 灰度发布 灰度发布的作用:按照一定的关系区别,分部分的代码进行上线,使代码的发布能平滑过渡上线实现方式: 1.用户的信息cookie等信息区别 2.根据用户的IP地址 安装memcach ...
- Nacos入门学习&实践
文中涉及到了一些模块代码没有给出,我一并上传到github了,可以整个项目clone下来进行调试. 地址:https://github.com/stronglxp/springcloud-test 1 ...
- 万字长文:SpringCloud gateway入门学习&实践
官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/# ...
- dubbo学习实践(1)之管理控制台Dubbo-admin部署
1.Docker拉取现有镜像,构建Dubbo-admin 拉取镜像,这里使用chenchuxin/dubbo-admin docker pull chenchuxin/dubbo-admin 注册中心 ...
随机推荐
- 【电脑】重装Win10之后无法唤醒和正常关机(Y9000P 2022)
问题: Y9000P 2022 改Windows10后经常关机关不全(自带键盘灯亮,电源指示灯不灭),这还不是最重要的,它一会儿不用到时间自动休眠后还经常唤醒不了 解决: 两个问题,总结一下: 一.关 ...
- .NET多线程编程之CountdownEvent使用
简单来说,使用这个类可以让主线程等待子线程都完成任务之后才执行任务 1 static void Main(string[] args) 2 { 3 ///子任务的数量 4 CountdownEvent ...
- 1.net core 工作流WorkFlow流程(介绍)
WikeFlow官网:www.wikesoft.com WikeFlow学习版演示地址:workflow.wikesoft.com WikeFlow学习版源代码下载:https://gitee.com ...
- Model接口
/** * Model接口 * 作用:将值存放到request对象 * * * @return */ @RequestMapping(value = "/testModle") p ...
- hybrid应用自动化
一.hybrid介绍 hybrid是一种混合app,将h5页面嵌入native原生页面. 基于uiautomator+chromedriver.native部分走uiautomator,web部分走c ...
- ubuntu nginx + php7.2 + mysql5.7环境搭建
一.换源 备份原来的源 sudo cp /etc/apt/sources.list /etc/apt/sources_init.list 更换源 sudo gedit /etc/apt/sources ...
- 【已解决】戴尔 Inspiron 5457 和 5557 启动报错:Invalid configuration information - please run SETUP program.
场景 我使用的是戴尔15-5557的笔记本电脑,在某次开机的时候系统提示:Invalid configuration information - please run SETUP program. 虽 ...
- 【渗透 Tips】解决Edge的IE模式下无法抓包情况
问题说明 在日常渗透中往往避免不了站点的环境适配问题,有一些站点只能使用IE模式访问,此时便会想着可能使用内置proxy插件代理至抓包软件即可,事实上这并不能很好解决. 如上图所示,即使挂上了yaki ...
- 【HUST】攻防实践|中间人攻击netcat通信过程
更新(略微整理了一下行文逻辑的版本):[HUST]网络攻防实践|TCP会话劫持+序列号攻击netcat对话_shandianchengzi的博客-CSDN博客_tcp序列号攻击是如何实现的. 旧版博客 ...
- 【HUST】网络攻防实践|5_二进制文件补丁技术|实验三 热补丁
文章目录 实验要求 实验过程 1. 64位Ubuntu下先安装32位库 2. 利用Preload Hook实现热补丁修补 3. 利用系统调用`ptrace`对运行状态的程序进行hook 3.1 编写补 ...