K8s Ingress 为什么选择 MSE 云原生网关?|学习笔记(一)

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 快速学习 K8s Ingress 为什么选择 MSE 云原生网关?

开发者学堂课程【K8s Ingress 选择 MSE 云原生网关解析K8s Ingress 为什么选择 MSE 云原生网关?】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/965/detail/14886


K8s Ingress 为什么选择 MSE 云原生网关?

内容介绍:

一、K8s Ingress 简介

二、K8s Ingress 现状

三、K8s Ingress Provider 的发展趋势

四、K8s Ingress Provider 的新选择-云原生网关

五、云原生网关的优势


一、K8s Ingress 简介

1. 背景

K8s 集群内的网络与外部是隔离的,即在 K8s 集群外部无法直接访问集群内服务。

2. 分类

(1)Node Port

             图片1.png

Node Port 是在集群内部的 node 上开放一个端口,外部用户能够访问端口,同时内部服务可以从端口上接受外部流量。

方案的缺点每个端口只能挂载一个 Service ,端口范围限制为30000-32767。

(2)LoadBalancer

            图片2.png

LoadBalancer 是一个云厂商提供公网的SOB ,用于接受外部的请求,外部请求通过 LoadBalancer 利用Node Port转发给集群内部的 node  。

LoadBalancer 的缺点与 Node Port 本质上一致:

第一:一个LoadBalancer对应一个 Service ,无法与多 Service 复用。第二个缺点是 LoadBalancer 只能纯流量转发,无法基于规则路由规则二次分发流量。

(3)Ingress

     图片3.png

①注意

K8s Ingress只是K8s 的一种资源,不能提供路由分发能力。路由分发能力由 K8s Ingress 的具体实现方 K8s Ingress Provider 来完成。K8s Ingress 只是定义规则,K8s Ingress Provider 负责实现响应规则。注意区分 K8s Ingress 与 K8s Ingress Provider 。

②介绍

K8s Ingress 的流量首先要从外部的LoadBalancer 接受四层流量,流量接受到后会转发集群内部的 Ingress Provider ,Ingress Provider七层流量二次分发流量,并且可以挂载后端的多个 Service ,因此可以支持多个 Service 的共享。

二、K8s Ingress是目前三类方案中最多用户。因为可以基于规则进行路由二次分发,扮演路由器或者集群入口的角色还可以实现多个 Service 共享。


三、K8s Ingress 现状

图片4.png

从上图可知,K8s Ingress 标准的定义提供路由的能力较弱,无法满足实际业务诉求,例如常用的 redirect、rewrite 等。标准K8s Ingress无法解决。解决 K8s Ingress路由规则能力弱的方法为 Ingress Provider 各自扩展。

Ingress Provider可以分为两类:

一类为使用 metadata.annotations 扩展,例如 Nginx Ingress ;一类为使用新的 CRD,提供更丰富的路由能力,例如 Istio Ingress 。

目前 K8s 社区页面K8s Ingress Provider 提供商种类已达20多个,每个Provider 提供商具有各自的特色。


三、K8s Ingress Provider 的发展趋势

图片5.png

从上图( CNFF 2019年报告与2020年报告中截取的关于 Ingress Provider 的图示)可知,2019年 Nginx Ingress 仍然占据 Ingress Provider 首位,但2018-2019年增长为下降的趋势。包括第二名HAProxy也呈下降趋势。Envoy作为Ingress Provider2018-2019呈大幅增长趋势。

2020年报告显示占据首位为Nginx Ingress,但第二位由Envoy代替HAProxy。Envoy增长率从2019年的不足20% 增长为2020年的37%,成倍增长。在2020年图示下的标注为揭示了新用户选择 Envoy 的占比增长率为116%。

Ingress Provider领域Envoy 是最有可能超越 Nginx Ingress 的 Ingress Provider 的具体实现者,得益于 Envoy 相比于其它的在性能和扩展性上有一定优势。

除此之外 Switch mase 领域比较火爆,现在占据主流标准的就是 Istiod和 Envoy 的搭配,可以完全覆盖 Switch mase 东西向的场景和南北向的网关场景,一套方案就可以解决东西南北向的流量调度以及服务治理问题。


四、K8s Ingress Provider 的新选择-云原生网关

传统网关部署模式中,通常会采用两层的布局架构:第一层为流量网关,负责南北向流量调度及安全防护;第二层网关为微服务网关,它承担东西向流量调度及服务治理。

采用两层网关部署架构的原因:首先流量网关,所有业务都有共性需求,即对全局的流量调度以及安全防护,例如 htps 的安全证书卸载以及安全认证、限流,为共性诉求适合于流量网关。但是每个业务具有相关自身业务域的流量特点,希望可以根据特点进行流量的二次分发,因此诞生了微服务网关负责的是贴合业务域的服务治理以及东西向的流量调度。

图片6.png

两层网关部署架构适用于大企业、超大型企业,例如阿里巴巴目前采用两层网关架构。小型企业、中小型企业大部分业务场景使用一层网关架构即可。一层网关可以同时提供流量网关和微服务网关的能力,即同时提供东西南北向的流量调度及安全防护与服务治理能力,可以完全满足中小型企业的业务诉求。并且用户运维成本以及资源部署成本直降50%。

基于对网关演变的理解,云原生网关诞生。它基于开源 Istiod 与 Envoy 的技术架构,完全遵循开源的技术标准,不会产生锁定的问题。正如所展示的数据与前文 CNFF 报告所讲,使用Istiod 与 Envoy 架构一方面可以满足作为网关的诉求,另一方面可以与 Switch mase 进行技术整合,提供一套整体的解决方案。


五、云原生网关的优势

1. 性能更强劲

在真实的压测对比下,压测模型是说网关是采用4*16C32G , 后端业务采用6*16C32G。后端业务 pode的部署数量大于网关,可以保证后端业务不成为一个压测时的性能瓶颈。对比的软件使用Istiod 与 Envoy 组合与社区的Nginx Ingress做对比。

图片7.png

由图所示, ACK的Nginx Ingress是阿里云的容器服务,基于社区Nginx Ingress的一个调优版本,即对里面的一些参数做了一个性能的二次调优。

压测对比两个软件而压测结果对比了三组压测模型。三组分别在后端返回的包大小是在2561024、4096,RT跟TPS的对比。压测结果比较明显:第一,在CPU30%到40%的情况下,云原生网关的TPS相比于Nginx Ingress的要高出约90%。第二,在CPU超过40%之后,Nginx Ingress的吞吐会非常的不稳定,呈现一种波动的状态。同时云原生网关会非常稳定,并且TPS与CPU几乎是保持一个线性的增长。

进一步分析可知,在Nginx Ingress当中,它大量的使用了 Lua 脚本,实现动态的特性。传统的NES在做配置变更的时候,是需要做reload调整。而在Nginx Ingress下,大部分的场景不需要做reload调整。只有在HTPS证书变更时需要做reload 。但是对于后端例如20分钟service节点的end point的一些变化,不需要做 reload 。能够实现这一动态的特性的原因是大量的使用了Lua脚本。Lua脚本实际上对性能影响较大。

图片8.png

截图是来自于从K8S Nginx Ingress社区里面部分用户去做了一个性能测试的对比,比如基线版本使用Nginx Ingress的0.32版本,对应的是13万的RPS,那么第一步压测关掉log _ by _ Lua _ block Lua模块, RPS出现80%-90%的提升。关掉body _ filter _ by_ Lua_ block, RPS 又产生变化。

通过这组数据,可以直观的发现 Lua脚本对于源生 Nginx 的性能影响较大。使用ECU加 EvovyNginx Ingress对比时,性能会更强,甚至高于90%。高负载或高吞吐时,Nginx Ingress会出现非常大的抖动,是源于Lua。

展示 K8S Nginx Ingress社区关于性能测试的一个具体的依据: Poor performance in benchmark 。

 

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
缓存 Kubernetes Docker
容器服务ACK常见问题之容器服务ACK ingress websocket配置失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
Kubernetes 负载均衡 应用服务中间件
kubernetes—Ingress详解
kubernetes—Ingress详解
264 0
|
Kubernetes 应用服务中间件 nginx
|
Kubernetes 应用服务中间件 nginx
k8s ingress不生效的bug 解决了。
k8s ingress不生效的bug 解决了。
600 0
|
Kubernetes 应用服务中间件 nginx
Kubernetes上安装Metallb和Ingress并部署应用程序
Kubernetes上安装Metallb和Ingress并部署nginx应用程序,使用LoadBalancer类型的KubernetesService
840 119
|
Kubernetes 负载均衡 应用服务中间件
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
2202 1
|
10月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
347 2
|
缓存 Kubernetes 负载均衡
在K8S中,ingress 有何作用?
在K8S中,ingress 有何作用?
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
1908 0
|
Kubernetes 应用服务中间件 API
【Ingress 秘籍】集群进出流量的总管:揭秘 Kubernetes 中 Ingress 的终极奥秘!
【8月更文挑战第25天】Ingress是Kubernetes中用于管理HTTP与HTTPS流量进入集群的核心功能。作为集群内外通信的桥梁,Ingress通过定义规则将外部请求导向内部服务。本文详细介绍了Ingress的基本概念、配置方法及其实现方式。通过使用不同的Ingress控制器(如Nginx、Traefik等),用户可以根据需要选择最适合的方案。文中还提供了示例代码展示如何创建服务、部署应用及配置Ingress规则。
404 6

热门文章

最新文章

推荐镜像

更多