首页 > 其他分享 >Kong入门学习实践(7)灰度发布与蓝绿部署

Kong入门学习实践(7)灰度发布与蓝绿部署

时间:2023-06-30 19:22:05浏览次数:65  
标签:基于 蓝绿 流量 Kong 切分 灰度 版本

两年前,我在学习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的云原生微服务网关》

 

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

标签:基于,蓝绿,流量,Kong,切分,灰度,版本
From: https://www.cnblogs.com/edisonchou/p/edc_kong_learning_notes_chap7.html

相关文章

  • Kong入门学习实践(6)HTTPS与TCP流代理
    最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。本篇,我们学习快速配置HTTPS跳转与TCP流代理。HTTPS跳转配置HTTP协议虽然应用广泛,简单易用,但存在着巨大的安......
  • Kong入门学习实践(5)API网关路由转发
    最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。本篇,我们学习快速配置一个最常见的基本功能:API网关场景下的路由转发。API网关路由需求在API网关的需求场景中,......
  • Ingress-Nginx 灰度(金丝雀)发布
    使用Ingress-Nginx进行灰度(金丝雀)发布Ingress-NginxCanary介绍NginxIngressController作为项目对外的流量入口和项目中各个服务的反向代理。官方文档概述:Annotations-Ingress-NginxController(kubernetes.github.io)NginxAnnotations的几种Canary规则:Annota......
  • 数字图像处理《3、灰度变换与空间滤波》
      第三章:空间域处理1、 空间域处理是指在图像的像素上操作,主要分为灰度变换和空间滤波:灰度变换的主要目的是对比度处理和阀值处理;空间滤波的主要目的是改善图像的性能,如锐化图像;2、 基本的灰度变换函数:图像反转、对数变换、伽马变换、分段线性变换;3、 还有基于直方图的灰度......
  • 悟空派WuKongPi/香橙派orangepi zero全志H3折腾记录(②kernel移植)
    接上一节,这节开始移植内核。 首先获取一下内核源码,这里仍然使用香橙派的源码gitclonehttps://github.com/orangepi-xunlong/linux-orangepi.git 进入kernel根目录并切换到orangepizero使用的分支gitcheckoutremotes/origin/orange-pi-5.4 然后安装编译内核可......
  • Kong入门学习实践(4)负载均衡与正则路由
    最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。本篇,我们学习快速配置一个最常见的基本功能:负载均衡与正则路由。关于负载均衡所谓负载均衡,就是通过负载均衡算......
  • Kong入门学习实践(3)路由转发
    最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。本篇,我们学习快速配置一个最常见的基本功能:路由转发。关于路由转发路由转发是Nginx等代理软件最常见的使用场......
  • 悟空派WuKongPi全志H3(香橙派orangepi zero)折腾记录(u-boot移植)
    最近在某宝上看到一个悟空派,仔细一看这不就是香橙派orangepizero吗,不过它的USB是Type-C,于是我买了一块打算折腾一下。 拿到了首先获取一下u-boot源码,因为板子和香橙派orangepizero一样就直接用香橙派的源码了gitclonehttps://github.com/orangepi-xunlong/u-boot-orange......
  • 当SRS遇到K8s:如何实现高可用、回滚与灰度发布?
    Photoby LuisQuintero from Pexels文/杨成立服务的更新、回滚和灰度,是个简单的问题,如果加上一个条件"不中断服务的前提下",那么就是一个难题,如果再加上"大规模",那么就是K8S要解决的核心问题之一。坏消息是这个难搞的问题还真是流媒体服务的核心的、关键的、不可忽视的关键能......
  • Kong入门学习实践(2)实验环境搭建
    最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。本篇,我们学习如何快速搭建一个Kong实验环境。搭建方式目前,我们可以选择多种部署方式,包括:宿主机部署、Docker部......