Lektion 05 · Deployen & Netzwerk

Erreichbar machen

Pods kommen und gehen — ein Service gibt deiner App eine stabile Adresse.

Pods bekommen bei jedem Neustart eine neue IP. Du kannst dich also nie auf eine Pod-IP verlassen. Die Lösung: ein Service — eine feste Adresse mit eingebautem Load-Balancer vor deinen Pods.

1. Wie ein Service seine Pods findet

Genau wie das Deployment nutzt der Service einen Selector: „schick Verkehr an alle Pods mit app=web“. Pods dürfen sterben und neu entstehen — solange das Label stimmt, leitet der Service weiter.

apiVersion: v1
kind: Service
metadata:
  name: web
  namespace: lernen
spec:
  selector:
    app: web            # trifft die Pods aus Lektion 4
  ports:
    - port: 80          # Port DES SERVICE (so rufst du ihn)
      targetPort: 80    # Port IM CONTAINER (dorthin leitet er)
port vs. targetPort

port = Klingelschild (woran man klopft). targetPort = die Tür dahinter (wo der Container lauscht). Verwechslung der beiden ist der Service-Klassiker.

2. Die drei Service-Typen

TypErreichbar vonWofür
ClusterIPnur clusterinternDefault; App-zu-App im Cluster
NodePortPort jedes Nodes (außen)einfacher externer Zugang / Homelab
LoadBalancerexterne IPProduktion (Cloud / MetalLB im Homelab)

3. Testen ohne Außentür: port-forward

Du musst einen Service nicht nach außen öffnen, um ihn zu testen. port-forward legt einen lokalen Port sicher auf den Service/Pod — nur für dich, nur solange der Befehl läuft.

# Service anlegen (Manifest aus Schritt 1 als svc.yaml)
kubectl apply -f svc.yaml

# Lokalen Port 8080 auf den Service legen (läuft im Vordergrund)
kubectl port-forward -n lernen svc/web 8080:80

# In einem zweiten Terminal:
curl http://localhost:8080
Warum port-forward das sichere Debug-Werkzeug ist

Es öffnet nichts dauerhaft und ändert nichts am Cluster. Schließt du den Befehl (Ctrl-C), ist der Zugang wieder zu. Ideal, um „läuft die App überhaupt?“ zu prüfen, bevor du Netzwerk-Themen debuggst.

4. Hands-on

kubectl get svc -n lernen
kubectl describe svc web -n lernen        # Endpoints: zeigt die getroffenen Pods
kubectl get endpoints web -n lernen       # leer? → Selector passt nicht zu den Pod-Labels!

Merke fürs Debuggen: leere Endpoints = Selector trifft keine Pods. Häufigster Service-Fehler.

Selbsttest

1. Warum verlässt man sich nie direkt auf eine Pod-IP-Adresse?
2. Der Service hat keine Endpoints. Was prüfst du zuerst?
3. Was macht kubectl port-forward?
Frag deinen Lehrer: „Wie mache ich die App im Homelab von außen erreichbar?“, „Was ist ein Ingress im Vergleich zum Service?“ oder „Warum sind meine Endpoints leer?“