Wie kann ich Services von Kubernetes Node Ports zuweisen?
Komponente | Kubernetes, MicroK8s |
---|---|
Version | 1.19 |
Erstellt am |
|
Zuletzt geändert am | Mon, 24 Feb 2025 12:57:42 GMT |
Reviewstatus | Review: Approved (1/1) |
KB-Artikelnummer | 1213530227 |
Zusammenfassung
In diesem Artikel erfahren Sie, wie Sie Services von Kubernetes (z.B. MySQL-Datenbank von edoc automate oder edoc workplace) über NodePort veröffentlichen. Mit dem Veröffentlichen über NodePort erhält die Datenbank oder der Service einen von außerhalb der Kubernetes-Umgebung erreichbaren Port. Sie können auf diese Weise z.B. Stammdatentabellen in edoc automate befüllen oder in Supportfällen auf die Datenbanken zugreifen.
Wichtige Voraussetzungen
edoc platform (On-Premises)
SSH-Zugriff auf den Server mit sudo-Berechtigung
Lösung
Um einen NodePort für einen Service zu konfigurieren, benötigen Sie folgende Informationen:
$NAME: Name des neuen Services.
$NAMESPACE: Name des Kubernetes-Namespaces (master, test, staging, default).
$SELECTOR:
Selector: (run=)
.$NODEPORT: externer Zielport.
$PORT: interner Zielport (Port im Kubernetes-Container).
Mit dem folgenden Befehl werden alle Services in allen Namespaces inklusive Ports und Selector: (run=)
aufgelistet.
kubectl get services -o wide -A
Beispielausgabe (gekürzt):
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
master workflow-session-socket-service ClusterIP 10.152.183.248 <none> 80/TCP 708d run=workflow-session-socket-container
master workflow-session-socket ClusterIP 10.152.183.26 <none> 80/TCP 708d run=workflow-session-socket-container
master workflow-service ClusterIP 10.152.183.227 <none> 80/TCP 708d run=workflow-container
master workflow-redis ClusterIP 10.152.183.18 <none> 6379/TCP 708d run=workflow-redis-container
master workflow-mysql ClusterIP 10.152.183.163 <none> 3306/TCP 708d run=workflow-mysql-container
master workflow
Alle benötigen Informationen stehen Ihnen nach dem Ausführen des Befehls zur Verfügung. Nachfolgend erstellen Sie mithilfe einer Vorlage einen neuen Service, der den Port von außen verfügbar macht.
Ersetzen Sie die Variablen durch die Werte, die Sie aus dem vorigen Befehl erhalten haben:
apiVersion: v1
kind: Service
metadata:
name: $NAME
namespace: $KUBERNETES_NAMESPACE
spec:
type: NodePort
selector:
run: $SELECTOR
ports:
- port: $PORT
nodePort: $NODEPORT
Speichern Sie die Datei auf dem Server z.B. in dem home-Verzeichnis des aktuellen Benutzers:
/home/$USER/$SERVICENAME.yaml
Mit folgendem Befehl aktivieren Sie den Service mit Kubernetes:
kubectl apply -f /home/$USER/$SERVICENAME.yaml
Der Service sollte nun unter dem definierten Port von außen bereit stehen. Prüfen Sie mit folgendem Befehl, ob der Service zur Verfügung steht:
kubectl get services -o wide -A
Der neue Service wird in der Liste angezeigt.
Beispiel: Veröffentlichen der MySQL-Datenbank von edoc workplace
Um die MySQL-Datenbank von edoc workplace in der master-Umgebung unter Port 31111 zu veröffentlichen, können Sie folgende Datei verwenden:
apiVersion: v1
kind: Service
metadata:
name: workflow-mysql-extern
namespace: master
spec:
type: NodePort
selector:
run: workflow-mysql-container
ports:
- port: 3306
nodePort: 31111
kubectl apply -f /home/$USER/workflow-mysql-extern.yaml
Nach dem Anwenden der Service-Definition steht der NodePort zur Verfügung. Die Verfügbarkeit können Sie mithilfe der folgenden Ausgabe der Services überprüfen:
kubectl get services -o wide -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
master workflow-mysql-extern NodePort 10.152.183.215 <none> 3306:31111/TCP 18h run=workflow-mysql-container
Der Port 31111 ist nun von außen verfügbar und stellt Port 3306 den Container workflow-mysql-container zur Verfügung.