Construyendo un Controlador de Ingress Apache APISIX Más Robusto con Litmus Chaos

Jintao Zhang

Jintao Zhang

May 4, 2023

Technology

Visión General

Chaos Engineering juega un papel crucial en la evaluación y mejora de la resiliencia y confiabilidad de los sistemas de software. Al simular eventos disruptivos, las organizaciones pueden identificar vulnerabilidades y mejorar el diseño y la arquitectura del sistema. En este artículo, discutiremos la importancia de Chaos Engineering y su aplicación específica en el diseño de experimentos de caos para Ingress Controllers.

¿Por qué necesitamos Chaos Engineering?

Chaos Engineering es el proceso de evaluar sistemas de software simulando eventos destructivos, como interrupciones de red en servidores o limitaciones de API. Al introducir caos o fallos dentro del sistema, podemos probar la resiliencia y confiabilidad del sistema en condiciones inestables e inesperadas.

Chaos Engineering ayuda a los equipos a identificar riesgos ocultos, monitorear vulnerabilidades y detectar cuellos de botella en el rendimiento de sistemas distribuidos al simular escenarios del mundo real en un entorno de control seguro. Este enfoque previene efectivamente interrupciones del sistema o paradas en la producción.

El enfoque de Netflix para manejar sistemas nos inspiró a adoptar un enfoque más científico, lo que impulsó el nacimiento y desarrollo de Chaos Engineering.

1. Introducción de Eventos Disruptivos

Chaos Engineering implica introducir eventos disruptivos, como particiones de red, degradación de servicios y limitaciones de recursos, para simular escenarios del mundo real y probar la capacidad del sistema para manejar condiciones inesperadas. El objetivo es identificar vulnerabilidades o debilidades y mejorar el diseño y la arquitectura del sistema para hacerlo más robusto y resiliente.

2. Prueba de Resiliencia del Sistema

En el panorama tecnológico actual, en constante evolución y ritmo acelerado, probar la resiliencia del sistema es crucial para garantizar que los sistemas sean robustos, escalables y capaces de manejar desafíos y condiciones inesperadas. Chaos Engineering es una forma efectiva de lograr esto al introducir eventos disruptivos para observar la respuesta del sistema y medir su capacidad para manejar condiciones inesperadas.

Las organizaciones pueden monitorear registros del sistema, métricas de rendimiento y la experiencia del usuario para medir el impacto de eventos disruptivos en la resiliencia del sistema. El seguimiento de estas métricas proporciona una mejor comprensión del comportamiento del sistema, permitiendo a las organizaciones identificar áreas de mejora.

3. Descubrimiento de Problemas Ocultos

Los sistemas distribuidos son propensos a problemas ocultos, como pérdida de datos, cuellos de botella en el rendimiento y errores de comunicación, que pueden ser difíciles de detectar, ya que solo pueden hacerse visibles cuando el sistema está bajo presión. Chaos Engineering puede ayudar a descubrir estos problemas ocultos al introducir eventos disruptivos. Esta información puede luego usarse para mejorar el diseño y la arquitectura del sistema, haciéndolo más resiliente y confiable.

Identificar y resolver estos problemas de manera proactiva mejora la confiabilidad y el rendimiento de los sistemas, previene tiempos de inactividad, reduce el riesgo de pérdida de datos y asegura que el sistema funcione sin problemas.

4. ¿Qué vale y por qué lo necesitamos?

Los sistemas distribuidos son complejos e inherentemente caóticos, lo que puede llevar a fallos. El uso de la nube y la arquitectura de microservicios ofrece muchas ventajas, pero también viene con complejidad y caos. Los ingenieros son responsables de hacer que el sistema sea lo más confiable posible.

Sin pruebas, no hay confianza para usar el proyecto en un entorno de producción. Además de las pruebas unitarias convencionales y las pruebas de extremo a extremo, introducir pruebas de caos hace que el sistema sea más robusto.

Cuando ocurre un error, repararlo lleva tiempo y puede causar pérdidas incalculables, con efectos a largo plazo en el futuro. Durante el proceso de reparación, se deben considerar varios factores, incluida la complejidad del sistema, el tipo de error y posibles nuevos problemas, para garantizar una reparación final efectiva.

Además, cuando un proyecto de código abierto causa fallos graves a los usuarios en un entorno de producción, muchos usuarios pueden cambiar a otros productos.

¿Cómo diseñar experimentos de caos para un Ingress Controller?

1. ¿Qué es Ingress?

Ingress es un objeto de recurso de Kubernetes que contiene reglas sobre cómo los clientes externos pueden acceder a los servicios dentro del clúster. Estas reglas dictan qué clientes pueden acceder a qué servicios, cómo se enrutan las solicitudes de los clientes a los servicios apropiados y cómo se manejan las solicitudes de los clientes.

2. ¿Qué es un Ingress Controller?

Un recurso Ingress requiere un Ingress Controller para procesarlo. El controlador traduce las reglas de Ingress en configuraciones en un proxy, permitiendo que los clientes externos accedan a los servicios dentro del clúster. En un entorno de producción, los Ingress Controllers necesitan tener capacidades complejas, como limitar fuentes de acceso y métodos de solicitud, autenticación y autorización. La mayoría de los Ingress Controllers extienden la semántica de Ingress a través de anotaciones en el recurso Ingress.

3. ¿Qué es Apache APISIX Ingress Controller?

Apache APISIX Ingress Controller es un tipo especializado de balanceador de carga que ayuda a los administradores a gestionar y controlar el tráfico de Ingress. Utiliza APISIX como un plano de datos para proporcionar a los usuarios enrutamiento dinámico, balanceo de carga, escalado elástico, políticas de seguridad y otras características para mejorar el control de la red y garantizar una mayor disponibilidad y seguridad para su negocio. APISIX Ingress Controller admite tres modos de configuración: Kubernetes Ingress, recursos personalizados y Gateway API.

APISIX-Ingress

4. ¿Qué es Litmus Chaos?

Litmus Chaos es un marco de Chaos Engineering de código abierto que proporciona un marco experimental de infraestructura para validar la estabilidad de controladores y arquitecturas de microservicios. Puede simular varios entornos, como entornos a nivel de contenedor y aplicación, desastres naturales, fallos y actualizaciones, para entender cómo responde el sistema a estos cambios. El marco también puede explorar los cambios de comportamiento entre controladores y aplicaciones, y cómo los controladores responden a desafíos en estados específicos. Litmus Chaos ofrece capacidades convenientes de integración de observabilidad y es altamente extensible.

5. ¿Cómo diseñar experimentos de caos?

Aquí hay un procedimiento general para diseñar experimentos de caos en cualquier escenario:

  • Definir el sistema bajo prueba: Identificar los componentes específicos del sistema en los que se desea experimentar y desarrollar objetivos claros y medibles para el experimento. Esto incluye crear una lista completa de los componentes, como hardware y software, que se probarán, así como definir el alcance del experimento y los resultados esperados.

under-test

kube-apiserver: si ocurre una excepción, la escritura del recurso Ingress falla. Ingress-controller: Interrupción de red, Crash, Podfaults, I/O data-plane: Interrupción de red, Crash, Podfaults, I/O

  • Elegir el experimento adecuado: Seleccionar un experimento que esté alineado con los objetivos establecidos y que imite de cerca un escenario del mundo real. Esto ayudará a garantizar que el experimento produzca resultados significativos y refleje con precisión el comportamiento del sistema.
  • Establecer una hipótesis: Establecer una hipótesis sobre cómo se comportará el sistema durante el experimento y qué resultados se anticipan. Esto debe basarse en la experiencia o investigación, y debe ser razonable y comprobable.
  • Ejecutar el experimento: Ejecutar el experimento en un entorno controlado, como un entorno de staging, para limitar el potencial de daño al sistema de producción. Recopilar todos los datos relevantes durante el experimento y almacenarlos de manera segura. Puede haber opiniones diferentes sobre si el experimento debería realizarse directamente en el entorno de producción. Sin embargo, para la mayoría de los escenarios, necesitamos asegurar que se cumpla el Objetivo de Nivel de Servicio (SLO) del sistema.
  • Evaluar los resultados: Evaluar los resultados del experimento y compararlos con la hipótesis. Analizar los datos recopilados y documentar cualquier observación o hallazgo. Esto incluye identificar cualquier resultado inesperado o discrepancia y determinar cómo podrían afectar al sistema. Además, considerar cómo los resultados del experimento pueden usarse para mejorar el sistema.

Principales Escenarios de Uso de Ingress Controller

La capacidad más importante de un Ingress Controller es la de proxy de tráfico, y todas las demás funciones se basan en esta función central. Por lo tanto, al realizar Chaos Engineering, el tráfico de proxy normal es la métrica clave.

Para definir el sistema bajo prueba para APISIX Ingress Controller, los usuarios necesitan crear configuraciones de ruta, como Ingress, Gateway API o CRD, y aplicarlas al clúster de Kubernetes a través de Kubectl. Este proceso pasa por kube-apiserver para autenticación, autorización, admisión y otros procedimientos relacionados, y luego se almacena en etcd.

El APISIX Ingress Controller monitorea continuamente los cambios en los recursos de Kubernetes. Estas configuraciones se convierten luego en configuraciones en el plano de datos. Cuando un cliente solicita el plano de datos, accede al servicio upstream según las reglas de enrutamiento.

Si kube-apiserver tiene una excepción, evitará que se cree la configuración o que el Ingress Controller obtenga la configuración correcta. De manera similar, si hay una excepción en el plano de datos, como una interrupción de red o un Pod eliminado, tampoco podrá hacer un proxy de tráfico normal.

El alcance de nuestro experimento es principalmente el impacto en la disponibilidad del sistema si el Ingress Controller tiene una excepción.

1. Pasos de Operación Detallados

  • Elegir el experimento adecuado: Podemos cubrir muchos escenarios de configuración incorrecta a través de pruebas de extremo a extremo. Principalmente a través de Chaos Engineering, podemos verificar si el plano de datos aún puede hacer proxy de tráfico normalmente cuando el Ingress Controller encuentra una excepción, como errores de DNS, interrupciones de red o Pod eliminado.
  • Establecer una hipótesis: Para cada escenario, podemos crear una hipótesis como "Cuando el Pod de Ingress-controller obtiene X?, la solicitud del cliente aún puede obtener una respuesta normal."
  • Ejecutar el experimento: El experimento y las variables ya están determinados, así que solo queda experimentar.
    Litmus Chaos proporciona varias formas de realizar experimentos. Podemos hacer esto a través del Litmus Portal. Para hacer esto, necesitamos crear un escenario de caos, seleccionar la aplicación en la que se experimentará, y estos pasos son relativamente sencillos. Sin embargo, debemos prestar atención al hecho de que Litmus Chaos incluye un recurso Probes.

Probes son verificaciones conectables que pueden definirse dentro del ChaosEngine para cualquier experimento de caos. Los pods del experimento ejecutan estas verificaciones según el modo en que están definidas y consideran su éxito como condiciones necesarias para determinar el veredicto del experimento, además de las verificaciones estándar integradas. Al mismo tiempo, también podemos programar experimentos, lo cual es una función muy valiosa.

Además, Litmus Chaos también admite la ejecución de experimentos mediante la presentación de manifiestos YAML.

chaos-center-portal

  • Evaluar los resultados: Litmus Chaos tiene informes estadísticos integrados, y puede integrarse con Prometheus y Grafana para proporcionar un panel unificado para la integración.

statistics-report

2. Beneficios y Futuro

A través de rigurosas pruebas de extremo a extremo y el poder de Chaos Engineering, estamos seguros de la estabilidad y confiabilidad del APISIX Ingress Controller entregado. Chaos Engineering también nos ha ayudado a identificar y corregir errores. Estamos constantemente trabajando para mejorar y evolucionar este increíble proyecto, y te invitamos a unirte a nuestra comunidad.

Tags: