Un número cada vez mayor de organizaciones está migrando desde un centro de datos compuesto por máquinas virtuales (VM) a una plataforma nativa en la nube de "próxima generación" que se basa en tecnologías de contenedores como Docker y Kubernetes. Sin embargo, debido a la complejidad inherente de este movimiento, una migración no ocurre de la noche a la mañana. En cambio, una organización generalmente ejecutará un entorno híbrido multiplataforma y multiplataforma en el que las aplicaciones abarcan máquinas virtuales y contenedores. Comenzar una migración en el borde de un sistema, usar la funcionalidad proporcionada por una puerta de enlace API nativa de la nube y trabajar hacia adentro hacia la aplicación abre varias estrategias para minimizar el dolor y el riesgo.
En una serie de artículos publicados recientemente en el blog del Embajador Datawire, se presentaron cuatro estrategias relacionadas con la planificación e implementación de dicha migración: implementar un sistema de descubrimiento de servicios multiplataforma que sea capaz de enrutar efectivamente dentro de un entorno altamente dinámico; adaptar su canal de entrega continua para aprovechar las mejores prácticas y evitar dificultades con la complejidad de la red; utilizando el cambio de tráfico para facilitar una migración incremental y segura; asegurar su infraestructura con encriptación y segmentación de red para todo el tráfico, desde el usuario final hasta el servicio.

Estrategia 1: implementar un sistema de descubrimiento de servicios multiplataforma

Durante una migración a la nube y los contenedores, es común ver una combinación de aplicaciones existentes que se descomponen en servicios y nuevos sistemas que se diseñan utilizando el estilo de arquitectura de microservicios. La funcionalidad empresarial a menudo se proporciona a través de una API que funciona con la colaboración de uno o más servicios y, por lo tanto, estos componentes deben poder ubicarse y comunicarse entre sí.
En un entorno multiplataforma y multinube, se presentan dos categorías de desafíos:
  • Enrutar el tráfico de manera efectiva a través de una variedad de plataformas e infraestructuras diferentes, incluidos varios clústeres de Kubernetes.
  • Actualización continua de la ubicación de los servicios que se implementan en tiempos de ejecución de contenedores programados dinámicamente como Kubernetes y que se ejecutan en una infraestructura de nube de productos básicos (efímera).
El borde del sistema es un buen lugar para resolver estos dos desafíos, ya que todo el tráfico de usuarios pasa a través de alguna forma de puerta de enlace o pila de proxy y se puede enrutar en consecuencia. Por ejemplo, usando una combinación de una puerta de enlace API con una solución de descubrimiento de servicios multiplataforma .

Estrategia 2: Adapte su tubería de entrega continua

Una organización no puede esperar migrar sus aplicaciones existentes a una nueva plataforma de la noche a la mañana. Simplemente hay demasiadas partes móviles y demasiada complejidad dentro de una pila típica existente de herencia / herencia. Cualquier migración debe planificarse y llevarse a cabo de manera incremental, y las mejores prácticas para construir y desplegar aplicaciones codificadas en una tubería de entrega continua .
Requisitos clave que respaldan la adaptación de una canalización de entrega para plataformas múltiples y nubes múltiples:
  • La capacidad de crear e inicializar clústeres de Kubernetes a pedido para preguntas y respuestas, y poder enrutar el tráfico dinámicamente en estos clústeres.
  • Una capacidad para lanzar aplicaciones migradas para verificación automática que se ejecuta en un entorno de producción (o idealmente de producción) sin exponer las aplicaciones a los usuarios finales.
  • Soporte para el despliegue incremental de funcionalidad en la nueva plataforma. Idealmente, el tráfico de clientes se puede cambiar o dividir para permitir que pequeñas aplicaciones sirvan a las aplicaciones que se ejecutan en una nueva infraestructura, ya que esto permitirá una verificación de bajo riesgo de la migración.
El desacoplamiento de la implementación y el lanzamiento de una nueva funcionalidad es una parte fundamental de la entrega continua y, por lo general, la implementación de esta comienza en el borde .

Estrategia 3: utilizar el cambio de tráfico para facilitar una migración incremental y segura

Una vez que se ha creado y acordado un plan de migración dentro de una organización, debe implementarse. Una estrategia efectiva para llevar a cabo la migración es implementar una puerta de enlace API en la nueva plataforma (por ejemplo, Kubernetes) y usar esa puerta de enlace API para enrutar el tráfico a las plataformas existentes. Esta estrategia permite a los operadores e ingenieros familiarizarse con el nuevo entorno objetivo, pero no requiere la implementación de una migración "big bang" de aplicaciones de una plataforma a otra. Una vez que se implementa la puerta de enlace API, la puerta de enlace se puede usar para cambiar gradualmente el tráfico de las aplicaciones existentes a los nuevos servicios .
Funcionalidad requerida al migrar incrementalmente aplicaciones y enrutamiento de tráfico:
  • Configuración descentralizada y de autoservicio de enrutamiento de tráfico de entrada (norte-sur), que permite a los equipos de productos, API y aplicaciones planificar e implementar de manera independiente su migración.
  • La capacidad de implementar el cambio de tráfico, utilizando capacidades como el enrutamiento de liberación canaria y el sombreado del tráfico.
  • Soporte para enrutar el tráfico de servicio a servicio (este-oeste) a través de múltiples tipos de infraestructura (y nubes), plataformas y clústeres. La capacidad de enrutar el tráfico este-oeste solo dentro de Kubernetes no es compatible con este enfoque de migración incremental.
  • La capacidad de proporcionar "valores predeterminados sanos" configurados centralmente para la gestión del tráfico, como el requisito de cifrado de transporte implementado globalmente (incluida una versión mínima de TLS), autenticación a través de IdP de terceros y limitación de velocidad para evitar ataques DDoS.
El uso de una malla de servicios para implementar el enrutamiento de tráfico avanzado se está convirtiendo en un enfoque popular. Vale la pena mencionar que, aunque es similar a primera vista, una puerta de enlace API y una malla de servicios están dirigidas a diferentes casos de uso y tienen diferentes requisitos .

Estrategia 4: Asegure su infraestructura con cifrado y segmentación de red

Implementar la seguridad dentro de la entrega de software es un tema muy importante, y también algo vasto, pero la importancia de la comprensión solo aumenta durante una migración a una nueva plataforma . El diseño de la seguridad en todos los niveles del proceso es esencial, desde el diseño hasta la codificación y el empaquetado (incluida la gestión de dependencias) y, en última instancia, la implementación y la operación. A nivel de tiempo de ejecución, es vital implementar una defensa en profundidad. Como parte de cualquier migración, el tráfico que fluye a través de infraestructuras y plataformas debe ser seguro. Cualquier implementación debe incluir el uso apropiado de la autenticación del usuario en el borde , y también el cifrado del tráfico que fluye desde el borde y entre los servicios.
Los requisitos de seguridad para una migración multiplataforma incluyen:
  • La capacidad de implementar y administrar componentes de cifrado de transporte (y poder rotar certificados relacionados regularmente) a cualquier infraestructura, nube y plataforma objetivo.
  • La capacidad de una puerta de enlace API (que realiza la autenticación del usuario) para poder integrarse estrechamente con la seguridad de transporte de servicio a servicio, asegurando que no haya espacios en el cifrado para el tráfico que fluye desde el borde hacia un servicio.
Como se mencionó anteriormente, el despliegue de una malla de servicios se está convirtiendo en un enfoque común para implementar la seguridad de transporte de extremo a extremo. Como esta práctica, y las tecnologías asociadas, son relativamente nuevas, es importante que los ingenieros "tengan en cuenta la brecha " durante cualquier migración incremental, y no expongan accidentalmente el tráfico de usuarios durante agujeros o grietas dentro de una implementación.

Terminando

Esta serie de artículos y los ejemplos de código / configuración multiplataforma asociados se han escrito para ayudar a los operadores e ingenieros de plataformas al migrar aplicaciones de máquinas virtuales a Kubernetes. Como se discutió, una migración no es un ejercicio trivial, y es importante planificar en consecuencia y comprometerse con una implementación de manera incremental y segura.
El código de ejemplo evoluciona continuamente y, por lo tanto, póngase en contacto con el equipo de Datawire con cualquier solicitud particular para proveedores de nube o escenarios de enrutamiento complicados.
Como de costumbre, se pueden hacer preguntas a través de Twitter ( @getambassadorio ) o el Datawire OSS Slack .