Todos los productos
Search
Centro de documentos

Microservices Engine:Migrate from Nginx Ingress to MSE Ingress

Última actualización: Sep 17, 2026

Este tema describe cómo migrar un Nginx Ingress autogestionado a MSE Ingress mediante la herramienta de migración visual disponible en la consola de MSE.

Requisitos previos

  • Se desplegó un Nginx Ingress Controller en su clúster de Container Service.

  • Debe contar con una instancia de Cloud Native Gateway disponible. Si no tiene una, consulte Create an MSE Cloud Native Gateway.

Notas de uso

  • El proceso de migración no copia sus configuraciones de Ingress. En su lugar, permite que MSE Ingress reutilice dichas configuraciones al observar y analizar los cambios de sus recursos de Ingress existentes en tiempo real.

  • Durante la migración, tanto el Nginx Ingress Controller como MSE Ingress reflejan cualquier cambio que usted aplique a las configuraciones de Ingress.

  • Una vez finalizada la migración, no elimine ninguna configuración de Ingress que esté en uso. La migración solo habilita a MSE Ingress para observar y analizar las configuraciones de Ingress actuales y futuras.

  • Después de la migración, debe mantener las configuraciones de Ingress existentes y futuras asociadas con la IngressClass original. Por ejemplo, si un recurso de Ingress especificaba previamente ingressClassName: nginx en su spec, debe continuar haciéndolo tras la migración.

Métodos de migración

Details

¿Qué es MSE Ingress?

MSE Ingress utiliza Cloud Native Gateway para ofrecer una gestión de tráfico de Ingress potente. Combina una puerta de enlace de tráfico, una puerta de enlace de microservices y una puerta de enlace de seguridad en una única solución unificada. Además, es totalmente compatible con la API estándar de Kubernetes Ingress. Este enfoque integrado resuelve problemas comunes de las arquitecturas de puertas de enlace de tres capas, como el alto consumo de recursos, la degradación del rendimiento, los desafíos de estabilidad y la complejidad en la gestión de seguridad derivados de diseños y operaciones independientes.

Ventajas de MSE Ingress

MSE Ingress ofrece las siguientes ventajas frente a las puertas de enlace tradicionales en cuanto a costos, rendimiento, seguridad y usabilidad:

  • Cumplimiento de estándares: MSE Ingress se adhiere estrictamente a la API estándar de Kubernetes Ingress y admite tanto networking.k8s.io/v1beta1 como networking.k8s.io/v1.

  • Alta compatibilidad: MSE Ingress es compatible con más del 90 % de los casos de uso de las anotaciones de Nginx Ingress. Esto permite que sus configuraciones actuales funcionen en MSE Ingress sin modificaciones. Para consultar la lista de anotaciones admitidas, vea Annotations supported by MSE Ingress.

  • Amplias extensiones: En comparación con las anotaciones nativas de Nginx Ingress, MSE Ingress proporciona extensiones más potentes para funciones como autenticación y autorización, control de encabezados, limitación de velocidad y protección de seguridad. Para obtener más información sobre estas anotaciones extendidas, consulte Advanced features of MSE Ingress.

  • Arquitectura segura: Sus planos de datos y de control separados garantizan el aislamiento de recursos y generan una arquitectura más segura.

  • Alto rendimiento: MSE Ingress admite aceleración por hardware para HTTPS y ofrece un mejor rendimiento de QPS.

¿Por qué migrar a MSE Ingress?

Nginx Ingress presenta varios problemas importantes:

  • Vulnerabilidades de seguridad críticas: se han descubierto vulnerabilidades de alto riesgo en Nginx Ingress, entre ellas CVE-2021-25745, CVE-2021-25746 y CVE-2021-25748.

  • Acoplamiento estrecho con la API de Ingress y las versiones del clúster de Kubernetes: este acoplamiento puede bloquear las actualizaciones del clúster. La versión v1beta1 del recurso de Ingress está obsoleta en los clústeres administrados de ACK y en los clústeres de ACK Serverless de la versión 1.24 o posterior, así como en los clústeres de Kubernetes ACS de la versión 1.26 o posterior. El Nginx Ingress Controller solo admite el recurso de Ingress v1 en las versiones 1.0.0 y posteriores. Por lo tanto, debe actualizar el Nginx Ingress Controller antes de actualizar su clúster a estas versiones.

  • Proceso de actualización complejo y riesgoso: actualizar el Nginx Ingress Controller puede ser complicado y provocar pérdida de tráfico.

    • Es necesario desplegar por separado una nueva versión del Nginx Ingress Controller.

    • Se requiere modificar manualmente los parámetros de la plantilla para actualizar la versión de la aplicación.

    • Solo se admite la migración de tráfico basada en DNS desde la puerta de enlace antigua hacia la nueva. Este método presenta alta latencia y no permite un rollback rápido si ocurren problemas.

Migrar de Nginx Ingress a MSE Ingress desacopla su puerta de enlace de Ingress de la API de Ingress y de las versiones del clúster de Kubernetes. Esto elimina la dependencia de la versión del Nginx Ingress Controller para futuras actualizaciones del clúster. Además, MSE Ingress proporciona una herramienta de migración dedicada que le permite reutilizar una instancia de SLB existente para realizar un cambio de tráfico detallado, lo cual mejora la velocidad y la estabilidad del proceso.

Métodos de migración

MSE Ingress ofrece dos métodos de migración:

  • Reutilizar el SLB de Nginx Ingress

    Principio: este método reutiliza la instancia de SLB creada por el Service del Nginx Ingress Controller en su clúster administrado de ACK, de ACK Serverless o de ACS. Los nodos de MSE Ingress se agregan automáticamente al grupo de servidores virtuales del listener de SLB existente. Luego, la migración de tráfico se completa al ajustar los pesos del tráfico.

    Este enfoque permite que MSE Ingress reutilice la instancia de SLB existente y sincronice automáticamente sus reglas de Nginx Ingress, manteniendo disponible la ruta de tráfico original. Una vez que compruebe que todo funciona según lo esperado, podrá trasladar el tráfico gradualmente hacia MSE Ingress. Todo este proceso se ejecuta sin cambiar el punto de entrada de SLB original, por lo que no se requieren modificaciones de DNS.

    image.png

  • Usar resolución basada en DNS

    Principio: en su servidor de DNS, agregue un registro que asigne todos los nombres de dominio de negocio asociados con Nginx Ingress a la dirección del SLB de MSE. Algunos proveedores de DNS permiten usar registros ponderados para controlar la proporción de tráfico entre el SLB de Nginx y el SLB de MSE.

    image.png

Comparación

Método de migración

Velocidad

Granularidad

Cambio ponderado

Complejidad

Reutilizar el SLB de Nginx Ingress

Rápida

Nivel de SLB

Compatible

Baja

Usar resolución basada en DNS

Lenta

Nivel de dominio

Depende del proveedor de DNS

Aumenta con la cantidad de nombres de dominio

Flujo de trabajo de migración

Cloud Native Gateway proporciona una herramienta de migración a la nube que lo guía paso a paso para migrar sus configuraciones de enrutamiento y trasladar el tráfico.

image

Paso 1: Migrar las reglas de enrutamiento

  1. Inicie sesión en la consola de MSE. En la barra de navegación superior, seleccione una región.

  2. En el panel de navegación izquierdo, elija Cloud Native Gateway > Migration to Cloud.

  3. En la página Migration to Cloud, haga clic en Add Task.

  4. En el panel Create Migration Configuration, configure los parámetros.

    Cloud Native Gateway observa todos los recursos de Ingress del clúster de contenedores seleccionado que estén asociados con la IngressClass de origen. A continuación, aplica sus configuraciones de nombre de dominio y de enrutamiento.

    Importante

    La migración no se permite si la instancia de Cloud Native Gateway de destino ya está asociada con este clúster de contenedores mediante una IngressClass diferente. Asegúrese de que la IngressClass especificada aquí coincida con la que ya está configurada para el clúster.

    Parámetro

    Descripción

    Cloud-native Gateway

    Seleccione la instancia de Cloud Native Gateway de destino para la migración. La versión de la puerta de enlace debe ser 1.2.22 o posterior.

    Container Service ACK/ACK Serverless cluster

    Seleccione el clúster de Container Service que contiene el Nginx Ingress que desea migrar. Asegúrese de que Cloud Native Gateway y el clúster de contenedores se encuentren en la misma VPC.

    Source Ingress Class

    Especifique la IngressClass asociada con los recursos de Ingress que desea migrar.

    Nota
    • Solo puede especificar una IngressClass.

    • Si deja este parámetro vacío, se ignora la IngressClass y la puerta de enlace observa todos los recursos de Ingress del clúster.

    Description

    Introduzca una descripción de hasta 64 caracteres.

  5. Haga clic en Next.

    A partir de este momento, Cloud Native Gateway observa automáticamente los cambios en todos los recursos de Ingress que se encuentran en el clúster de contenedores seleccionado y están asociados con la IngressClass de origen. Después, aplica las configuraciones de nombre de dominio y de enrutamiento de dichos recursos.

    1. Suponga que tiene un Ingress llamado httpbin en el clúster de contenedores de origen.

    2. En la consola de Cloud Native Gateway, verá que el Ingress del clúster de origen se sincroniza automáticamente con la puerta de enlace de destino, lo que crea las configuraciones de dominio y de enrutamiento correspondientes. La página de detalles de Routing Settings se muestra de la siguiente manera:

      1. Asistente de configuración:

        1. Agregar origen de servicio

          Puede usar K8s, Nacos, Zookeeper, SAE, EDAS y Function Compute (FC) como orígenes de servicio. Es posible agregar un recurso existente de su VPC actual y luego seleccionar un servicio registrado a partir de él.

          Botón: Add service source

        2. Asociar servicio de backend

          Distribuye las solicitudes hacia un servicio de backend. Este servicio se puede descubrir dinámicamente desde un origen de servicio o especificarse mediante una dirección o un nombre de dominio estático.

          Botón: Associate backend service

        3. Vincular nombre de dominio

          Proporciona gestión multidominio. Al vincular un nombre de dominio, puede asociar protocolos, certificados y configuraciones de enrutamiento con distintos dominios.

          Botón: Bind domain name

        4. Crear ruta

          Una ruta contiene reglas de coincidencia basadas en nombres de dominio, rutas, métodos, parámetros de solicitud y encabezados de solicitud. Cuando un usuario accede a una ruta, la solicitud se reenvía al servicio de backend correspondiente.

          Botón: Create route

      2. Columnas de la lista: Route name, Status, WAF protection, Source, Route condition, Associated domain name, Destination service type, Destination service y Actions.

Paso 2: Comprobar las rutas

Compruebe la compatibilidad de las anotaciones de Ingress observadas:

  • Si no hay anotaciones de Ingress incompatibles, continúe con el siguiente paso.

  • Si encuentra anotaciones de Ingress incompatibles, puede enviar un ticket para obtener una solución.

    Importante
    • Puede ignorar la anotación nginx.ingress.kubernetes.io/service-weight si su valor es "". Esta anotación se agrega de forma predeterminada en versiones anteriores de la consola de Container Service y no tiene ningún efecto.

    • Durante la migración, no elimine las anotaciones incompatibles que estén en uso. Estas anotaciones aún son analizadas por el Nginx Ingress Controller y afectan el tráfico de su negocio. Puede agregar anotaciones extendidas de MSE al recurso de Ingress para lograr la misma funcionalidad en MSE Ingress. Una vez que todo el tráfico haya migrado a MSE Ingress, podrá quitar las anotaciones incompatibles según sea necesario.

Paso 3: Seleccionar el método de traslado

Pruebas antes de trasladar el tráfico

Antes de trasladar el tráfico de producción, ejecute una prueba local. Modifique su archivo hosts local para resolver el nombre de dominio de negocio hacia el SLB de Cloud Native Gateway. Utilice una herramienta como curl o Postman para comprobar que todo el tráfico se comporta según lo esperado.

Seleccionar el método de traslado

Reutilizar el SLB de origen

Principio: el proceso agrega las instancias de nodo de Cloud Native Gateway al grupo de servidores de backend del SLB de origen. Durante la migración, el SLB distribuye el tráfico de negocio hacia Cloud Native Gateway según los pesos configurados. Una vez finalizada la migración, el SLB reenvía todo el tráfico a Cloud Native Gateway.

A continuación se describen los parámetros correspondientes.

Parámetro

Descripción

ACK Cluster Namespace

Seleccione el namespace donde se ubica el Service de Kubernetes asociado con el SLB de Nginx Ingress.

ACK Cluster SLB Service

Seleccione el nombre del Service de Kubernetes asociado con el SLB de Nginx Ingress.

SLB ID

Haga clic en la instancia de SLB para confirmar que es el destino correcto para la migración.

Ports and Backend Servers

Seleccione el puerto del listener y el protocolo de la puerta de enlace (HTTP/HTTPS) de la instancia de SLB de origen. El grupo de servidores virtuales de destino aparece automáticamente.

Nota

Asegúrese de seleccionar el puerto y el protocolo correctos para evitar la pérdida de tráfico.

Resolución de DNS

Acceda al servicio de resolución de dominios de su proveedor de DNS y agregue asignaciones hacia la dirección del SLB de Cloud Native Gateway para todos los dominios involucrados en la migración de rutas. Se recomienda utilizar la resolución ponderada de DNS para trasladar el tráfico de forma gradual.

Paso 4: Trasladar el tráfico

Reutilizar el SLB de origen

Paso 1: Modificar el SLB

Cuando hace clic en Modify SLB, el sistema desvincula automáticamente la instancia de SLB de la administración de Container Service y cambia el algoritmo de programación del listener a Weighted Round Robin.

Importante

Este paso desvincula la instancia de SLB de la administración de Container Service. Después de la desvinculación, la instancia de SLB deja de rastrear los cambios de dirección IP de los Pods en el Nginx Ingress Controller. Continúe rápidamente con el siguiente paso para modificar las anotaciones y volver a asociar el Service de Kubernetes con la instancia de SLB.

Paso 2: Sobrescribir las anotaciones del servicio

Una vez completado el paso 1, vaya a la consola de Container Service. Elimine manualmente todas las anotaciones existentes del Service de Kubernetes que seleccionó en el paso Switch Traffic. Luego, copie las anotaciones generadas automáticamente en la página Traffic Switchover y agréguelas al Service de Kubernetes de destino. Este paso reconfigura el Service de Kubernetes original para que reutilice la instancia de SLB. Después de la modificación, haga clic en Precheck. Si la comprobación es exitosa, podrá continuar con el siguiente paso.

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: lb-bp1lc0huzf0o1ks333yo1
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: '100'
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: 'rsp-bp1uybv6iy50i:80,rsp-bp10s0ndrfvdt:443'
  creationTimestamp: '2023-11-29T07:14:40Z'
  finalizers:
    - service.k8s.alibaba/resources
  labels:
    app: nginx-ingress-lb
    service.beta.kubernetes.io/hash: 39a51bd97b88f6eaf232da33434ce2fe44ae094b7b4d2b9bb9126eb7
    service.k8s.alibaba/loadbalancer-id: lb-bp1lc0huzf0o1ks333yo1
  managedFields:
    - apiVersion: v1
      fieldsType: FieldsV1
      fieldsV1:
        'f:metadata':
          'f:annotations':
            .: {}
            'f:kubectl.kubernetes.io/last-applied-configuration': {}
            'f:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain': {}
            'f:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout': {}
            'f:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type': {}
            'f:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id': {}
          'f:labels':
            .: {}
            'f:app': {}

Si los pods de la aplicación dentro del mismo clúster de contenedores acceden a la puerta de enlace de Nginx Ingress, también debe agregar la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-hostname: mse-ingress-migration al Service. Antes de agregarla, asegúrese de que el control de acceso por IP esté deshabilitado para la instancia de SLB asociada con el Service. Esta anotación obliga a los pods de la aplicación a acceder a la puerta de enlace de Nginx Ingress a través del SLB. De esta manera, evita que Kube Proxy optimice el tráfico para omitir el SLB y acceder directamente al pod de Nginx Ingress.

Paso 3: Traslado ponderado del tráfico

Establezca el peso de tráfico para la instancia de Cloud Native Gateway. Defina un valor de 1 a 100 según las necesidades de su negocio. Se recomienda un valor inicial entre 1 y 10.

  • Este valor representa la suma de los pesos de todos los nodos de Cloud Native Gateway. La instancia de SLB distribuye el tráfico según la proporción de peso entre los nodos de Cloud Native Gateway y los nodos de Nginx Ingress dentro del grupo de servidores virtuales. El peso total de los nodos de Nginx Ingress es 100 de forma predeterminada. Por lo tanto, si establece el peso de Cloud Native Gateway en 100, recibirá la mitad del tráfico. Del mismo modo, si define el peso en 50, recibirá un tercio del tráfico.

  • Durante la migración, puede monitorear las métricas de la puerta de enlace en el panel de monitoreo de Cloud Native Gateway. Así comprobará el estado de la puerta de enlace y se asegurará de que las métricas del negocio permanezcan estables.

    • Si los resultados son los esperados, aumente el peso gradualmente. Espere como mínimo 3 minutos entre cada cambio de peso, ya que el backend aplica la configuración de forma asíncrona.

    • Si los resultados no son los esperados, establezca el peso en 0 para detener la migración.

  • En la consola de Container Service, puede reducir el valor de la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight del Service de Kubernetes seleccionado para reusing the original cluster's SLB. Con esto aumentará indirectamente el peso de Cloud Native Gateway. En concreto, cuando el valor de esta anotación es 0, todo el tráfico se dirige a Cloud Native Gateway.

  • Dado que SLB es un load balancer de capa 4, controla el tráfico a nivel de conexión. El valor de peso no permite controlar con precisión la proporción de distribución a nivel de solicitud.

  • Si la tasa de éxito disminuye después de trasladar el tráfico, puede ejecutar un fast rollback al establecer este peso en 0.

Nota

Si necesita permanecer en estado de migración durante un periodo prolongado y ajustar los pesos de tráfico entre Nginx Ingress y MSE Ingress en cualquier momento, manténgase en este paso. Una vez que compruebe que el tráfico se comporta según lo esperado y ya no requiera revertir todo el tráfico hacia Nginx Ingress, haga clic en Complete Traffic Verification para continuar.

Importante

Después de hacer clic en Complete Traffic Verification, ya no podrá modificar los pesos.

Paso 4: Completar el cambio de tráfico

En la consola de Container Service, establezca en 0 el valor de la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight para el Service de K8s que seleccionó en Step 3: Select a traffic shifting method, o bien elimine el recurso de Service. A continuación, los nodos del Nginx Ingress Controller se quitan automáticamente del SLB y todo el tráfico del SLB se redirige a Cloud Native Gateway. Haga clic en Complete Migration para finalizar la tarea de migración.

Resolución de DNS

Acceda al servicio de resolución de dominios de su proveedor de DNS y agregue asignaciones hacia la dirección del SLB de Cloud Native Gateway para todos los dominios involucrados en la migración de rutas. Se recomienda utilizar la resolución ponderada de DNS para trasladar el tráfico de forma gradual.

Rollback rápido

Si surgen problemas inesperados durante la migración del tráfico, utilice los siguientes métodos para ejecutar un rollback rápido y restaurar el tráfico hacia el Nginx Ingress Controller.

  • Reutilizar el SLB del clúster de origen: establezca el peso en 0. Esto detiene la migración.

  • Usar DNS para resolver hacia el SLB de Cloud Native Gateway: en su proveedor de DNS, quite la dirección del SLB de Cloud Native Gateway para todos los dominios de negocio.

Paso 5: Finalizar la migración

Reutilizar el SLB de origen

Si utilizó el método de traslado de tráfico por SLB, asegúrese de que el tráfico se haya trasladado por completo en todas las instancias de SLB correspondientes. Una vez finalizado el traslado para todas las instancias, podrá eliminar el Service de Kubernetes y el Nginx Ingress Controller según sea necesario.

Resolución de DNS

Si utilizó el método de traslado de tráfico por DNS y las direcciones IP de todos sus dominios de negocio ahora resuelven hacia la lista de direcciones del SLB de la puerta de enlace de MSE, podrá eliminar el Service de Kubernetes y el Nginx Ingress Controller según sea necesario.

Solución de problemas

Bad request: mse.backend.gw.MIGRATE_INGRESS_CLASS_CONFLICT

Este error indica que su puerta de enlace ya está asociada con el clúster de Container Service y tiene habilitada la observación de Ingress, pero la IngressClass especificada para esta migración no coincide con la configuración de observación original. Asegúrese de que las configuraciones de IngressClass sean consistentes.

Si necesita modificar la IngressClass configurada previamente, elija uno de los siguientes métodos según su entorno:

  • Si gestiona MSE Ingress mediante un MseIngressConfig, consulte Access Container Service and Container Compute Service by using MSE Ingress para modificarlo.

  • Si no gestiona MSE Ingress mediante un MseIngressConfig, vaya a la consola de la puerta de enlace, busque el origen de servicio y modifique las opciones de observación de Ingress para el clúster de contenedores correspondiente.

Bad request: mse.backend.gw.MIGRATE_SERVICE_ANNOTATION_NOT_MATCH [annotation is not expected]

Este error indica que las anotaciones de su Service de Kubernetes no se han actualizado a los valores obligatorios.

Bad request: mse.backend.gw.MIGRATE_SERVICE_NOT_MATCH [weight hasn't been 0 or service hasn't been deleted]

Esto indica que el valor de la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight del Service de K8s no se ha establecido en 0, o que el Service de K8s no se ha eliminado. En la consola de Container Service, establezca en 0 el valor de la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight o elimine el Service de K8s.