Zum Hauptinhalt springen

Static Egress

Die 'Static Egress'-Funktionalität ermöglicht es Pods innerhalb des Clusters, eine statische, vorhersehbare ausgehende IP-Adresse zu verwenden. Diese IP- Adresse kann dann in Systemen ausserhalb des NKE-Clusters verwendet werden, um den ausgehenden Datenverkehr der Pods zu restriktieren oder zu erlauben.

Details

Standardmässig verwenden Pods, die in NKE-Clustern laufen, die IP-Adresse des Nodes auf dem sie selbst laufen für Verbindungen zu externen (ausserhalb des Cluster) Systemen. Da sich die IP-Adressen von Nodes ändern und auch Pods auf verschiedenen Nodes gestartet werden können, ist es sehr schwierig, den Datenverkehr auf externen Systemen zu restriktieren. Die einzige Möglichkeit war bisher, den Verkehr von allen NKE-Subnetzen, die in Gebrauch sind, zu erlauben.

Mit der 'Static Egress'-Funktionalität wird diese Einschränkung überwunden. Sie erlaubt Pods, die ein bestimmtes Label gesetzt haben, eine statische IP für ausgehenden Datenverkehr zu verwenden. Der gesamte Egress-Verkehr dieser Pods wird über einen Node im NKE-Cluster geleitet und mit einer statischen Quell-IP versehen. Alle anderen Pods (die nicht über das spezifische Label verfügen) verwenden weiterhin die IP des Nodes, auf dem sie selbst laufen. Auf diese Weise kann der Datenverkehr von bestimmten Pods im Cluster auf externen Systemen (Firewalls usw.) zugelassen/verweigert werden.

Wenn die Node, welche für den statischen Egress-Verkehr ausgewählt wurde, während unseres Wartungsfensters ausgetauscht bzw. ersetzt wird, so wird automatisch eine neue Node ausgewählt, welche die 'Static Egress' Funktionalität für die Pods bereitstellt. Es werden nur Knoten aus dem "nine Node Pool" für diese Aufgabe ausgewählt.

Verfügbarkeit

Die 'Static Egress'-Funktionalität ist derzeitig für die folgenden Produkte verfügbar:

  • NKE Cluster
  • vClusters
  • Deploio-Applikationen

Benutzung

Die Konfiguration der statischen Egress-Funktion unterscheidet sich leicht, je nach verwendetem Produkt.

NKE Cluster

Um die Funktion auf NKE-Clustern zu aktivieren, müssen Sie zuerst die Laufzeitumgebung des 'Static Egress'-Features auf dem NKE-Cluster selbst aktivieren. Die Laufzeitumgebung wählt den ausgehenden Node aus dem "nine"- Nodepool aus und bereitet alle Netzwerkkonfigurationen vor. Die Befehle, um die Laufzeitumgebung zu aktivieren, können aus untenstehender Liste entnommen werden. Die Aktivierung ist eine Voraussetzung, damit das "Static Egress"-Feature genutzt werden kann.

Aktivierung der Static Egress-Laufzeitumgebung

  1. Stellen Sie sicher, dass sie kubectl und nctl installiert haben.

  2. Starten Sie die Authentifizierung gegenüber der API mit nctl:

    nctl auth login
  3. Erstellen Sie eine Liste aller Ihrer Kubernetes Cluster um Ihren präferierten NKE Cluster zu finden.

    nctl get clusters -A
  4. Sobald Sie einen NKE Cluster ausgewählt haben, können Sie die Laufzeitumgebung mittels kubectl und dem Kontext nineapis.ch aktivieren:

    kubectl  --context=nineapis.ch patch kubernetescluster <NAME DES CLUSTERS> -n <PROJECT DES CLUSTERS> \
    --type=merge -p '{"spec":{"forProvider":{"nke":{"staticEgress":{"enabled":true}}}}}'

Erstellung einer Static Egress-Ressource

Nachdem die Laufzeitumgebung aktiviert wurde, kann eine entsprechende "Static Egress"-Ressource erstellt werden. Dies führt zur automatischen Erstellung einer statischen Egress-IP und eines entsprechenden Pod-Labels. Sie können dieses Label dann allen Pods hinzufügen, welche die statische Egress-IP nutzen sollen.

  1. Stellen Sie sicher, dass sie kubectl und nctl installiert haben.

  2. Starten Sie die Authentifizierung gegenüber der API mit nctl:

    nctl auth login
  3. Erstellen Sie eine Liste aller Ihrer Kubernetes Cluster.

    nctl get clusters -A
  4. Erstellen Sie eine Datei static-egress.yaml mit dem folgenden Inhalt und ersetzen Sie dabei die Platzhalter mit Ihren entsprechenden Werten.

    apiVersion: networking.nine.ch/v1alpha1
    kind: StaticEgress
    metadata:
    name: my-static-egress
    namespace: <PROJEKT DES CLUSTERS>
    spec:
    forProvider:
    disabled: false
    target:
    group: infrastructure.nine.ch
    kind: KubernetesCluster
    name: <NAME DES CLUSTERS>
  5. Nutzen Sie nctl um die Datei gegenüber der API anzuwenden.

    nctl apply -f static-egress.yaml
  6. Nach kurzer Zeit wird der Ressource eine IP-Adresse und ein Pod Label zugewiesen.

    $> kubectl --context nineapis.ch get staticegress my-static-egress -n <NAME DES PROJEKTS> -o yaml
    ...
    status:
    atProvider:
    address: <AUTOMATISCH ZUGEWIESENE IP ADDRESSE>
    selectionLabel:
    name: networking.nine.ch/static-egress
    value: <WERT DES POD LABELS>

Zuweisung des Static Egress Labels zu Pods

Nehmen wir an, die angelegte Konfiguration des "Static Egress"-Features hat das Label networking.nine.ch/static-egress: production-egress für die Auswahl der zu selektierenden Pods definiert. Wenn Sie beispielsweise ein Kubernetes Deployment namens "production" haben, das Ihre Produktionsanwendung bereitstellt, können Sie das selektierte Label allen Pods dieses Deployments hinzufügen, indem Sie:

  1. Eine Datei label-patch.yaml mit folgendem Inhalt erstellen:
spec:
template:
metadata:
labels:
networking.nine.ch/static-egress: production-egress
  1. Ihr Kubernetes-Deployment "production" patchen:
kubectl patch deploy production --patch-file=label-patch.yaml

Dies wird neue Pods für das Deployment ausrollen. Diese werden das spezielle "Static Egress"-Label angehängt haben und der gesamte ausgehende Traffic dieser Pods wird nun die statische Egress-IP nutzen.

Wenn Sie das Label wieder entfernen, werden die Pods, statt der statischen Egress-IP, wieder die Standard Node-IPs verwenden.

vCluster

Die Verwendung des "Static Egress"-Features auf virtuellen Clustern ist der von NKE Clustern sehr ähnlich. Der einzige Unterschied besteht darin, dass Sie die Laufzeitumgebung nicht extra aktivieren müssen (dies wird automatisch erledigt). Sie können einfach eine oder mehrere Static Egress-Ressourcen erstellen erstellen und das ausgewählte Kubernetes-Label an Ihre Pods anhängen, wie im Beispiel beschrieben.

Prometheus

Beim Sammeln von Metriken eines externen Ziels mit Prometheus, kann es nützlich sein wenn die Anfragen von einer statischen IP-Adresse kommen. Zuerst muss die Static Egress-Laufzeitumgebung aktiviert werden. Danach kann der Static Egress mit der entsprechenden Prometheus-Instanz als Ziel erstellt werden.

apiVersion: networking.nine.ch/v1alpha1
kind: StaticEgress
metadata:
name: my-static-egress
namespace: <PROJEKT DER PROMETHEUS INSTANZ>
spec:
forProvider:
disabled: false
target:
group: observability.nine.ch
kind: Prometheus
name: <NAME DER PROMETHEUS INSTANZ>

Deploio-Applikationen

Die Konfiguration der "Static Egress"-Funktionalität für Deploio-Applikationen ist sehr einfach. Erstellen Sie einfach eine entsprechende Static Egress- Ressource für Ihre Applikation. Nach der Erstellung wird Ihre Deploio-Anwendung automatisch die statische Egress-IP für ausgehende Kommunikation verwenden.

Erstellen einer Static Egress-Ressource für eine Deploio-Applikation

  1. Stellen Sie sicher, dass sie kubectl und nctl installiert haben.

  2. Starten Sie die Authentifizierung gegenüber der API mit nctl:

    nctl auth login
  3. Erstellen Sie eine Liste aller Ihrer Deploio-Applikationen.

    nctl get apps -A
  4. Erstellen Sie eine Datei deploio-static-egress.yaml mit dem folgenden Inhalt und ersetzen Sie dabei die Platzhalter mit Ihren entsprechenden Werten.

    apiVersion: networking.nine.ch/v1alpha1
    kind: StaticEgress
    metadata:
    name: my-deploio-static-egress
    namespace: <PROJEKT DER APPLIKATION>
    spec:
    forProvider:
    disabled: false
    target:
    group: apps.nine.ch
    kind: Application
    name: <NAME DER APPLIKATION>
  5. Nutzen Sie nctl um die Datei gegenüber der API anzuwenden.

    nctl apply -f deploio-static-egress.yaml
  6. Nach kurzer Zeit wird der Ressource eine IP-Addresse zugewiesen. Die Deploio- Applikation wird automatisch diese IP-Adresse für ausgehenden Datenverkehr verwenden (es wird keine weitere Konfiguration benötigt).

    $> kubectl --context nineapis.ch get staticegress my-deploio-static-egress -n <NAME DES PROJEKTS> -o yaml
    ...
    status:
    atProvider:
    address: <AUTOMATISCH ZUGEWIESENE IP ADRESSE>

Temporäres Deaktivieren einer Static Egress-Ressource

Sie können eine Static Egress-Ressource temporär deaktivieren. Im Gegensatz zum Löschen einer Static Egress-Resource wird dadurch die automatisch selektierte Egress-IP-Addresse nicht gelöscht und kann nach erneuter Aktivierung des Static Egress wieder verwendet werden.

  1. Stellen Sie sicher, dass sie kubectl und nctl installiert haben.

  2. Starten Sie die Authentifizierung gegenüber der API mit nctl:

    nctl auth login
  3. Erstellen Sie eine Lister aller Ihrer Static Egress-Ressourcen, um diejenige auszuwählen, welche Sie deaktivieren wollen.

    nctl get all --kinds staticegress -A
  4. Deaktivieren Sie die Static Egress-Ressource mittels kubectl.

    kubectl  --context=nineapis.ch patch staticegress <NAME DER RESOURCE> -n <PROJEKT DER RESOURCE> \
    --type=merge -p '{"spec":{"forProvider":{"disabled":true}}}'

Löschen einer Static Egress-Ressource

Wenn Sie das Static Egress-Feature wieder entfernen wollen, so können Sie einfach die entsprechende Static Egress-Ressource von der API löschen.

  1. Stellen Sie sicher, dass sie kubectl und nctl installiert haben.

  2. Starten Sie die Authentifizierung gegenüber der API mit nctl:

    nctl auth login
  3. Erstellen Sie eine Liste aller Ihrer Static Egress-Ressourcen um diejenige auszuwählen, welche Sie löschen wollen.

    nctl get all --kinds staticegress -A
  4. Löschen Sie die Ressource mit kubectl.

    kubectl --context nineapis.ch delete staticegress <NAME OF RESOURCE> -n <PROJECT OF RESOURCE>