Service-Typen
ClusterIP (default): VIP im Cluster.
NodePort: + Port 30000–32767 auf jedem Node.
LoadBalancer: + externer LB via cloud-controller.
ExternalName: DNS-CNAME, kein Proxy.
Headless (clusterIP: None): A-Records
pro Endpoint, für StatefulSets + Client-side LB.
spec.externalIPs: seit 1.36 deprecated
(CVE-2020-8554), kube-proxy-Support frühestens ab 1.40 per
Default aus, Entfernung frühestens 1.43. Admission
DenyServiceExternalIPs aktivieren.
apiVersion: v1
kind: Service
metadata: {name: api}
spec:
selector: {app: api}
ports:
- {name: http, port: 80, targetPort: 8080}
internalTrafficPolicy: Cluster # Local: nur Client-Node
trafficDistribution: PreferSameZone
EndpointSlice (seit 1.21)
Löst Endpoints ab (v1-API seit 1.33 deprecated,
wird nicht entfernt). Slices à 100 Endpoints (Default,
--max-endpoints-per-slice bis 1000), skaliert auf
>1000 Pods. Zonen-Routing:
spec.trafficDistribution: PreferSameZone (GA 1.35, auch
PreferSameNode). Die Annotation
service.kubernetes.io/topology-mode ist seit 1.33 deprecated.
Ingress vs. Gateway API
Ingress ist eingefroren, HTTP/L7-only, vendor-Annotations explodieren. Die API bleibt im Core.
Gateway API (eigene CRDs, v1.0 GA seit
31.10.2023, aktuell v1.7.0 vom 29.10.2026) trennt Rollen: Infrastructure
(GatewayClass, Gateway) vs. App-Team
(HTTPRoute, GRPCRoute,
TLSRoute, seit v1.6 auch
TCPRoute/UDPRoute GA). Cross-Namespace via
ReferenceGrant. CRDs gelten clusterweit: eine Version
für alle Controller. Die VAP
safe-upgrades.gateway.networking.k8s.io (seit v1.5) lehnt
CRD-Bundles unter der eigenen Minor-Version ab (v1.7.0: alles vor
v1.7.0), ebenso Experimental- über Standard-CRDs.
HTTPRoute-retry ist seit v1.7 Standard.
ingress-nginx ist retired
kubernetes/ingress-nginx wurde am
24.03.2026 archiviert: keine Releases, keine
Bugfixes, keine CVE-Patches mehr. Bestand
läuft weiter, ein EOL-Controller im L7-Datenpfad ist aber ein
Audit-Fund.
Nicht verwechseln: der NGINX Ingress Controller von F5/NGINX ist ein anderes Projekt und nicht betroffen.
Migration: ingress2gateway (1.0
seit 20.03.2026, aktuell 1.2.0 vom 07.07.2026) übersetzt Ingress samt gängiger
Annotations nach Gateway API.
NetworkPolicy (Default-Deny)
Allowlist-Modell, ohne Policy: alles offen. Pattern:
default-deny pro Namespace, dann Ingress/Egress explizit öffnen.
podSelector: {} = alle Pods,
policyTypes: [Ingress, Egress] ohne egress:-Block
= total dicht, auch für DNS: UDP+TCP 53 zu CoreDNS explizit
freigeben.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata: {name: default-deny, namespace: prod}
spec:
podSelector: {}
policyTypes: [Ingress, Egress]
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata: {name: allow-api, namespace: prod}
spec:
podSelector: {matchLabels: {app: api}}
ingress:
- from:
- namespaceSelector:
matchLabels: {kubernetes.io/metadata.name: ingress}
ports: [{port: 8080}]