Kubernetes Services & Ingress

6 Kernkonzepte
Die wichtigsten Konzepte für Netzwerkzugriff in Kubernetes: ClusterIP · NodePort · LoadBalancer · Ingress · TLS · kubectl Services und Ingress sind die zentralen Komponenten für den Netzwerkzugriff auf Pods in Kubernetes. Sie ermöglichen die Kommunikation innerhalb des Clusters und von außen.

ClusterIP – Interner Service

ClusterIP (Default)
apiVersion: v1 kind: Service metadata: name: my-service spec: type: ClusterIP ports: - port: 80 targetPort: 8080 selector: app: my-app

ClusterIP ist der Standard-Service-Typ. Er macht den Service nur innerhalb des Kubernetes-Clusters erreichbar – ideal für die Kommunikation zwischen Services (z.B. App ↔ Datenbank).

Beispiele
# service-clusterip.yaml
apiVersion: v1
kind: Service
metadata:
name: backend
spec:
type: ClusterIP
ports:
- port: 5432
targetPort: 5432
selector:
app: postgres
# Anwenden:
kubectl apply -f service-clusterip.yaml
kubectl get svc # ClusterIP sichtbar
Tipp: ClusterIP ist der Standard-Service-Typ. Für die Kommunikation zwischen Services innerhalb des Clusters verwenden Sie immer ClusterIP – er ist sicher und effizient.

NodePort – Externer Zugriff über Node-Port

NodePort: 30000-32767
spec: type: NodePort ports: - port: 80 targetPort: 8080 nodePort: 30001

NodePort macht den Service auf einem bestimmten Port (30000-32767) auf jedem Node des Clusters erreichbar. Ideal für Entwicklung und lokale Tests.

Beispiele
# service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
name: web-nodeport
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
nodePort: 30001 # Optional, sonst automatisch
selector:
app: nginx
# Zugriff von außen: http://<node-ip>:30001
kubectl get nodes -o wide # Node-IP finden
Tipp: NodePort ist ideal für lokale Entwicklungsumgebungen (z.B. Minikube, Kind). Für Produktion verwenden Sie LoadBalancer oder Ingress.

LoadBalancer – Cloud-Loadbalancer

LoadBalancer (Cloud Provider)
spec: type: LoadBalancer ports: - port: 80 targetPort: 8080

LoadBalancer integriert sich mit Cloud-Providern (AWS, GCP, Azure) und erstellt automatisch einen externen LoadBalancer mit einer öffentlichen IP-Adresse.

Beispiele
# service-loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:
name: web-lb
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
app: web
# Externe IP nach Provisionierung:
kubectl get svc web-lb
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
web-lb LoadBalancer 10.96.0.1 123.45.67.89 80:30001/TCP
Tipp: LoadBalancer ist der Standard für Produktionsumgebungen in der Cloud. Er verteilt den Traffic automatisch auf alle Pods und bietet eine öffentliche, stabile IP-Adresse.

Ingress – HTTP/HTTPS Routing

Ingress + Ingress Controller
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: web-service port: number: 80

Ingress ermöglicht HTTP/HTTPS-Routing mit virtuellen Hosts, Pfadbasiertem Routing und TLS-Terminierung. Ein Ingress-Controller (z.B. NGINX) ist erforderlich.

Beispiele
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: app.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
Tipp: Für Ingress muss ein Ingress-Controller installiert sein (z.B. NGINX, Traefik, AWS ALB). Ingress bietet die flexibelste und kostengünstigste Lösung für HTTP/HTTPS-Routing.

TLS – HTTPS mit Ingress

tls: secretName
spec: tls: - hosts: - app.example.com secretName: app-tls-secret rules: # ... wie zuvor

TLS ermöglicht HTTPS-Terminierung am Ingress-Controller. Das Zertifikat wird als Kubernetes Secret gespeichert.

Beispiele
# 1. TLS-Secret erstellen
kubectl create secret tls app-tls-secret \
--cert=path/to/tls.crt \
--key=path/to/tls.key
# 2. Ingress mit TLS
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress-tls
spec:
tls:
- hosts:
- app.example.com
secretName: app-tls-secret
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
Tipp: Für Produktion empfiehlt sich die Verwendung von cert-manager für automatische Zertifikate (Let's Encrypt). In Entwicklung können Sie selbst-signierte Zertifikate oder Tools wie mkcert verwenden.

kubectl Befehle – Services & Ingress verwalten

get svc · describe · expose · delete
kubectl get svc kubectl get ingress kubectl describe svc my-service kubectl expose deployment web --type=NodePort --port=80

kubectl ist das Kommandozeilen-Tool für die Kubernetes-Verwaltung. Diese Befehle sind für die Arbeit mit Services und Ingress unverzichtbar.

Die wichtigsten kubectl-Befehle

Befehl Beschreibung
kubectl get svc Alle Services anzeigen
kubectl get svc -A Services in allen Namespaces
kubectl get ingress Alle Ingress-Ressourcen anzeigen
kubectl describe svc <name> Detailinformationen eines Services
kubectl describe ingress <name> Detailinformationen eines Ingress
kubectl expose deployment <name> --type=NodePort --port=80 Service aus Deployment erstellen
kubectl delete svc <name> Service löschen
kubectl delete ingress <name> Ingress löschen
kubectl port-forward svc/<name> 8080:80 Port-Forwarding für lokalen Zugriff
Beispiele
kubectl get svc # Alle Services
kubectl get ingress # Alle Ingress
kubectl describe svc web-service # Details
kubectl expose deployment web --type=LoadBalancer --port=80 # Service erstellen
kubectl port-forward svc/web-service 8080:80 # Lokaler Zugriff
kubectl delete svc web-service # Service löschen
Tipp: kubectl port-forward ist perfekt für Debugging und lokale Tests – Sie können auf Services zugreifen, ohne sie extern zu veröffentlichen.

Kubernetes Service-Typen im Überblick

ClusterIP Intern (Cluster-intern)
Standard, nur im Cluster
NodePort Extern über Node-Port
30000-32767, für Entwicklung
LoadBalancer Cloud-Loadbalancer
Öffentliche IP, für Produktion
Ingress HTTP/HTTPS Routing
Virtuelle Hosts, TLS
ExternalName DNS-Alias
CNAME für externe Services
Headless Keine LoadBalancing
clusterIP: None

Quick Summary

ClusterIP
Interner Service
NodePort
Externer Node-Port
LoadBalancer
Cloud-Loadbalancer
Ingress
HTTP/HTTPS Routing
TLS
HTTPS-Terminierung
kubectl
Verwaltung
kubectl get svc · kubectl expose deployment web --type=LoadBalancer · kubectl describe ingress app-ingress