背景

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

​​​​​​​作者:涂鸦

原文链接

本文为阿里云原创内容,未经允许不得转载。

构建基于 Ingress 的全链路灰度能力相关推荐

  1. 如何用20分钟就能获得同款企业级全链路灰度能力?

    简介:MSE 微服务引擎将推出服务治理专业版,提供开箱即用且完整专业的微服务治理解决方案,帮助企业更好地实现微服务治理能力.如果您的系统也可以像本文描述的那样,快速具备完整的全链路灰度能力,并基于该能 ...

  2. 基于 Istio 的全链路灰度方案探索和实践

    作者|曾宇星(宇曾) 审核&校对:曾宇星(宇曾) 编辑&排版:雯燕 背景 微服务软件架构下,业务新功能上线前搭建完整的一套测试系统进行验证是相当费人费时的事,随着所拆分出微服务数量的不 ...

  3. 微服务全链路灰度新能力

    背景 微服务体系架构中,服务之间的依赖关系错综复杂,有时某个功能发版依赖多个服务同时升级上线.我们希望可以对这些服务的新版本同时进行小流量灰度验证,这就是微服务架构中特有的全链路灰度场景,通过构建从网 ...

  4. 企业深入使用微服务后会面临哪些问题?云原生全链路灰度给了新思路

    作者:魁予.十眠 如何落地可灰度.可观测.可回滚的安全生产三板斧能力,满足业务高速发展情况下快速迭代和小心验证的诉求,是企业在微服务化深入过程中必须要面对的问题.在云原生流行的当下,这个问题又有了一些 ...

  5. 全链路灰度这样做,新需求迭代上线也能放心干饭

    作者:泮圣伟(十眠) 概要 ​全链路灰度是微服务最核心的功能之一,也一直是云上客户在微服务化深入过程中必须具备的功能.全链路灰度因为涉及到的技术.场景众多,如果云上企业一一自己实现,需要花费大量人力成 ...

  6. 深入剖析全链路灰度技术

    作者:扬少 当服务有新版本要发布上线时,通过引流一小部分流量到新版本,可以及时发现程序问题,有效阻止大面积故障的发生.业界上已经有比较成熟的服务发布策略,比如蓝绿发布.A/B 测试以及金丝雀发布,这些 ...

  7. 分布式全链路灰度发布的探索与实践

    简介:在分布式系统中,由于分布式全链路灰度发布因其链路复杂.技术门槛高.落地难度高逐渐成为金融科技实现全链路灰度发布的难点所在.工行在分布式系统建设方面一直走在同业前列,积极探索分布式全链路灰度发布, ...

  8. 工商银行顾欣:分布式全链路灰度发布的探索与实践

    作者|顾欣 互联网金融时代下,金融产品和服务模式不断创新,金融系统容量需求急剧增长,为进一步满足运维标准提升工作的需求,提升服务连续性水平.中国工商银行(后简称工行)从 2014 年开始分布式架构转型 ...

  9. “三步走”构建全链路数据能力,助力企业全面唤醒数据价值

    01 企业数字化转型加速前进,数据价值唤醒仍面临多重挑战 数字经济蓬勃发展时代,数据已成为关键生产要素.随着国家政策对数据要素价值释放的方向引领,数据赋能企业经营决策.业务模式创新的需求不断强化,以及 ...

最新文章

  1. javascript jquery對form元素的常見操作
  2. 项目描述_单元测试技巧:创建描述性测试
  3. eclipse 打开时候,弹出来 JVM terminated Exit code=2
  4. GUN Make指南
  5. 红黑树 —— 原理和算法详细介绍
  6. 这42个Python小例子,太走心~
  7. Python加权图的邻接表邻接矩阵之转换
  8. visio能做动态原理图_单、双节锂电池2x20W动态升压双声道音频功放组合方案
  9. 【报告分享】清华大学-2019人工智能发展报告.pdf(附394页报告下载链接)
  10. docker volume mysql_docker volume的理解
  11. 前台实现ajax 需注意的地方
  12. vim编辑器的基本用法
  13. 优动漫PAINT实用宝典(图层篇)——栅格图层
  14. 银行核心业务系统性能测试方法
  15. 支付宝当面付扫码支付支付后不回调_免费开通支付宝商家收款码 支持信用卡 花呗收款...
  16. word2007制作封面、扉页和目录
  17. 视频画中画效果该怎么实现?这款软件让你一秒成大神
  18. David I 盛大之行
  19. FL Studio 教程之显示按钮简介
  20. 保险知识一:续期收费与续保的区别

热门文章

  1. 电商数据分析案例 与 职责要求
  2. 大连理工大学Python选修课作业训练5
  3. 力扣小周推荐——最大交换
  4. 西南(唐山)交通大学上海校友会2012年度大会活动通知
  5. NVIDIA 英伟达发布H100 GPU,水冷服务器适配在路上
  6. 请教ASP.NET培训应该培训的内容和以及顺序
  7. 网络安全自学笔记+学习路线(超详细)
  8. 关于PDCA和GTD分享的思考
  9. 惯性思维与创新发现的矛盾
  10. 使用node ftp上传文件夹到