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:

  1. 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.
  2. 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.
  3. 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
  4. 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

  1. 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

  1. 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

mein-Einsatz

Um eine Bereitstellung zu erstellen, führen Sie den folgenden Befehl aus.

kubectl create -f my-deployment.yml

Erstellen-Bereitstellung

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

get-deployment-details

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

Mein-Dienst

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

Dienst erstellen

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

get-service-details

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

Zugangsdienst

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.

Das könnte Dich auch interessieren …