Workloads / Routing · Stand 2026-07-07

03 Deployment, Service und Route

Deployment beschreibt den gewünschten Pod-Zustand, Service gibt Pods eine stabile interne Adresse, Route veröffentlicht HTTP/S nach außen über den OpenShift-Ingress.

Diagramm zu 03 Deployment, Service und Route
Kompakte fachliche und technische Darstellung.

Fachliche Erklärung

Pods sind austauschbar. Niemand sollte direkt auf einen Pod zeigen. Ein Service ist die stabile interne Adresse, eine Route ist der externe Eingang.

Ein Rollout ersetzt alte Pods durch neue Pods. Readiness entscheidet, ob ein Pod Traffic bekommen darf; Liveness entscheidet, ob ein Pod neu gestartet werden soll.

Deployment vs DeploymentConfig

Für neue Anwendungen ist das Kubernetes Deployment meistens die Standardwahl.

DeploymentConfig ist OpenShift-spezifisch und historisch wichtig, vor allem in älteren OpenShift-Setups mit ImageChange-Triggern und besonderen Lifecycle-Hooks.

In Modernisierungsprojekten tauchen beide Formen auf; deshalb muss man beide lesen können.

TLS bei Routes

edge: TLS endet am Router, zum Service geht es unverschlüsselt weiter.

reencrypt: TLS endet am Router und wird zum Backend neu verschlüsselt.

passthrough: Router reicht TLS durch, Backend terminiert selbst.

Ausführliches Enterprise-Beispiel

Das Beispiel folgt einer fiktiven Shop-Landschaft mit order-api, billing-api, payment-api, portal-ui, Batch-Export und Messaging. Der Fokus liegt auf sauberem Verständnis statt auf blindem Kopieren.

Fachlicher Ablauf

  1. Kunde bestellt über Portal.
  2. order-api validiert Auftrag.
  3. billing-api erzeugt Rechnung.
  4. payment-api prüft Zahlung.
  5. Events informieren Lager und Reporting.

Technischer Ablauf

  1. Route nimmt HTTPS an.
  2. Service verteilt auf Pods.
  3. Pods lesen ConfigMaps und Secrets.
  4. Readiness schützt Rollout.
  5. Monitoring misst Fehlerquote und Latenz.

Konfigurations- und Codebeispiele

YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-api
  labels:
    app: order-api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: order-api
  template:
    metadata:
      labels:
        app: order-api
    spec:
      serviceAccountName: order-api-sa
      containers:
        - name: order-api
          image: image-registry.openshift-image-registry.svc:5000/shop/order-api:1.0.0
          ports:
            - containerPort: 8080
          resources:
            requests:
              cpu: 250m
              memory: 512Mi
            limits:
              cpu: 1000m
              memory: 1024Mi
          readinessProbe:
            httpGet:
              path: /q/health/ready
              port: 8080
            initialDelaySeconds: 10
            periodSeconds: 10
          livenessProbe:
            httpGet:
              path: /q/health/live
              port: 8080
            initialDelaySeconds: 30
            periodSeconds: 20

YAML

apiVersion: v1
kind: Service
metadata:
  name: order-api
spec:
  selector:
    app: order-api
  ports:
    - name: http
      port: 8080
      targetPort: 8080
---
apiVersion: route.openshift.io/v1
kind: Route
metadata:
  name: order-api
spec:
  host: order-api.apps.example.com
  to:
    kind: Service
    name: order-api
  port:
    targetPort: http
  tls:
    termination: edge
    insecureEdgeTerminationPolicy: Redirect

BASH

oc -n shop rollout status deploy/order-api
oc -n shop get pods -l app=order-api -o wide
oc -n shop get svc,route
oc -n shop describe route order-api

Typische Fehlerbilder und Diagnose

Pending Pods

Prüfe Ressourcen, Node-Selector, Taints, PVC und Quotas. Nicht sofort am Java-Code suchen.

CrashLoopBackOff

Prüfe Logs des vorherigen Containers, Config/Secrets, Port, JVM Memory und Health Endpoints.

Route erreichbar, App nicht

Prüfe Service-Selector, Endpoints, Readiness, TLS-Termination und NetworkPolicy.

Praxisaufgabe

Baue eine Route mit edge TLS und erkläre, welche Zertifikate wo liegen und wer sie erneuert.

Merksätze

  • Deklarativer Zustand ist wichtiger als manuelle Serveränderung.
  • Security und Betrieb gehören von Anfang an zum Deployment.
  • Jede YAML-Datei ist Architekturentscheidung und sollte reviewbar sein.
  • Produktionsreife entsteht durch Messbarkeit, Rollback und klare Ownership.