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, musst du 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
- Kubectl
- Cockpit
-
Stelle sicher, dass du
kubectlundnctlinstalliert hast. -
Starte die Authentifizierung gegenüber der API mit
nctl:nctl auth login -
Erstelle eine Liste aller deiner Kubernetes Cluster um deinen präferierten NKE Cluster zu finden.
nctl get clusters -A -
Sobald du einen NKE Cluster ausgewählt hast, kannst du die Laufzeitumgebung mittels
kubectlund 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}}}}}'
Navigiere zum Kubernetes Cluster und wähle den Tab Static Egress. Du kannst dann Static Egress für den Cluster aktivieren, indem du auf den Checkbox-Slider Static Egress aktivieren klickst.
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. Du kannst dieses Label dann allen Pods hinzufügen, welche die statische Egress-IP nutzen sollen.
- Kubectl
- Cockpit
- nctl
-
Stelle sicher, dass du
kubectlundnctlinstalliert hast. -
Starte die Authentifizierung gegenüber der API mit
nctl:nctl auth login -
Erstelle eine Liste aller deiner Kubernetes Cluster.
nctl get clusters -A -
Erstelle eine Datei
static-egress.yamlmit dem folgenden Inhalt und ersetze dabei die Platzhalter mit deinen entsprechenden Werten.apiVersion: networking.nine.ch/v1alpha1kind: StaticEgressmetadata:name: my-static-egressnamespace: <PROJEKT DES CLUSTERS>spec:forProvider:disabled: falsetarget:group: infrastructure.nine.chkind: KubernetesClustername: <NAME DES CLUSTERS> -
Nutze
nctlum die Datei gegenüber der API anzuwenden.nctl apply -f static-egress.yaml -
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-egressvalue: <WERT DES POD LABELS>
Nachdem du die Static Egress aktiviert hast, erscheint ein Button Erstellen. Mithilfe des Buttons kannst du über ein Formular die Static Egress Ressource erstellen.
-
Stelle sicher, dass
nctlinstalliert ist. -
Starte die Authentifizierung gegenüber der API:
nctl auth login -
Setze das Projekt, das den Ziel-Cluster enthält:
nctl auth set-project <PROJECT> -
Erstelle eine Static Egress-Ressource für deinen Cluster:
nctl create staticegress my-static-egress --cluster <NAME DES CLUSTERS> -
Nach kurzer Zeit kannst du die Static Egress-Ressourcen auflisten, um die zugewiesene IP-Adresse zu sehen:
nctl get staticegress my-static-egress
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 du beispielsweise ein Kubernetes
Deployment namens "production" hast, das deine Produktionsanwendung
bereitstellt, kannst du das selektierte Label allen Pods dieses Deployments
hinzufügen, indem du:
- Eine Datei
label-patch.yamlmit folgendem Inhalt erstellst:
spec:
template:
metadata:
labels:
networking.nine.ch/static-egress: production-egress
- Dein Kubernetes-Deployment "production" patchst:
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 du das Label wieder entfernst, 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 du die Laufzeitumgebung nicht extra aktivieren musst (dies wird automatisch erledigt). Du kannst einfach eine oder mehrere Static Egress-Ressourcen erstellen erstellen und das ausgewählte Kubernetes-Label an deine 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.
- Kubectl
- Cockpit
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>
Static Egress für Prometheus ist noch nicht im Cockpit verfügbar.
Deploio-Applikationen
Die Konfiguration der "Static Egress"-Funktionalität für Deploio-Applikationen ist sehr einfach. Erstelle einfach eine entsprechende Static Egress- Ressource für deine Applikation. Nach der Erstellung wird deine Deploio-Anwendung automatisch die statische Egress-IP für ausgehende Kommunikation verwenden.
Erstellen einer Static Egress-Ressource für eine Deploio-Applikation
- Kubectl
- Cockpit
- nctl
-
Stelle sicher, dass du
kubectlundnctlinstalliert hast. -
Starte die Authentifizierung gegenüber der API mit
nctl:nctl auth login -
Erstelle eine Liste aller deiner Deploio-Applikationen.
nctl get apps -A -
Erstelle eine Datei
deploio-static-egress.yamlmit dem folgenden Inhalt und ersetze dabei die Platzhalter mit deinen entsprechenden Werten.apiVersion: networking.nine.ch/v1alpha1kind: StaticEgressmetadata:name: my-deploio-static-egressnamespace: <PROJEKT DER APPLIKATION>spec:forProvider:disabled: falsetarget:group: apps.nine.chkind: Applicationname: <NAME DER APPLIKATION> -
Nutze
nctlum die Datei gegenüber der API anzuwenden.nctl apply -f deploio-static-egress.yaml -
Nach kurzer Zeit wird der Ressource eine IP-Adresse 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>
Navigiere zur Applikation und wähle den Tab Static Egress. Du kannst dann Static Egress für die Applikation aktivieren, indem du auf den Button Static Egress aktivieren klickst.
-
Stelle sicher, dass
nctlinstalliert ist. -
Starte die Authentifizierung gegenüber der API:
nctl auth login -
Setze das Projekt, das die Ziel-Applikation enthält:
nctl auth set-project <PROJECT> -
Erstelle eine Static Egress-Ressource für deine Applikation:
nctl create staticegress my-deploio-static-egress --application <NAME DER APPLIKATION> -
Nach kurzer Zeit kannst du die Static Egress-Ressourcen auflisten, um die zugewiesene IP-Adresse zu sehen:
nctl get staticegress my-deploio-static-egress
Temporäres Deaktivieren einer Static Egress-Ressource
Du kannst eine Static Egress-Ressource temporär deaktivieren. Im Gegensatz zum Löschen einer Static Egress-Resource wird dadurch die automatisch selektierte Egress-IP-Adresse nicht gelöscht und kann nach erneuter Aktivierung des Static Egress wieder verwendet werden.
- Kubectl
- Cockpit
- nctl
-
Stelle sicher, dass du
kubectlundnctlinstalliert hast. -
Starte die Authentifizierung gegenüber der API mit
nctl:nctl auth login -
Erstelle eine Liste aller deiner Static Egress-Ressourcen, um diejenige auszuwählen, welche du deaktivieren willst.
nctl get staticegress -
Deaktiviere 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}}}'
Für Kubernetes Cluster und vcluster: Auf der Kubernetes Cluster Seite, gehe zum Static Egress Tab und wähle deine Static Egress Ressource aus. Klicke auf den Bearbeiten Button und aktiviere den Checkbox-Slider Deaktiviert um Static Egress zu deaktivieren. Klicke den Speichern Button, um die Änderungen zu speichern.
Für Deplo.io Applikationen: Auf der Applikationsseite, gehe zum Tab Static Egress. Du kannst hier auf den Deaktiviert Checkbox-Slider klicken, um Static Egress zu deaktivieren.
-
Stelle sicher, dass
nctlinstalliert ist. -
Starte die Authentifizierung gegenüber der API:
nctl auth login -
Setze das Projekt, das die Static Egress-Ressource enthält:
nctl auth set-project <PROJECT> -
Liste die Static Egress-Ressourcen im aktuellen Projekt auf:
nctl get staticegress -
Deaktiviere die Static Egress-Ressource:
nctl update staticegress <NAME DER RESSOURCE> --disabledUm eine deaktivierte Static Egress-Ressource wieder zu aktivieren:
nctl update staticegress <NAME DER RESSOURCE> --no-disabled
Löschen einer Static Egress-Ressource
Wenn du das Static Egress-Feature wieder entfernen willst, so kannst du einfach die entsprechende Static Egress-Ressource von der API löschen.
- Kubectl
- Cockpit
- nctl
-
Stelle sicher, dass du
kubectlundnctlinstalliert hast. -
Starte die Authentifizierung gegenüber der API mit
nctl:nctl auth login -
Erstelle eine Liste aller deiner Static Egress-Ressourcen um diejenige auszuwählen, welche du löschen willst.
nctl get staticegress -
Lösche die Ressource mit
kubectl.kubectl --context nineapis.ch delete staticegress <NAME DER RESSOURCE> -n <PROJEKT DER RESSOURCE>
Um den Static Egress zu löschen, klicke auf den Button Löschen auf der Seite der Static Egress Ressource.
-
Stelle sicher, dass
nctlinstalliert ist. -
Starte die Authentifizierung gegenüber der API:
nctl auth login -
Setze das Projekt, das die Static Egress-Ressource enthält:
nctl auth set-project <PROJECT> -
Liste die Static Egress-Ressourcen im aktuellen Projekt auf:
nctl get staticegress -
Lösche die Static Egress-Ressource:
nctl delete staticegress <NAME DER RESSOURCE>