网络营销网站建设存在问题,如何建设个人网站,开一家传媒公司需要多少钱,上海人才网官网下载为了避免混淆#xff0c;我们先对一些关键定义做一些厘清#xff1a;
传统网关#xff1a;未作容器化改造#xff0c;未启用 K8s#xff0c;通过流量网关与业务网关两层网关来构建#xff0c;流量网关提供全局性的、与后端业务无关的策略配置#xff0c;例如 Tengine 就…为了避免混淆我们先对一些关键定义做一些厘清
传统网关未作容器化改造未启用 K8s通过流量网关与业务网关两层网关来构建流量网关提供全局性的、与后端业务无关的策略配置例如 Tengine 就是典型的流量网关业务网关提供独立业务域级别的、与后端业务紧耦合策略配置随着应用架构模式从单体演进到现在的分布式微服务业务网关也有了新的叫法 - 微服务网关。K8s 网关即云原生网关也被称为下一代网关Ingress 成为 K8s 生态的网关标准促使流量网关和业务网关合二为一。基于 Ingress 规范的实现主要分为基于 Nginx 和基于 Envoy 两大阵营基于 Nginx 的 Nginx Ingress Controller 是目前大多数 K8s 集群的选择基于 Envoy 的实现作为后起之秀大有赶超之势。MSE 云原生网关是基于 Envoy做了深度优化的云上服务。
本文将从性能和成本、可靠性、安全性 3 方面对两大开源实现进行比对希望对正在做 K8s 网关选型的企业有所借鉴。
性能和成本
MSE 云原生网关的吞吐性能几乎是 Nginx Ingress Controller 的一倍尤其是传输小文本时性能优势会更明显如下图所示网关 CPU 使用率达到 30% 时的吞吐对比 网关规格16 核 32 G * 4 节点 ECS 型号ecs.c7.8xlarge 当 CPU 负载升高时吞吐差距会更加明显下图是 CPU 使用率达到 70% 时的情况 高负载下 Nginx Ingress Controller 吞吐下降原因是出现了 pod 重启详情见下一节“可靠性”中的分析。
随着网络安全愈加受重视现在互联网上已经普遍使用 HTTPS 进行传输加密在网关侧用于实现 HTTPS 的 TLS 非对称加密算法是占用 CPU 资源的大头。针对此场景MSE 云原生网关使用了 CPU SIMD 技术实现了 TLS 加解密算法的硬件加速 从上图压测数据可以看出使用 TLS 硬件加速后相比普通 HTTPS 请求 TLS 握手时延降低一倍极限 QPS 提升 80%以上。
基于以上数据使用 MSE 云原生网关只需一半的资源就能达到 Nginx Ingress Controller 的吞吐在做过硬件加速优化的 HTTPS 场景下吞吐还能进一步提升。
可靠性
前文提到高负载下Nginx Ingress Controller 会出现 pod 重启导致吞吐下降导致 pod 重启的原因主要有 2 点
存活健康检查livenessProbe在高负载时容易超时失败社区在 0.34 版本通过减少冗余检测进行了一定的优化但问题仍然存在。在开启了 prometheus 采集监控指标的情况下高负载时会出现 OOM导致容器被 kill详细原因见相关 issuehttps://github.com/kubernetes/ingress-nginx/pull/8397
这两个问题本质上皆是由于 Nginx Ingress Controller 的部署架构不合理导致。其控制面Go 实现的 Controller和数据面Nginx进程混跑在一个容器内高负载下数据面进程和控制面进程出现了 CPU 抢占。其中控制面进程负责了健康检查和监控指标采集因为没有足够的 CPU 导致请求积压引起 OOM 以及健康检查超时。
这种情况是极危险的会在高负载下引发网关的雪崩效应对业务造成严重影响。MSE 云原生网关使用了数据面和控制面隔离的架构在架构上具备可靠性优势 从上图可以看到MSE 云原生网关并不部署在用户的 K8s 集群中而是纯托管的模式这种模式在可靠性上还有更多优势
不会与业务容器混跑在一个 ECS 节点上网关的多个实例不会混跑在一个 ECS 节点上提供网关可用性的 SLA 保障
如果使用 Nginx Ingress Controller 要实现高可靠部署一般需要独占 ECS 节点同时还需要部署多个 ECS 节点来避免单点故障这种情况下资源成本会直线上升。此外Nginx Ingress Controller 因为部署在用户集群中也无法提供网关可用性的 SLA 保障。
安全性
Nginx Ingress Controller 的不同版本都还存在着一些 CVE 漏洞隐患具体影响版本见下表 从 Nginx Ingress Controller 迁移到 MSE 云原生网关后将一次性修复所有 CVE 漏洞隐患并且MSE 云原生网关提供了平滑升级方案一旦出现新的安全漏洞可以快速对网关版本进行升级同时确保升级过程对业务影响最小化。
此外MSE 云原生网关内置了阿里云 Web 应用防火墙WAF相比传统 WAF 用户请求链路更短、RT 更低且相比Nginx Ingress Controller 可以做到细粒度路由级防护使用成本是目前阿里云 Web 应用防火墙架构的 2/3。 MSE 云原生网关
阿里云容器服务应用市场已经上架 MSE 云原生网关可用于替代默认安装的网关组件 Nginx Ingress Controller。 MSE 云原生网关在阿里集团内部作为网关中间件已经大规模使用其强劲的性能和可靠的稳定性已被多年双十一流量所验证。
在 K8s 容器服务场景下对比默认安装的 Nginx Ingress Controller主要有以下优势
更强劲的性能更合理的架构可以将网关资源成本降低至少 50%更好的可靠性和 SLA 保障纯托管免运维背靠阿里云技术团队提供支持更优的安全性保障一次性解决现存 CVE 安全漏洞隐患且内置 WAF 防护功能
同时在路由策略、灰度治理、可观测等方面提供了更丰富的功能并且支持使用多种语言开发自定义的扩展插件详细对比请参考 https://help.aliyun.com/document_detail/424833.html
平滑迁移方案
部署 MSE 云原生网关并不直接影响原有网关流量通过 DNS 权重配置可以实现业务流量的平滑迁移对后端业务完全无感知核心的流量迁移过程如下图所示 完整步骤如下
步骤一在容器服务的应用市场中找到 mse-ingress-controller并安装到目标 ACK 集群步骤二在 K8s 中配置 MseIngressConfig 配置指引自动创建指定规格的 MSE 云原生网关步骤三从 Ingress 的 address 字段中获取 MSE 云原生网关的 IP本地绑定 host将业务域名解析到该 IP完成业务测试步骤四修改业务域名的 DNS 权重配置添加云原生网关 IP并逐步调高权重进行流量灰度步骤五完成灰度后将业务域名原先的 IP 从 DNS 配置中移除实现全部流量切到云原生网关
作者张添翼(澄潭)
原文链接 本文为阿里云原创内容未经允许不得转载。