EDAS 流量入口网关最佳实践

本文涉及的产品
应用实时监控服务-用户体验监控,每月100OCU免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 使用 MSE 云原生网关,在保留 SLB 作负载均衡的基础上,只通过一层网关就实现了集群入口网关、WAF 网关、微服务网关的全部能力。并且这一层网关由阿里云托管部署,无需用户自己运维机器实例,并且提供网关可用性的 SLA 保障。除了大幅度降低人力成本、资源成本,还能提供更好的稳定性。

作者:澄潭


云原生网关介绍


MSE 云原生网关是阿里云提供的下一代网关解决方案,完全兼容 Kubernetes Ingress 标准 API,将流量网关、微服务网关和安全网关三合一,解决了多层网关架构独立设计、独立运维导致的资源消耗大、性能损耗大、稳定性难控、安全防护复杂等难题。相比传统网关,云原生网关在资源成本、性能、安全性和易用性上更有优势。


1.jpeg

传统多层网关架构


在这个架构中,用 WAF 网关实现安全能力,SLB 实现负载均衡能力,Ingress 网关实现集群入口网关能力(非 K8s 场景也会部署一层 Nginx),Zuul 实现微服务网关能力。这样的架构需要对每一层网关都进行容量评估,每一层网关都是潜在的瓶颈点,都可能需要进行扩容。这样造成的资源成本和运维人力成本都是巨大的。并且每多一层网关,就多一层可用性风险。


2.jpeg

MSE 云原生网关架构


使用 MSE 云原生网关,在保留 SLB 作负载均衡的基础上,只通过一层网关就实现了集群入口网关、WAF 网关、微服务网关的全部能力。并且这一层网关由阿里云托管部署,无需用户自己运维机器实例,并且提供网关可用性的 SLA 保障。除了大幅度降低人力成本、资源成本,还能提供更好的稳定性。


EDAS 场景的 Quick Start 示例


云原生网关支持多种服务发现机制,包括 K8s Service/MSE Nacos/MSE Zookeeper/EDAS 注册中心等。在 EDAS 场景下,微服务空间的注册中心,不论指定为 MSE Nacos 或者 EDAS 注册中心,云原生网关均可以发现 EDAS 上部署的服务,并创建路由进行转发。下面以使用 EDAS 注册中心为例,说明如何快速上手云原生网关。


3.png


Step 1. 购买创建云原生网关


购买链接:
https://common-buy.aliyun.com/?commodityCode=mse_ingresspre_public_cn


4.png


请注意 VPC 专有网络需要与 EDAS 中服务实例部署所在的 VPC 一致


Step 2.  创建服务来源

5.png


在服务管理一栏的来源管理中,创建服务来源,以部署在 Default 微服务空间下的 EDAS 应用为例,此处选择对应的微服务空间即可。DEFAULT_GROUP 为 EDAS 注册中心默认的服务分组,若应用配置使用了dubbo.registry.group、spring.cloud.nacos.discovery.group 等指定了服务分组时,需要额外添加对应的服务分组。


每个 EDAS 微服务空间对应一个服务来源,此处可以创建多个服务来源,各自对应不同的微服务空间。


Step 3.  创建服务


6.png


可以一键导入指定微服务空间下的所有服务


7.png


导入后可以看到每个服务对应的后端实例 IP,这表明服务发现已经 OK;健康检查状态说明网关到这些服务实例 IP 的网络联通性也是 OK 的。


Step 4.  创建路由

8.png


先填写路由匹配规则,可以分别针对 HTTP 路径/方法/请求头/请求参数配置匹配规则


9.png


点击下一步,选择目标服务进行路由,下拉列表可以看到 Step 3 中导入的 EDAS 服务。点击保存并上线,这条路由将立即生效。


作为全链路灰度的入口网关


利用 EDAS 成熟的微服务治理能力,配合云原生网关,可以轻松利用多套逻辑环境实现全链路灰度。EDAS 实现了基于字节码增强技术在编译时对开发框架进行功能拓展,这种方案业务无感知,不需要修改任何一行业务代码,即可拥有全链路灰度的治理能力,并且支持近 5 年内所有的 Spring Boot、Spring Cloud 和 Dubbo。实现架构如下图所示:


10.png


用不同的颜色来表示不同版本的灰度流量,可以看出无论是入口微服务网关还是微服务本身都需要识别流量,根据治理规则做出动态决策。当服务版本发生变化时,这个调用链路的转发也会实时改变。相比于利用机器搭建物理灰度环境,这种方案不仅可以节省大量的机器成本和运维人力,而且可以帮助开发者实时快速的对线上流量进行精细化的全链路控制。


下面以 SpringCloud 应用为例,演示如何在 EDAS 上,搭配云原生网关,实现全链路灰度。


Step 1. 部署服务


假设应用的架构由MSE云原生网关以及后端的微服务架构(Spring Cloud)组成,后端调用链路有 3 个:购物车(sc-A),交易中心(sc-B),库存中心(sc-C),可以通过客户端或者是 HTML 来访问后端服务,这些服务之间通过 EDAS 注册中心实现服务发现,调用链路为:sc-A -> sc-B -> sc-C。


可以通过镜像的方式部署这三个服务,三个服务的镜像地址分别是:
sc-A:
msecrinstance-registry.cn-hangzhou.cr.aliyuncs.com/mse-demo/spring-cloud-a:0.1
sc-B:
msecrinstance-registry.cn-hangzhou.cr.aliyuncs.com/mse-demo/spring-cloud-b:0.1
sc-C:
msecrinstance-registry.cn-hangzhou.cr.aliyuncs.com/mse-demo/spring-cloud-c:0.1


是用自定义镜像方式部署:


11.png


  • sc-A 服务 
     

服务 A 是需要暴露给网关,网关会通过注册中心的元数据信息中获取服务的版本信息,所以这里通过环境变量的方式分别设置。


为基线版本设置应用配置:
spring.cloud.nacos.discovery.metadata.version=base
为灰度版本设置:
spring.cloud.nacos.discovery.metadata.version=gray


同时在灰度版本的 pod annotations 中设置 alicloud.service.tag: gray,用于 Java Agent 区分当前服务所在的逻辑环境。


基线版本部署配置:


12.png


灰度版本部署配置:


13.png


  • sc-B 服务/sc-C 服务
     

这两个服务无需暴露给网关,除了镜像地址配置不同外,其余部署配置一样。只需在灰度版本的 pod annotations 中设置 alicloud.service.tag: gray,用于 Java Agent 区分当前服务所在的逻辑环境。


基线版本部署配置:

无需任何配置


14.png


灰度版本部署配置:


15.png


Step 2. 在云原生网关创建服务


前置步骤需要创建服务来源,在 Quick Start 中已经给出说明,此处不再赘述,直接到创建服务这步,导入 sc-A 这个服务。


16.png


导入成功后点击服务名称,进入服务策略配置,设置对应的服务版本。定义两个版本 base 和 gray,基于服务注册元数据信息中的 version 标签值进行区分( Step 1 中通过 spring.cloud.nacos.discovery.metadata.version 配置)


17.png


Step 3. 在云原生网关创建路由


首先创建两个不同的域名,用于区分基线环境和灰度环境:


18.png


分别创建两条路由:


19.png


精确匹配路径/a 转发给 sc-A 服务,通过标签路由的方式,将 gray.example.com/a 转发给 sc-A 服务的 gray 版本;将 base.example.com/a 转发给 sc-A 服务的 base 版本。以前者为例,配置方式如下:


指定路由匹配方式:


20.png


选择目标服务为标签路由,配置路由到 sc-A 服务的特定版本:


21.png


点击 gray 路由名称,对于这条灰度环境路由,通过设置请求头的方式,进行环境标签的设置,该请求头起到流量染色的作用,会在后续服务调用链上一路透传,Java Agent 会根据该请求头选择对应环境的服务


22.png


Step 4. 验证全链路灰度效果


路由配置完成后,实现了如下环境隔离的效果(本例中通过域名区分不同环境,还可以通过不同的路由匹配规则,实现基于 header、url 参数等区分不同环境):

23.png


  • 访问 base.example.com 路由到基线(base)环境
  • curl 命令


curl -H "Host: base.example.com" http://118.31.XX.XX/a


  • 执行结果


A[10.66.3.133] -> B[10.66.0.113] -> C[10.66.3.132]


  • 访问 gray.example.com 路由到灰度(gray)环境 
  • curl 命令


curl -H "Host: gray.example.com" http://118.31.XX.XX/a


  • 执行结果


Agray[10.66.2.3] -> Bgray[10.66.2.69] -> Cgray[10.66.2.195]


  • 如果入口应用 A 没有灰度(gray)环境,访问到 A 的基线(base)环境,又需要在 A->B 的时候进入灰度环境,则可以通过增加一个特殊的 Header:x-mse-tag 来实现,Header 的值是流量走向的环境的标签,例如 gray。 


  • curl 命令


curl -H "Host: base.example.com" -H "x-mse-tag: gray" http://118.31.XX.XX/a


  • 执行结果


A[10.66.3.133] -> Bgray[10.66.2.69] -> Cgray[10.66.2.195]


相关实践学习
通过EDAS实现K8s微服务应用的金丝雀发布
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ACK Serverless,体验微服务应用的部署、访问和高级发布能力。
SpringMVC框架入门
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts2等。 相关的阿里云产品企业级分布式应用服务 EDAS:企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Spring Cloud、Apache Dubbo(以下简称 Dubbo )等微服务运行环境,助力您的各类应用轻松上云。产品详情: https://www.aliyun.com/product/edas 
相关文章
|
1月前
|
监控 负载均衡 API
Apache Apisix轻松打造亿级流量Api网关
Apache APISIX 是一个动态、实时、高性能的 API 网关,提供负载均衡、动态上行、灰度发布、熔断、鉴权、可观测等丰富的流量管理功能。适用于处理传统南北向流量、服务间东西向流量及 k8s 入口控制。Airflow 是一个可编程、调度和监控的工作流平台,基于有向无环图 (DAG) 定义和执行任务,提供丰富的命令行工具和 Web 管理界面,方便系统运维和管理。
Apache Apisix轻松打造亿级流量Api网关
|
2月前
|
人工智能 Cloud Native 安全
从云原生到 AI 原生,网关的发展趋势和最佳实践
本文整理自阿里云智能集团资深技术专家,云原生产品线中间件负责人谢吉宝(唐三)在云栖大会的精彩分享。讲师深入浅出的分享了软件架构演进过程中,网关所扮演的各类角色,AI 应用的流量新特征对软件架构和网关所提出的新诉求,以及基于阿里自身实践所带来的开源贡献和商业能力。
259 12
|
3月前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
684 28
|
5月前
|
监控 网络协议 测试技术
流量回放新形态:基于网关 Access Log 发起
流量回放技术在性能测试和故障排除中至关重要。传统工具如 GoReplay、Tcpreplay 等存在高权限、配置复杂、登录态失效等痛点。PTS 推出基于 Access Log 的流量回放功能,自动生成压测场景,解决传统工具痛点,操作简单,一起来了解下吧~
7743 18
|
3月前
|
运维 监控 Kubernetes
高效应对突增流量:构建弹性高性能的SMS网关策略
本篇内容来自于ArchSummit全球架构师峰会演讲实录。
177 1
|
5月前
|
算法 网络协议 应用服务中间件
(五)网络编程之流量接入层设计:基于性能怪兽从零构建日均亿级吞吐量的网关架构!
在前篇关于《Nginx》的文章中曾经提到:单节点的Nginx在经过调优后,可承载5W左右的并发量,同时为确保Nginx的高可用,在文中也结合了Keepalived对其实现了程序宕机重启、主机下线从机顶替等功能。
|
7月前
|
负载均衡 Cloud Native 安全
云原生最佳实践系列 6:MSE 云原生网关使用 JWT 进行认证鉴权
本文档介绍了如何在 MSE(Microservices Engine)云原生网关中集成JWT进行全局认证鉴权。
1039 23
|
7月前
|
弹性计算 监控 安全
通过NAT网关和云防火墙防护私网出站流量安全的最佳实践
针对云上企业出站流量安全攻击,企业可以通过采用“NAT网关+NAT边界防火墙”方案实现出向流量有效监控保护,有效降低恶意软件攻陷风险、内部人员风险、数据泄露风险、供应链风险、出站流量合规风险等
147 3
|
10月前
|
运维 Kubernetes 应用服务中间件
Higress × OpenKruiseGame 游戏网关最佳实践
本文将演示 Higress 如何无缝对接 OKG 游戏服,并为其带来的优秀特性。
134535 12
|
7月前
|
人工智能 监控 安全
百万并发,API 网关抗住了亚运会流量高峰
本文主要介绍作为亚运会所有核心流量的入口,阿里云推出了一款百万并发规格的 API 网关,抗住了亚运会流量高峰,为亚运会提供强大的技术支持。

相关产品

  • 企业级分布式应用服务