Ingress NGINX
Wichtiger Hinweis: Ingress NGINX Retirement
Laut offiziellem Kubernetes Blog wird das Projekt ingress-nginx eingestellt. Support und Updates enden im März 2026. Natron arbeitet bereits an Migrationspfaden. Wir raten Kunden, mittelfristig den Wechsel auf Alternativen wie Traefik oder Istio zu planen. Unser Support steht Ihnen hierfür zur Verfügung.
Ingress NGINX ist ein bewährter Ingress-Controller für Kubernetes, der externen HTTP(S)-Traffic zu Ihren Services routet. Er übernimmt zentrale Aufgaben wie Load Balancing, SSL-Terminierung und Virtual Hosting.
Features
- Load Balancing: Zuverlässige Verteilung von Traffic auf Backend-Services für hohe Verfügbarkeit.
- SSL/TLS Terminierung: Zentrales Management von Verschlüsselung und Zertifikaten.
- Pfad-basiertes Routing: Unter einer IP können mehrere Dienste über verschiedene Pfade erreichbar gemacht werden.
- Health Checks: Automatisches Erkennen und Isolieren von fehlerhaften Instanzen.
- Flexibilität: Umfangreiche Konfiguration durch Annotations.
Sicherheit & WAF (ModSecurity)
Web Application Firewall aktivieren
Sie können ModSecurity pro Ingress aktivieren, wahlweise im Detection- (nur Protokollierung) oder Enforcement-Modus (Blockierung).
Detection Mode (Snippet):
metadata:
annotations:
nginx.ingress.kubernetes.io/modsecurity-snippet: |
SecRuleEngine DetectionOnly
SecAuditEngine RelevantOnly
SecStatusEngine OffVoraussetzung: annotations-risk-level: "Critical" ist am Controller gesetzt (Natron Standard).
Enforcement Mode:
metadata:
annotations:
nginx.ingress.kubernetes.io/modsecurity-snippet: |
SecRuleEngine OnBösartige Anfragen (z.B. SQL Injection, XSS) werden nun mit 403 Forbidden blockiert.
TLS Konfiguration
Details zur Integration von Let's Encrypt und Zertifikatsmanagement finden Sie in unserer Cert-Manager Dokumentation.
Empfohlene Annotations für eine sichere TLS-Konfiguration:
metadata:
annotations:
# Erzwingt HTTPS-Redirect
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
# Verweis auf den ClusterIssuer
cert-manager.io/cluster-issuer: <issuer-name>
# Best Practices für Zertifikate
cert-manager.io/private-key-rotation-policy: Always
cert-manager.io/private-key-algorithm: ECDSAGängige Use-Cases
TCP Passthrough
Ermöglicht das Durchleiten von Nicht-HTTP-Traffic (z.B. Datenbanken, SSH). Hinweis: Erfordert eine Anpassung der Port-Map in den Helm-Values des Controllers.
Basic Authentication
So schützen Sie einen Endpunkt mittels Basic Auth:
- Secret erstellen:
kubectl create secret generic basic-auth --from-file=auth - Ingress annotieren:
nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: basic-auth nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"
GeoIP2 Einschränkungen
Unsere Plattform verteilt automatisch MaxMind GeoLite2 Datenbanken.
Für Länder-Blocking oder Logging prüfen Sie die verfügbaren maxmind-edition-ids und nutzen Variablen wie $geoip2_country_code in Ihren Log-Formaten.
Proxy auf externe Seiten
Leitet Traffic auf eine externe URL (z.B. example.com) weiter.
apiVersion: v1
kind: Service
metadata: { name: external }
spec:
type: ExternalName
externalName: example.com
ports: [{ port: 443 }]
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"Session Affinity (Sticky Sessions)
Bindet User-Sessions an spezifische Pods (via Cookie).
Wichtig: Nutzen Sie keine Service-Level sessionAffinity: ClientIP zusammen mit Ingress.
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"Erweiterte Konfiguration
Proxy Tuning
- Upload-Limit erhöhen:
nginx.ingress.kubernetes.io/proxy-body-size: 50m - Header-Fehler beheben (502):
nginx.ingress.kubernetes.io/proxy-buffer-size: "8k"
Snippet Annotations
Diese mächtigen Annotations erfordern das Risiko-Level "Critical":
server-snippetconfiguration-snippetmodsecurity-snippet
Verbotene Keywords
Aus Sicherheitsgründen führen folgende Begriffe in Snippets zu Validierungsfehlern:
load_module, lua_package, _by_lua, location, root, proxy_pass, serviceaccount, {, }, ', "