构建基于 Ingress 的全链路灰度能力
创始人
2024-03-06 04:11:33

作者:涂鸦

背景

随着云原生技术不断普及,越来越多的业务应用开始向云原生架构转变,借助容器管理平台 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

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...