构建基于 Ingress 的全链路灰度能力

news/2024/12/5 12:00:23/

作者:涂鸦

背景

随着云原生技术不断普及,越来越多的业务应用开始向云原生架构转变,借助容器管理平台 Kubernetes 的不可变基础设施、弹性扩缩容和高扩展性,助力业务迅速完成数字化转型。其中,集群入口流量管理方式在云原生技术演进过程中逐步通用化、标准化,用户通过 Kubernetes 定义的 Ingress 资源来管理外部访问集群内部服务的方式。

微服务架构下,有一些需求开发,涉及到微服务调用链路上的多个微服务同时发生了改动,通常每个微服务都会有灰度环境或分组来接受灰度流量,我们希望通过进入上游灰度环境的流量,也能进入下游灰度的环境中,确保1个请求始终在灰度环境中传递,即使这个调用链路上有一些微服务没有灰度环境,这些应用请求下游的时候依然能够回到灰度环境中。通过 MSE 提供的全链路灰度能力,可以在不需要修改任何您的业务代码的情况下,能够轻松实现上述能力。

Kubernetes 网关概述

Kubernetes 集群对外暴露流量的方式主要分为三种,Node Port、LoadBalancer 以及 Ingress。

对于 Node Port 而言,实现了朴素的端口和后端 Pod 的一一对应,不仅存在单点问题,而且由于端口范围的限制,一旦后端的服务数量上升,会出现无端口可用的情况;而对于 LoadBalancer 来说,其解决 Node Port 的单点问题和端口数量的问题,奈何它是一个纯粹的流量转发资源,并没有路由配置能力,也无法管理后端众多的 Service 应用,所以 Ingress 的诞生就是必然的结果。Ingress 不仅有这天然的路由定义的能力,也扮演者后端众多 Service 管理者的角色。不过这里需要提一句,大众所熟知的 Ingress 资源只是单纯的一个 路由 Resource 定义,真正的实现者和执行者其实是具体的 Ingress 标准实现,包括大家所熟知的 Nginx Ingress Controller 都属于此列。

在这里插入图片描述

在阿里云 ACK 平台上,有着众多 Ingress 的实现方式,其中包括 Nginx-Ingress 、ALB-Ingress 以及最近推出的 MSE-Ingress,本文将讲述一种较为通用的基于 MSE 微服务治理的统一方案,在 Ingress 网关上实现全链路流量灰度。

如何实现在 Ingress 上实现全链路流量灰度

首先我们要知道在实现全链路灰度时所必须具备的要素,然后再在 Ingress 环境中实现这些要素,就能够实现在 Ingress 网关下的全链路流量灰度。由历史经验可知,我们这里主要靠标签路由、节点打标以及流量染色这三个要素去实现。

标签路由通过对服务下所有节点按照标签名和标签值不同进行分组,使得订阅该服务节点信息的服务消费端可以按需访问该服务的某个分组,即所有节点的一个子集。服务消费端可以使用服务提供者节点上的任何标签信息,根据所选标签的实际含义,消费端可以将标签路由应用到更多的业务场景中。

节点打标,如果是在使用Kubernetes Service作为服务发现的业务系统中,服务提供者通过向ApiServer提交Service资源完成服务暴露,服务消费端监听与该Service资源下关联的Endpoint资源,从Endpoint资源中获取关联的业务Pod资源,读取上面的Labels数据并作为该节点的元数据信息。所以,我们只要在业务应用描述资源Deployment中的Pod模板中为节点添加标签即可。

在这里插入图片描述

流量染色是指我们可以在请求的源头上对流量进行染色,前端在发起请求时根据用户信息或者平台信息的不同对流量进行打标。如果前端无法做到,我们也可以在微服务网关上对匹配特定路由规则的请求动态添加流量标识。此外,流量在链路中流经灰度节点时,如果请求信息中不含有灰度标识,需要自动为其染色,接下来流量就可以在后续的流转过程中优先访问服务的灰度版本。

为了实现上面全链路灰度三个要素,MSE 微服务治理提出了泳道和泳道组的概念。举一个例子,我们假设应用的架构由 Nginx-Ingress 以及后端的微服务架构(Spring Cloud)来组成,后端调用链路有3跳,交易中心,商品中心,库存中心,客户端通过客户端或者是 H5 页面来访问后端服务,它们通过 Nacos 注册中心做服务发现。

在这里插入图片描述

  1. 通过设置流量规则对所需流量进行’染色’,'染色’流量会路由到灰度机器。

  2. 灰度流量携带灰度标往下游传递,形成灰度专属环境流量泳道,无灰度环境应用会默认选择未打标的基线环境。

进入到 MSE 控制台的泳道的定义界面里,我们也可以发现,其对应了全链路灰度实现的三要素:

在这里插入图片描述

快速玩转 Ingress 全链路灰度

我们以 ACK Nginx-Ingress 全链路为例,快速地体验如何借助 MSE 微服务治理,实现 Ingress 的全链路流量灰度,总体的步骤如下:

在这里插入图片描述

我们主要描述下如何将 ACK Ingress Controller 接入到 MSE 微服务中去,只需在 Nginx Ingress Controller 的 ConfigMap 增加下面两项配置即可:

  • use-mse: true
  • mse-app-name: ingress-canary-test

mse-app-name 为自定义的名称,此时我们就可以在 MSE 控制台上看到名为 ingress-canary-test 的阿里云 Ingress 入口了:

在这里插入图片描述

其余步骤均和 Java 应用的全链路灰度步骤一致,具体可以参考以下这篇文章:

https://help.aliyun.com/document_detail/460275.html

待我们配置好泳道规则后,我们打对应特征的流量就会流入的对应的泳道中去,我们可以在 MSE 控制台观察灰度的情况,以便验证全链路灰度功能是不是生效了:

在这里插入图片描述

MSE Ingress 是 MSE 团队自主研发的 Ingress 实现,基于 MSE 云原生网关(同时兼容 Ingress 和 Istio)取代 Nginx 来实现流量托管,不仅有着更强大的性能,也有着天然的流量治理与管控基因,其全链路灰度的玩法与 ACK Nginx Ingress 基本上一致,具体步骤可以参考以下这篇文章:

https://help.aliyun.com/document_detail/460375.html


http://www.ppmy.cn/news/534.html

相关文章

[附源码]Python计算机毕业设计Django高校社团管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

【数据库实验(6)】完整性约束

create table student(sno varchar(20),sname varchar(20),sgender varchar(10),sage int,sdept varchar(20))insert into student values(1222,张丽,女,21,计算机),(1223,刘立,男,25,数学),(1224,王晓华,女,22,计算机),(1225,李佳,男,23,计算机),(1226,张月,女,22,建筑)select…

python小游戏编程arcade----坦克动画图片合成

python小游戏编程arcade----坦克动画图片合成前言坦克动画图片合成1、PIL image1.1 读取文件并转换1.2 裁切,粘贴1.3 效果图1.4 代码实现2、处理图片的透明度问题2.1 past 函数的三个参数2.2 注意点12.3 注意点22.4 效果![在这里插入图片描述](https://img-blog.csd…

HTML+CSS+JavaScript仿京东购物商城网站 web前端制作服装购物商城 html电商购物网站

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

mybatis实战:一、mybatis入门(配置、一些问题的解决)

出自《MyBatis从入门到精通》刘增辉&#xff0c;精简 1.pom.xml 1.设置源码编码方式为 UTF -8 2.设置编译源代码的 JDK 版本 3.添加mybatis依赖 4.还需要添加会用到的 Log4j JUnit ySql 驱动的依赖。 <?xml version"1.0" encoding"UTF-8"?> <pr…

算法刷题打卡第32天:预测赢家---动态规划

预测赢家 难度&#xff1a;中等 给你一个整数数组 nums 。玩家 1 和玩家 2 基于这个数组设计了一个游戏。 玩家 1 和玩家 2 轮流进行自己的回合&#xff0c;玩家 1 先手。开始时&#xff0c;两个玩家的初始分值都是 0 。每一回合&#xff0c;玩家从数组的任意一端取一个数字&…

数字化下烟草行业人力资源管理实践与思考

“十四五”期间&#xff0c;高质量发展要求提质增效、科技创新、转型升级、数字化发展&#xff1b;在政府的工作报告中“创新”、“增长”、“机制”这些词不断提及&#xff0c;企业的发展重点也逐渐由高增长变为高质量发展。烟草行业如何对标世界一流管理&#xff0c;促进人力…

Vue系列之指令

文章の目录一、什么是指令二、v-cloak1、解决的问题2、用法2.1、定义样式2.2、让带有插值语法的标签添加 v-cloak 属性三、v-text1、用法2、优势四、v-html1、使用2、劣势五、v-pre1、使用六、v-once1、使用2、使用场景七、v-model1、使用写在最后一、什么是指令 指令 (Direct…