Wie man einen Dienst in Kubernetes erstellt
Ein Dienst ist eine Abstraktionsschicht über Pods. Er definiert einen logischen Satz von Pods und stellt eine einzige IP-Adresse und einen DNS-Namen bereit, über die auf die Pods zugegriffen werden kann. Der Dienst wird verwendet, um die Pods freizulegen.
Es gibt 3 verschiedene Arten von Diensten in Kubernetes:
- ClusterIP:
Sie stellt den Dienst innerhalb des Kubernetes-Clusters dar. Dieser Service ist nur innerhalb des Clusters erreichbar. Von außerhalb des Clusters ist er nicht erreichbar. - NodePort:
Der Dienst wird über einen statischen Port auf dem entfalteten Knoten bereitgestellt. Auf diesen Dienst kann von außerhalb des Clusters über NodeIP:Nodeport zugegriffen werden. - Load Balancer: Stellt
den Service mit Hilfe des Load Balancers eines Cloud-Providers extern zur Verfügung; dabei wird eine öffentliche IP auf dem Cloud-Provider erstellt - ExternerName:
Er ordnet den Dienst dem Inhalt des Feldes externalName zu, indem er einen CNAME-Eintrag zurückgibt
Klicken Sie hier, um mehr über Kubernetes Service zu erfahren.
In diesem Artikel sehen wir die Schritte zum Erstellen eines Dienstes vom Typ NodePort.
Voraussetzungen
- Kubernetes Cluster mit mindestens 1 Worker-Knoten.
Wenn Sie lernen möchten, wie man einen Kubernetes-Cluster erstellt, klicken Sie hier. Dieses Handbuch hilft Ihnen, einen Kubernetes-Cluster mit 1 Master- und 2 Worker-Knoten auf AWS Ubuntu 18l04 EC2-Instanzen zu erstellen.
Was wir tun werden
- Einen Dienst erstellen
Einen Dienst erstellen
Zunächst erstellen wir anhand der folgenden Definition einen Einsatz, an den der Dienst alle eingehenden Anfragen weiterleiten wird.
Erstellen Sie eine neue Datei und fügen Sie darin den folgenden Inhalt hinzu, wodurch eine Bereitstellung für Nginx erstellt wird.
vim my-deployment.yml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: strategy: type: Recreate selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
Um eine Bereitstellung zu erstellen, führen Sie den folgenden Befehl aus.
kubectl create -f my-deployment.yml
Dadurch wird eine Bereitstellung für Nginx mit 3 Replikaten erstellt.
Sie können die Details der Bereitstellung, des Replikasets und des Pods mit den folgenden Befehlen abrufen.
kubectl get deployment | grep nginx
kubectl get replicaset | grep nginx
kubectl get pod | grep nginx
Auf dem obigen Screenshot sehen Sie, dass 3 Replikate der Nginx erstellt wurden.
Erstellen Sie nun eine Dienstdefinition mit dem folgenden Inhalt.
vim my-service.yml
apiVersion: v1 kind: Service metadata: name: nginx namespace: default labels: app: nginx spec: externalTrafficPolicy: Local ports: - name: http port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: NodePort
Die obige Dienstdefinition erstellt einen Dienst vom Typ NodePort und leitet Anfragen an Pod um, die der Bezeichnung nginx entsprechen, d.h. an Pods, die wir mit dem vorherigen Schritt zur Erstellung der Bereitstellung erstellt haben.
Führen Sie den folgenden Befehl aus, um einen Dienst zu erstellen.
kubectl create -f my-service.yml
Informieren Sie sich über die Details des Dienstes und suchen Sie nach dem NodePort, auf dem der Dienst verfügbar sein wird.
kubectl get service | grep nginx
kubectl describe service nginx
Auf dem obigen Screenshot ist zu sehen, dass der Dienst auf Port 30747 verfügbar ist. Dies kann für Sie anders sein, da der Port zufällig aus dem verfügbaren Bereich zugewiesen wird.
Jetzt kann auf die nginx-Anwendung über diesen Dienst auf NodeIp:NodePort zugegriffen werden.
Hier lautet er: 106.210.138.189:30747
Schlussfolgerung
In diesem Artikel haben wir eine Bereitstellung für Nginx mit 3 Replikaten erstellt und einen Dienst vom Typ NodePort erstellt. Wir haben gesehen, wie auf die mit der Bereitstellung erstellte Nginx-Anwendung über NodeIP:Port zugegriffen werden kann.