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: webSolange 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-nodeportNodePort 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: webService:
selector:
app: webWenn 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.localDadurch 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