Aufbau eines robusteren Apache APISIX Ingress Controllers mit Litmus Chaos

Jintao Zhang

Jintao Zhang

May 4, 2023

Technology

Überblick

Chaos Engineering spielt eine entscheidende Rolle bei der Bewertung und Verbesserung der Resilienz und Zuverlässigkeit von Softwaresystemen. Durch die Simulation von disruptiven Ereignissen können Organisationen Schwachstellen identifizieren und das Design sowie die Architektur des Systems verbessern. In diesem Artikel werden wir die Bedeutung von Chaos Engineering und seine spezifische Anwendung bei der Gestaltung von Chaos-Experimenten für Ingress-Controller diskutieren.

Warum brauchen wir Chaos Engineering?

Chaos Engineering ist der Prozess der Bewertung von Softwaresystemen durch die Simulation von zerstörerischen Ereignissen, wie z.B. Server-Netzwerkausfälle oder API-Drosselung. Durch die Einführung von Chaos oder Fehlern im System können wir die Resilienz und Zuverlässigkeit des Systems unter instabilen und unerwarteten Bedingungen testen.

Chaos Engineering hilft Teams, versteckte Risiken zu identifizieren, Schwachstellen zu überwachen und Leistungsengpässe in verteilten Systemen zu erkennen, indem reale Szenarien in einer sicheren Kontrollumgebung simuliert werden. Dieser Ansatz verhindert effektiv Systemausfälle oder Produktionsunterbrechungen.

Netflixs Ansatz zur Handhabung von Systemen hat uns inspiriert, einen wissenschaftlicheren Ansatz zu verfolgen, was die Geburt und Entwicklung von Chaos Engineering vorangetrieben hat.

1. Einführung von disruptiven Ereignissen

Chaos Engineering beinhaltet die Einführung von disruptiven Ereignissen, wie z.B. Netzwerkpartitionierungen, Dienstverschlechterungen und Ressourcenbeschränkungen, um reale Szenarien zu simulieren und die Fähigkeit des Systems zu testen, unerwartete Bedingungen zu bewältigen. Das Ziel ist es, Schwachstellen oder Schwächen zu identifizieren und das Design sowie die Architektur des Systems zu verbessern, um es robuster und widerstandsfähiger zu machen.

2. Testen der Systemresilienz

In der heutigen sich ständig weiterentwickelnden und schnelllebigen Technologielandschaft ist das Testen der Systemresilienz entscheidend, um sicherzustellen, dass Systeme robust, skalierbar und in der Lage sind, unerwartete Herausforderungen und Bedingungen zu bewältigen. Chaos Engineering ist ein effektiver Weg, dies zu erreichen, indem disruptive Ereignisse eingeführt werden, um die Reaktion des Systems zu beobachten und seine Fähigkeit zu messen, unerwartete Bedingungen zu bewältigen.

Organisationen können Systemprotokolle, Leistungsmetriken und Benutzererfahrungen überwachen, um die Auswirkungen von disruptiven Ereignissen auf die Systemresilienz zu messen. Die Verfolgung dieser Metriken bietet ein besseres Verständnis des Systemverhaltens und ermöglicht es Organisationen, Verbesserungsbereiche zu identifizieren.

3. Entdecken versteckter Probleme

Verteilte Systeme sind anfällig für versteckte Probleme, wie z.B. Datenverlust, Leistungsengpässe und Kommunikationsfehler, die schwer zu erkennen sind, da sie möglicherweise nur sichtbar werden, wenn das System unter Druck steht. Chaos Engineering kann helfen, diese versteckten Probleme aufzudecken, indem disruptive Ereignisse eingeführt werden. Diese Informationen können dann verwendet werden, um das Design und die Architektur des Systems zu verbessern, wodurch es widerstandsfähiger und zuverlässiger wird.

Die proaktive Identifizierung und Lösung dieser Probleme verbessert die Zuverlässigkeit und Leistung von Systemen, verhindert Ausfallzeiten, reduziert das Risiko von Datenverlust und stellt sicher, dass das System reibungslos läuft.

4. Was es wert ist und warum wir es brauchen?

Verteilte Systeme sind komplex und inhärent chaotisch, was zu Ausfällen führen kann. Die Verwendung von Cloud- und Microservices-Architekturen bietet viele Vorteile, bringt aber auch Komplexität und Chaos mit sich. Ingenieure sind dafür verantwortlich, das System so zuverlässig wie möglich zu machen.

Ohne Tests gibt es kein Vertrauen, das Projekt in der Produktionsumgebung zu verwenden. Neben konventionellen Unit-Tests und End-to-End-Tests macht die Einführung von Chaos-Tests das System robuster.

Wenn ein Fehler auftritt, dauert die Reparatur Zeit und kann unermessliche Verluste verursachen, mit langfristigen Auswirkungen in der Zukunft. Während des Reparaturprozesses müssen verschiedene Faktoren berücksichtigt werden, einschließlich der Komplexität des Systems, der Art des Fehlers und möglicher neuer Probleme, um eine effektive endgültige Reparatur sicherzustellen.

Darüber hinaus, wenn ein Open-Source-Projekt den Benutzern in der Produktionsumgebung schwerwiegende Fehler bringt, könnten viele Benutzer zu anderen Produkten wechseln.

Wie gestaltet man Chaos-Experimente für einen Ingress-Controller?

1. Was ist Ingress?

Ingress ist ein Kubernetes-Ressourcenobjekt, das Regeln enthält, wie externe Clients auf Dienste innerhalb des Clusters zugreifen können. Diese Regeln legen fest, welche Clients auf welche Dienste zugreifen können, wie Client-Anfragen an die entsprechenden Dienste weitergeleitet werden und wie Client-Anfragen behandelt werden.

2. Was ist ein Ingress-Controller?

Eine Ingress-Ressource benötigt einen Ingress-Controller, um sie zu verarbeiten. Der Controller übersetzt die Ingress-Regeln in Konfigurationen auf einem Proxy, wodurch externe Clients auf Dienste innerhalb des Clusters zugreifen können. In einer Produktionsumgebung müssen Ingress-Controller komplexe Fähigkeiten haben, wie z.B. die Begrenzung von Zugriffsquellen und Anforderungsmethoden, Authentifizierung und Autorisierung. Die meisten Ingress-Controller erweitern die Semantik von Ingress durch Anmerkungen in der Ingress-Ressource.

3. Was ist der Apache APISIX Ingress Controller?

Der Apache APISIX Ingress Controller ist eine spezialisierte Art von Lastenausgleich, der Administratoren hilft, den Ingress-Datenverkehr zu verwalten und zu kontrollieren. Er verwendet APISIX als Datenebene, um Benutzern dynamisches Routing, Lastenausgleich, elastische Skalierung, Sicherheitsrichtlinien und andere Funktionen zur Verbesserung der Netzwerkkontrolle und zur Sicherstellung einer höheren Verfügbarkeit und Sicherheit für ihr Geschäft bereitzustellen. Der APISIX Ingress Controller unterstützt drei Konfigurationsmodi: Kubernetes Ingress, benutzerdefinierte Ressourcen und Gateway API.

APISIX-Ingress

4. Was ist Litmus Chaos?

Litmus Chaos ist ein Open-Source-Chaos-Engineering-Framework, das eine Infrastruktur-Experimentierumgebung bereitstellt, um die Stabilität von Controllern und Microservices-Architekturen zu validieren. Es kann verschiedene Umgebungen simulieren, wie z.B. Container- und Anwendungsebenen, Naturkatastrophen, Fehler und Upgrades, um zu verstehen, wie das System auf diese Veränderungen reagiert. Das Framework kann auch das Verhalten zwischen Controllern und Anwendungen sowie die Reaktion von Controllern auf Herausforderungen in bestimmten Zuständen untersuchen. Litmus Chaos bietet bequeme Integrationsmöglichkeiten für die Beobachtbarkeit und ist hochgradig erweiterbar.

5. Wie gestaltet man Chaos-Experimente?

Hier ist ein allgemeines Verfahren zur Gestaltung von Chaos-Experimenten in jedem Szenario:

  • Definieren Sie das zu testende System: Identifizieren Sie die spezifischen Komponenten des Systems, die Sie testen möchten, und entwickeln Sie klare und messbare Ziele für das Experiment. Dies umfasst die Erstellung einer umfassenden Liste der Komponenten, wie z.B. Hardware und Software, die getestet werden, sowie die Definition des Umfangs des Experiments und der erwarteten Ergebnisse.

under-test

kube-apiserver: Wenn eine Ausnahme auftritt, schlägt das Schreiben der Ingress-Ressource fehl. Ingress-controller: Netzwerkunterbrechung, Crash, Podfaults, I/O data-plane: Netzwerkunterbrechung, Crash, Podfaults, I/O

  • Wählen Sie das richtige Experiment: Wählen Sie ein Experiment, das mit den festgelegten Zielen übereinstimmt und ein reales Szenario genau nachahmt. Dies hilft sicherzustellen, dass das Experiment aussagekräftige Ergebnisse liefert und das Verhalten des Systems genau widerspiegelt.
  • Stellen Sie eine Hypothese auf: Stellen Sie eine Hypothese darüber auf, wie sich das System während des Experiments verhalten wird und welche Ergebnisse Sie erwarten. Diese sollte auf Erfahrung oder Forschung basieren und sollte vernünftig und testbar sein.
  • Führen Sie das Experiment durch: Führen Sie das Experiment in einer kontrollierten Umgebung durch, wie z.B. einer Staging-Umgebung, um das Potenzial für Schäden am Produktionssystem zu begrenzen. Sammeln Sie alle relevanten Daten während des Experiments und speichern Sie sie sicher. Es kann unterschiedliche Meinungen darüber geben, ob das Experiment direkt in der Produktionsumgebung stattfinden sollte. Für die meisten Szenarien müssen wir jedoch sicherstellen, dass das Service Level Objective (SLO) des Systems erfüllt wird.
  • Bewerten Sie die Ergebnisse: Bewerten Sie die Ergebnisse des Experiments und vergleichen Sie sie mit Ihrer Hypothese. Analysieren Sie die gesammelten Daten und dokumentieren Sie alle Beobachtungen oder Erkenntnisse. Dies umfasst die Identifizierung unerwarteter Ergebnisse oder Diskrepanzen und die Bestimmung, wie sie das System beeinflussen könnten. Zusätzlich sollten Sie überlegen, wie die Ergebnisse des Experiments verwendet werden können, um das System zu verbessern.

Hauptanwendungsszenarien des Ingress-Controllers

Die wichtigste Fähigkeit eines Ingress-Controllers ist das Proxying von Datenverkehr, und alle anderen Funktionen basieren auf dieser Kernfunktion. Daher ist normaler Proxy-Datenverkehr die Schlüsselmetrik bei der Durchführung von Chaos Engineering.

Um das zu testende System für den APISIX Ingress Controller zu definieren, müssen Benutzer Routenkonfigurationen erstellen, wie z.B. Ingress, Gateway API oder CRD, und sie über Kubectl auf den Kubernetes-Cluster anwenden. Dieser Prozess durchläuft kube-apiserver für Authentifizierung, Autorisierung, Zulassung und andere verwandte Verfahren und wird dann in etcd gespeichert.

Der APISIX Ingress Controller überwacht kontinuierlich Änderungen an Kubernetes-Ressourcen. Diese Konfigurationen werden dann in Konfigurationen auf der Datenebene umgewandelt. Wenn ein Client die Datenebene anfordert, greift er gemäß den Routing-Regeln auf den Upstream-Dienst zu.

Wenn kube-apiserver eine Ausnahme hat, wird dies verhindern, dass die Konfiguration erstellt wird, oder der Ingress-Controller die richtige Konfiguration erhält. Ebenso, wenn es eine Ausnahme in der Datenebene gibt, wie z.B. eine Netzwerkunterbrechung oder ein getöteter Pod, wird dies auch nicht in der Lage sein, normalen Datenverkehr zu proxen.

Der Umfang unseres Experiments betrifft hauptsächlich die Auswirkungen auf die Systemverfügbarkeit, wenn der Ingress-Controller eine Ausnahme hat.

1. Detaillierte Betriebsschritte

  • Wählen Sie das richtige Experiment: Wir können viele Szenarien von falscher Konfiguration durch End-to-End-Tests abdecken. Hauptsächlich durch Chaos Engineering können wir überprüfen, ob die Datenebene den Datenverkehr noch normal proxen kann, wenn der Ingress-Controller eine Ausnahme hat, wie z.B. DNS-Fehler, Netzwerkunterbrechungen oder getötete Pods.
  • Stellen Sie eine Hypothese auf: Für jedes Szenario können wir eine Hypothese erstellen, wie z.B. "Wenn der Ingress-controller Pod X? erhält, kann die Anfrage des Clients noch eine normale Antwort erhalten."
  • Führen Sie das Experiment durch: Das Experiment und die Variablen wurden bestimmt, also bleibt nur noch das Experimentieren.
    Litmus Chaos bietet verschiedene Möglichkeiten, Experimente durchzuführen. Wir können dies über das Litmus Portal tun. Dazu müssen wir ein Chaos-Szenario erstellen, die zu testende Anwendung auswählen, und diese Schritte sind relativ einfach. Wir müssen jedoch darauf achten, dass Litmus Chaos eine Probes-Ressource enthält.

Probes sind einsteckbare Prüfungen, die innerhalb der ChaosEngine für jedes Chaos-Experiment definiert werden können. Die Experiment-Pods führen diese Prüfungen basierend auf dem Modus, in dem sie definiert sind, durch und berücksichtigen ihren Erfolg als notwendige Bedingungen bei der Bestimmung des Urteils des Experiments, zusätzlich zu den standardmäßigen integrierten Prüfungen. Gleichzeitig können wir auch Experimente planen, was eine sehr wertvolle Funktion ist.

Darüber hinaus unterstützt Litmus Chaos auch das Ausführen von Experimenten durch das Einreichen von YAML-Manifesten.

chaos-center-portal

  • Bewerten Sie die Ergebnisse: Litmus Chaos verfügt über integrierte statistische Berichte und kann mit Prometheus und Grafana integriert werden, um ein einheitliches Dashboard für die Integration bereitzustellen.

statistics-report

2. Vorteile und Zukunft

Durch rigorose End-to-End-Tests und die Kraft von Chaos Engineering sind wir zuversichtlich in die Stabilität und Zuverlässigkeit des gelieferten APISIX Ingress Controllers. Chaos Engineering hat uns auch geholfen, Fehler zu identifizieren und zu beheben. Wir arbeiten ständig daran, dieses erstaunliche Projekt zu verbessern und weiterzuentwickeln, und wir laden Sie ein, unserer Community beizutreten.

Tags: