迁移方式和原理介绍

本文介绍Nginx Ingress迁移MSE Ingress的方式以及原理。

什么是MSE Ingress

MSE Ingress是在MSE云原生网关之上提供更为强大的Ingress流量管理方式。MSE Ingress将流量网关、微服务网关和安全网关三合一,兼容K8s Ingress标准API,解决了三层网关架构独立设计和独立运维导致的资源消耗大、性能损耗大、稳定性难控、安全防护复杂等难题。

MSE Ingress优势

相较于传统网关,MSE Ingress在资源成本、性能、安全性和易用性上具有如下优势:

  • 遵循标准:MSE Ingress严格遵循K8s Ingress标准API,支持networking.k8s.io/v1beta1networking.k8s.io/v1

  • 兼容性强:兼容Nginx Ingress注解90%以上的使用场景,Nginx Ingress配置无需修改即可在MSE Ingress生效。关于MSE Ingress支持的注解汇总信息,请参见MSE Ingress支持的Annotation

  • 扩展丰富:相较于Nginx Ingress原生注解,MSE提供功能更丰富的扩展注解,例如认证鉴权、Header控制、限流和安全防护等。更多关于MSE Ingress增强的扩展注解,请参见MSE Ingress高级用法

  • 架构安全:采用数据面和控制面分离部署,实现资源隔离,架构设计更安全。

  • 性能强劲:支持HTTPS硬件加速、QPS性能提升。

迁移Nginx Ingress至MSE Ingress的必要性

Nginx Ingress目前存在的主要问题:

  • 重大安全漏洞:Nginx Ingress在安全领域出现了高危安全漏洞CVE-2021-25745CVE-2021-25746CVE-2021-25748

  • 与Ingress APIVersion和K8s集群版本耦合严重,影响升级K8s集群的进程。ACK Kubernetes 1.24版本中彻底弃用了v1beta1版本的Ingress资源,同时Nginx Ingress Controller在1.0.0及以上版本才支持v1的Ingress资源,导致升级ACK Kubernetes 1.24版本必须提前升级Nginx Ingress Controller。

  • 升级Nginx Ingress Controller的流程复杂且容易出现流量损失。

    • 需要额外部署一套新版本的Nginx Ingress Controller。

    • 需要手动修改模板参数以完成应用版本的升级。

    • 只支持基于DNS方式进行老网关迁移流量到新网关,时效性差,出现问题时无法快速回滚。

将Nginx Ingress网关迁移至MSE Ingress后,可将Ingress网关与Ingress APIVersion、K8s集群版本解耦,解决后续K8s集群升级依赖Nginx Ingress Controller版本的困扰。此外,MSE Ingress提供了迁移场景的产品化工具,可以采用复用SLB的方式做细粒度切流,提高迁移过程中的时效性和稳定性。

迁移方式

MSE Ingress提供了如下两种迁移方式:

  • 复用Nginx Ingress SLB

    原理:在MSE Ingress中复用ACK集群中Nginx Ingress Controller的Service创建的SLB,MSE Ingress的节点自动添加到原SLB的已有监听的虚拟服务器组中,最终通过设置流量权重完成流量迁移。

    在保留原有流量链路可用的前提下完成MSE Ingress复用已有SLB,以及自动同步原有的Nginx Ingress规则。最后在验证无误后,逐步切流到MSE Ingress,整个过程可保留原有流量入口SLB不变,不需要变更DNS切流。

    image.png

  • 基于DNS解析

    原理:在DNS服务器中对于所有Nginx Ingress中关联的业务域名添加MSE SLB的解析结果,部分DNS服务商提供权重方式控制Nginx SLB和MSE SLB的流量比。

    image.png

方式对比

迁移方式

时效性

切流级别

权重切流

操作复杂度

复用Nginx Ingress SLB

SLB级别

支持

简单

基于DNS解析

域名级别

依赖DNS服务商

与域名数量成正比