So richten Sie Failover für DigitalOcean Static Routes ein (Betreiber)

0 Aktien
0
0
0
0

Einführung

Der Hauptzweck des statischen Routenoperators besteht darin, mehr Flexibilität und Kontrolle über den Netzwerkverkehr in Ihrer Kubernetes-Umgebung zu ermöglichen. Er erlaubt Ihnen, die Routing-Konfiguration präzise an die Anwendungsanforderungen anzupassen und die Netzwerkleistung zu optimieren. Er wird als DaemonSet bereitgestellt und läuft daher auf jedem Knoten Ihres von DigitalOcean verwalteten Kubernetes-Clusters.

In diesem Tutorial lernen Sie, die Routingtabelle jedes Worker-Knotens anhand der CRD-Spezifikation zu verwalten und ein Failover-Gateway einzurichten.

Das Hauptziel dieses Tutorials ist es, zu zeigen, wie man die Routingtabelle jedes Worker-Knotens auf Basis der CRD-Spezifikation verwaltet und ein Failover-Gateway einrichtet.

Voraussetzungen
  • Ein von DigitalOcean verwalteter Kubernetes-Cluster, auf den Sie Zugriff haben.
  • Die Kubectl-CLI ist auf Ihrem lokalen Rechner installiert (und so konfiguriert, dass sie auf Ihren von DigitalOcean verwalteten Kubernetes-Cluster verweist).
  • NAT GW Droplets (2 oder höher) werden wie hier beschrieben konfiguriert und implementiert.
  • Entwickeln Sie ein System zur Fehlererkennung im Gateway-Droplet, das auf die Bedürfnisse des Nutzers zugeschnitten ist und eine klare und präzise Erkennung mit minimalen Fehlalarmen gewährleistet. Nutzen Sie Überwachungsdienste wie Prometheus oder Nagios, richten Sie Health-Check-Endpunkte im Droplet ein oder verwenden Sie Benachrichtigungstools wie Alertmanager. Hierfür können Sie einen Überwachungs-Stack aus unserem Marketplace verwenden.

Nachfolgend das Architekturdiagramm:

Bereitstellung des Kubernetes-Operators für statische Routen

Stellen Sie die neueste Version des Operators für statische Routen in Ihrem von DigitalOcean verwalteten Kubernetes-Cluster mithilfe von kubectl bereit:

kubectl apply -f https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/releases/v1/k8s-staticroute-operator-v1.0.0.yaml
Prüfen Sie, ob die Operator-Pods betriebsbereit sind:

Lassen Sie uns überprüfen, ob die Operator-Pods betriebsbereit sind.

“bash kubectl get staticroutes -o wide -n staticroutes

The output looks similar to the below:
```bash
[secondary_label Output]
NAME AGE DESTINATIONS GATEWAY
static-route-ifconfig.me 119s ["XX.XX.XX.XX"] XX.XX.XX.XX
static-route-ipinfo.io 111s ["XX.XX.XX.XX"] XX.XX.XX.XX

Nun überprüfen wir die Berichte der Bediener; es sollten keine Ausnahmen gemeldet werden:

kubectl logs -f ds/k8s-staticroute-operator -n static-routes

Sie sollten folgende Ausgabe beobachten:

Output
Found 2 pods, using pod/k8s-staticroute-operator-498vv
[2023-05-15 14:12:32,282] kopf._core.reactor.r [DEBUG ] Starting Kopf 1.35.6.
[2023-05-15 14:12:32,282] kopf._core.engines.a [INFO ] Initial authentication has been initiated.
[2023-05-15 14:12:32,283] kopf.activities.auth [DEBUG ] Activity 'login_via_pykube' is invoked.
[2023-05-15 14:12:32,285] kopf.activities.auth [DEBUG ] Pykube is configured in cluster with service account.
[2023-05-15 14:12:32,286] kopf.activities.auth [INFO ] Activity 'login_via_pykube' succeeded.
[2023-05-15 14:12:32,286] kopf.activities.auth [DEBUG ] Activity 'login_via_client' is invoked.
[2023-05-15 14:12:32,287] kopf.activities.auth [DEBUG ] Client is configured in cluster with service account.
[2023-05-15 14:12:32,288] kopf.activities.auth [INFO ] Activity 'login_via_client' succeeded.
[2023-05-15 14:12:32,288] kopf._core.engines.a [INFO ] Initial authentication has finished.
[2023-05-15 14:12:32,328] kopf._cogs.clients.w [DEBUG ] Starting the watch-stream for customresourcedefinitions.v1.apiextensions.k8s.io cluster-wide.
[2023-05-15 14:12:32,330] kopf._cogs.clients.w [DEBUG ] Starting the watch-stream for staticroutes.v1.networking.digitalocean.com cluster-wide.

Um die Auswirkungen eines Gateway-Ausfalls zu minimieren, wird empfohlen, ein Standby-Gateway bereitzuhalten, das bei Bedarf einspringen kann. Obwohl der Betreiber derzeit keine echte Hochverfügbarkeit (HA) unterstützt, trägt ein Failover dazu bei, die Dauer der Dienstunterbrechung zu minimieren.

Angenommen, Sie haben eine festgelegte Ziel-IP-Adresse, 34.160.111.145, die das aktive oder primäre Gateway darstellt, mit der IP-Adresse 10.116.0.4, die für die Weiterleitung des Datenverkehrs zuständig ist. Diese Konfiguration ist in der Datei primar.yaml gespeichert.

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:
name: primary
spec:
destinations: 
- "34.160.111.145"
gateway: "10.116.0.4"

Zusätzlich steht Ihnen ein Standby- oder Sekundärgateway mit der IP-Adresse 10.116.0.12 zur Verfügung, das bereit ist, Datenverkehr von derselben Ziel-IP-Adresse zu verarbeiten. Die Definition der statischen Route in der Datei secondary.yaml ist bis auf die Gateway-IP-Adresse (und den Objektnamen) identisch mit der primären Definition. Diese wird in der Datei secondary.yaml gespeichert.

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:
name: secondary
spec:
destinations: 
- "34.160.111.145"
gateway: "10.116.0.12"

Der eigentliche Ausfallprozess umfasst dann die folgenden Schritte:

  • Erkennen, dass das aktive Gateway mit der IP-Adresse 10.116.0.5 ausgefallen ist.
  • Löschen Sie die aktuell aktive StaticRoute.
  • Wenden Sie die vorgefertigte StaticRoute an.

Aktive statische Route löschen

Löschen wir nun die aktuell aktive StaticRoute.

kubectl delete -f primary.yaml

Warten Sie 30–60 Sekunden, damit jede Operatorinstanz genügend Zeit hat, die Objektlöschung zu verarbeiten. Das heißt, reagieren Sie, indem Sie den Pfad von allen Knoten löschen.

Standby-Statikroute anwenden

Aktivieren wir die sekundäre StaticRoute.

 kubectl apply -f secondary.yaml

Der Operator muss die neue Standby-StaticRoute auswählen und die entsprechenden Routingtabelleneinträge einfügen. Danach ist das Failover abgeschlossen.

Setup-Test

Jede CRD-Instanz erstellt eine statische Route zu zwei Websites, die Ihre öffentliche IP-Adresse melden – ifconfig.me/ip und ipinfo.io/ip. Eine typische Definition einer statischen Route sieht folgendermaßen aus:

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:
name: static-route-ifconfig.me
spec:
destinations: 
- "34.160.111.145"
gateway: "10.116.0.5"

Um die Einstellungen zu testen, laden Sie ein Beispielmanifest vom Beispielverzeichnis herunter:

Beispiel für ifconfig.me und ipinfo.io-

curl -O https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/examples/static-route-ifconfig.me.yaml
curl -O https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/examples/static-route-ipinfo.io.yaml

Nach dem Herunterladen der Manifeste ersetzen Sie jede Manifestdatei durch <>. Wenden Sie anschließend jedes Manifest mit kubectl an:

kubectl apply -f static-route-ifconfig.me.yaml
kubectl apply -f static-route-ipinfo.io.yaml

Prüfen Sie abschließend, ob der curl-test-Pod für jede Route auf die öffentliche IP-Adresse Ihres NAT-Gateways antwortet:

kubectl exec -it curl-test -- curl ifconfig.me/ip
kubectl exec -it curl-test -- curl ipinfo.io/ip

Sie sollten denselben Test auch während des Failover-Tests verwenden. Beim Failover des primären Gateway-Droplets sollte das Ergebnis dem NAT-Gateway die öffentliche IP-Adresse des primären Droplets liefern, und beim Failover des sekundären Droplets sollte das Ergebnis die öffentliche IP-Adresse des NAT-Gateways des sekundären Droplets liefern.

Fehlerbehebung

Sie sollten das StaticRoute-Objekt überprüfen: Wenn ein Fehler auftritt, suchen Sie zuerst im Ereignis der statischen Route nach dem Fehler für jeden Knoten, auf den die Regel zutrifft.

kubectl get StaticRoute <static-route-name> -o yaml

Protokolle prüfen: Um der Sache genauer auf den Grund zu gehen, können Sie die Protokolle des statischen Routenbetreibers auf Fehler überprüfen.

kubectl logs -f ds/k8s-staticroute-operator -n static-routes

Löschen

Um den Operator und die zugehörigen Ressourcen zu entfernen, führen Sie bitte den folgenden kubectl-Befehl aus (stellen Sie sicher, dass Sie dieselbe Release-Version verwenden, die Sie während der Installation verwendet haben):

kubectl delete -f deploy https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/releases/v1/k8s-staticroute-operator-v1.0.0.yaml

Ausgabe ähnlich wie:

customresourcedefinition.apiextensions.k8s.io "staticroutes.networking.digitalocean.com" deleted
serviceaccount "k8s-staticroute-operator" deleted
clusterrole.rbac.authorization.k8s.io "k8s-staticroute-operator" deleted
clusterrolebinding.rbac.authorization.k8s.io "k8s-staticroute-operator" deleted
daemonset.apps "k8s-staticroute-operator" deleted

Wenn Sie nun denselben curl-Befehl ausführen, erhalten Sie die IP-Adresse des Worker-Knotens als Ausgabe:

kubectl exec -it curl-test -- curl ifconfig.me/ip
kubectl exec -it curl-test -- curl ipinfo.io/ip 

Überprüfen Sie nun die öffentliche IP-Adresse des Worker-Knotens:

kubectl get nodes -o wide

Ergebnis

Die Implementierung von Failover-Funktionen ist auch dann empfehlenswert, wenn eine echte Hochverfügbarkeit (HA) nicht vollständig unterstützt wird, um die Auswirkungen von Gateway-Ausfällen zu minimieren.

Organisationen können die Dauer von Serviceunterbrechungen erheblich reduzieren, indem sie ein Standby-Gateway bereithalten, das bei Bedarf als Failover-Gateway einspringt.

Es ist wichtig, ein Backup-Gateway bereitzuhalten und einen reibungslosen Übergang im Fehlerfall zu gewährleisten. Die Umsetzung kann je nach spezifischen Anforderungen variieren, doch die Priorisierung der Ausfallsicherheit trägt dazu bei, eine zuverlässige und unterbrechungsfreie Dienstbereitstellung aufrechtzuerhalten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte Ihnen auch gefallen