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
- Kubectl
- Cockpit
-
Stellen Sie sicher, dass sie
kubectl
undnctl
installiert haben. -
Starten Sie die Authentifizierung gegenüber der API mit
nctl
:nctl auth login
-
Erstellen Sie eine Liste aller Ihrer Kubernetes Cluster um Ihren präferierten NKE Cluster zu finden.
nctl get clusters -A
-
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}}}}}'
Navigieren Sie zum Kubernetes Cluster und wählen Sie den Tab Static Egress
. Sie können dann Static Egress für den Cluster aktivieren, indem Sie auf den Checkbox-Slider Static Egress aktivieren
klicken.
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.
- Kubectl
- Cockpit
-
Stellen Sie sicher, dass sie
kubectl
undnctl
installiert haben. -
Starten Sie die Authentifizierung gegenüber der API mit
nctl
:nctl auth login
-
Erstellen Sie eine Liste aller Ihrer Kubernetes Cluster.
nctl get clusters -A
-
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> -
Nutzen Sie
nctl
um 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-egress
value: <WERT DES POD LABELS>
Nachdem Sie die Static Egress aktiviert haben, erscheint ein Button Erstellen
. Mithilfe des Buttons können Sie über ein Formular die Static Egress Ressource erstellen.
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:
- Eine Datei
label-patch.yaml
mit folgendem Inhalt erstellen:
spec:
template:
metadata:
labels:
networking.nine.ch/static-egress: production-egress
- 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.
- 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. 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
- Kubectl
- Cockpit
-
Stellen Sie sicher, dass sie
kubectl
undnctl
installiert haben. -
Starten Sie die Authentifizierung gegenüber der API mit
nctl
:nctl auth login
-
Erstellen Sie eine Liste aller Ihrer Deploio-Applikationen.
nctl get apps -A
-
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> -
Nutzen Sie
nctl
um die Datei gegenüber der API anzuwenden.nctl apply -f deploio-static-egress.yaml
-
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>
Navigieren Sie zur Applikation und wählen Sie den Tab Static Egress
. Sie können dann Static Egress für die Applikation aktivieren, indem Sie auf den Button Static Egress aktivieren
klicken.
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.
- Kubectl
- Cockpit
-
Stellen Sie sicher, dass sie
kubectl
undnctl
installiert haben. -
Starten Sie die Authentifizierung gegenüber der API mit
nctl
:nctl auth login
-
Erstellen Sie eine Lister aller Ihrer Static Egress-Ressourcen, um diejenige auszuwählen, welche Sie deaktivieren wollen.
nctl get all --kinds staticegress -A
-
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}}}'
Für Kubernetes Cluster und vcluster: Auf der Kubernetes Cluster Seite, gehen Sie zum Static Egress
Tab und wählen Sie Ihre Static Egress Ressource aus. Klicken Sie auf den Bearbeiten
Button und aktivieren Sie den Checkbox-Slider Deaktiviert
um Static Egress zu deaktivieren. Klicken Sie den Speichern
Button, um die Änderungen zu speichern.
Für Deplo.io Applikationen: Auf der Applikationsseite, gehen Sie zum Tab Static Egress
. Sie können hier auf den Deaktiviert
Checkbox-Slider klicken, um Static Egress zu deaktivieren.
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.
- Kubectl
- Cockpit
-
Stellen Sie sicher, dass sie
kubectl
undnctl
installiert haben. -
Starten Sie die Authentifizierung gegenüber der API mit
nctl
:nctl auth login
-
Erstellen Sie eine Liste aller Ihrer Static Egress-Ressourcen um diejenige auszuwählen, welche Sie löschen wollen.
nctl get all --kinds staticegress -A
-
Löschen Sie die Ressource mit
kubectl
.kubectl --context nineapis.ch delete staticegress <NAME OF RESOURCE> -n <PROJECT OF RESOURCE>
Um den Static Egress zu löschen, klicken Sie auf den Button Löschen
auf der Seite der Static Egress Ressource.