Kubernetes Services

Kubernetes Services – ClusterIP, NodePort & LoadBalancer verständlich erklärt

Nachdem ich die Grundlagen von Pods, Deployments und kubectl verstanden habe, kam schnell die nächste große Frage: Wie mache ich meine Anwendung überhaupt erreichbar?

Pods sind kurzlebig, können sich ständig ändern und erhalten immer neue IP-Adressen. Damit greift man nicht direkt auf Pods zu, sondern nutzt Kubernetes Services. Services sorgen dafür, dass Anwendungen stabil erreichbar bleiben – egal, wie oft sich Pods ändern.

Was ist ein Service in Kubernetes?

Ein Service ist ein stabiler Endpunkt (IP + Port), der automatisch auf die richtigen Pods zeigt. Ein Service findet immer die passenden Pods über Labels & Selectors.

selector:
  app: web

Solange Pods dieses Label haben, leitet der Service automatisch den Traffic weiter.

Die drei wichtigsten Servicetypen

1. ClusterIP – der Standard (für internen Traffic)

ClusterIP ist der Default-Typ. Er macht die Anwendung nur innerhalb des Clusters erreichbar.

Typisches Beispiel: Kommunikation zwischen Backend und Datenbank.

apiVersion: v1
kind: Service
metadata:
  name: web-clusterip
spec:
  type: ClusterIP
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 80

ClusterIP eignet sich hervorragend für interne Services oder Microservices, die untereinander sprechen müssen.

2. NodePort – Anwendung von außen erreichbar machen

Mit NodePort öffnet Kubernetes einen festen Port auf jedem Node (z. B. 30000–32767). Über diesen Port kannst du die App von außerhalb erreichen.

apiVersion: v1
kind: Service
metadata:
  name: web-nodeport
spec:
  type: NodePort
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30080

In Minikube kannst du die App mit einem einzigen Befehl öffnen:

minikube service web-nodeport

NodePort ist ideal für Testumgebungen oder lokale Entwicklungen.

3. LoadBalancer – die Cloud-Variante für Produktivsysteme

Bei LoadBalancer erstellt Kubernetes einen echten externen Load Balancer (z. B. von AWS, Azure oder Google Cloud). Die App erhält dadurch eine öffentliche IP-Adresse.

apiVersion: v1
kind: Service
metadata:
  name: web-loadbalancer
spec:
  type: LoadBalancer
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 80

LoadBalancer ist der gebräuchlichste Typ für produktive Webanwendungen in der Cloud.

Wie Services Pods finden

Services verbinden sich nicht direkt mit Pods, sondern nutzen: Label Selectors.

Beispiel Pod-Template im Deployment:

labels:
  app: web

Service:

selector:
  app: web

Wenn neue Pods entstehen, erkennt der Service sie automatisch. Du musst nichts anpassen – Services sind dadurch extrem robust.

Service Discovery

Kubernetes bietet automatische DNS-Namen für jeden Service:

web-clusterip.default.svc.cluster.local

Dadurch können Microservices ganz einfach miteinander kommunizieren, ohne IP-Adressen zu kennen.

Load Balancing

Ein Service verteilt eingehenden Traffic automatisch auf alle passenden Pods. Das ist integriertes Load Balancing – ohne zusätzliche Tools.

Wichtige kubectl-Befehle

kubectl get services
kubectl describe service web-nodeport
kubectl port-forward svc/web-clusterip 8080:80
kubectl delete service web-loadbalancer

Mit port-forward kannst du sogar ohne NodePort oder LoadBalancer deine App lokal erreichbar machen.

Fazit

Services gehören zu den wichtigsten Bausteinen in Kubernetes. Ohne sie wäre ein stabiler Zugriff auf Anwendungen praktisch unmöglich.

Die wichtigsten Erkenntnisse:

  • ClusterIP – interner Traffic
  • NodePort – extern erreichbar über Node-Port
  • LoadBalancer – produktiver Zugriff in der Cloud

Im nächsten Artikel geht es um Ingress – und wie du Anwendungen über echte URLs, Domains und Routing erreichbar machst.


Nächster Artikel: Kubernetes Ingress – Einstieg in Routing & externen Zugriff

Nach oben scrollen