Veröffentlicht am

Istio Ambient Mesh: Service Mesh ohne Sidecars

Teilen:
Authors

TL;DR

  • Istio Ambient Mesh entfernt Sidecar-Proxies und ersetzt sie durch einen Node-Level ztunnel (L4) und optionale Waypoint Proxies (L7)
  • Ressourceneinsparung von ca. 40-50% gegenueber dem Sidecar-Modell, da kein Envoy-Proxy pro Pod noetig ist
  • ztunnel laeuft als DaemonSet auf jedem Node und uebernimmt mTLS, L4-Autorisierung und Telemetrie transparent
  • Waypoint Proxies werden nur bei Bedarf pro Namespace oder Service deployed, wenn L7-Features wie Traffic-Management oder HTTP-Autorisierung benoetigt werden
  • Migration vom Sidecar-Modus ist schrittweise pro Namespace moeglich, ohne Downtime

Istio Ambient Mesh: Service Mesh ohne Sidecars

Das Sidecar-Modell war seit Jahren der Standard fuer Service Meshes: Jeder Pod bekommt einen Envoy-Proxy injiziert, der den gesamten Netzwerk-Traffic abfaengt. Das funktioniert, bringt aber erheblichen Overhead mit sich - mehr Memory, mehr CPU, komplexeres Debugging und aufwaendige Sidecar-Injection.

Istio Ambient Mesh loest dieses Problem grundlegend. Statt eines Sidecars pro Pod gibt es zwei neue Komponenten: den ztunnel fuer L4-Traffic und optionale Waypoint Proxies fuer L7-Features. Das Ergebnis ist ein schlankeres, einfacheres Service Mesh.

Ambient Mesh Architektur

┌─────────────────────────────────────────────────────┐
Kubernetes Node│                                                     │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐          │
│  │  Pod A   │  │  Pod B   │  │  Pod C   │          │
 (kein    │   (kein    │   (kein    │          │
│  │ Sidecar) │  │ Sidecar) │  │ Sidecar) │          │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘          │
│       │              │              │                │
│  ┌────┴──────────────┴──────────────┴────┐          │
│  │           ztunnel (DaemonSet)          │          │
│  │    L4: mTLS, TCP Auth, Telemetrie     │          │
│  └───────────────────┬───────────────────┘          │
└──────────────────────┼──────────────────────────────┘
          ┌────────────┴────────────┐
Waypoint Proxy             (optional, per NS)L7: HTTP Routing,Retries, Auth Policy          └─────────────────────────┘

Sidecar-Modell vs. Ambient Mesh

Sidecar-Modell:                    Ambient Mesh:
┌──────────────────┐               ┌──────────────────┐
Pod              │               │ Pod│ ┌──────┐┌──────┐│               │ ┌──────┐         │
│ │ App  ││Envoy ││               │ │ App  │         │
│ │      ││Proxy ││               │ │      │         │
│ │      ││60MB+ ││               │ └──────┘         │
│ └──────┘└──────┘│               └──────────────────┘
└──────────────────┘                      │
                                   ztunnel (shared)
Envoy pro Pod = hoher Overhead     Kein Sidecar = schlank

Teil 1: Istio Ambient Mesh installieren

Voraussetzungen

# Kubernetes 1.28+ empfohlen
kubectl version --short

# istioctl installieren (ab Version 1.22+)
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.24.0 sh -
export PATH=$PWD/istio-1.24.0/bin:$PATH

# Installation pruefen
istioctl version

Ambient-Profil installieren

# Istio mit Ambient-Profil installieren
istioctl install --set profile=ambient --skip-confirmation

# Komponenten pruefen
kubectl get pods -n istio-system

Erwartete Ausgabe:

NAME                                    READY   STATUS    RESTARTS   AGE
istio-cni-node-7f8km                    1/1     Running   0          60s
istio-cni-node-9x2lp                    1/1     Running   0          60s
istiod-6b4f5d8c7-t9k2m                  1/1     Running   0          75s
ztunnel-4rk9w                           1/1     Running   0          60s
ztunnel-8m3xj                           1/1     Running   0          60s

Die wichtigsten Komponenten:

  • istiod: Control Plane (wie beim Sidecar-Modus)
  • ztunnel: DaemonSet auf jedem Node fuer L4-Processing
  • istio-cni: CNI Plugin fuer transparente Traffic-Umleitung

Ambient Mesh per Namespace aktivieren

# Namespace fuer Ambient Mesh labeln
kubectl label namespace production istio.io/dataplane-mode=ambient

# Bestehende Pods muessen NICHT neu gestartet werden
# ztunnel uebernimmt den Traffic sofort transparent

Das ist ein grosser Vorteil gegenueber dem Sidecar-Modell: Keine Pod-Restarts noetig. Der ztunnel faengt den Traffic auf Node-Ebene ab.

Funktionalitaet testen

# Testanwendung deployen
kubectl apply -f istio-1.24.0/samples/bookinfo/platform/kube/bookinfo.yaml \
  -n production

# mTLS pruefen
istioctl ztunnel-config workloads

# Traffic zwischen Services pruefen
kubectl exec -n production deploy/ratings-v1 -- \
  curl -s productpage:9080/productpage | head -5

Teil 2: ztunnel im Detail

Der ztunnel (Zero Trust Tunnel) ist das Herzsueck von Ambient Mesh. Er laeuft als DaemonSet auf jedem Node und uebernimmt:

L4-Funktionen des ztunnel

  • mTLS: Automatische Verschluesselung aller Pod-zu-Pod-Kommunikation
  • L4 Authorization: TCP-basierte Zugriffskontrolle (Source/Destination)
  • Telemetrie: TCP-Metriken (Bytes, Connections, Errors)
  • HBONE Tunneling: HTTP-basiertes Tunneling-Protokoll fuer die Mesh-Kommunikation

ztunnel Ressourcenverbrauch

# ztunnel Resource Usage pruefen
kubectl top pods -n istio-system -l app=ztunnel

Typische Werte:

NAME            CPU(cores)   MEMORY(bytes)
ztunnel-4rk9w   15m          40Mi
ztunnel-8m3xj   12m          38Mi

Vergleich mit Sidecar-Modell (pro Pod):

Sidecar Envoy:  50-100m CPU, 60-150Mi Memory (pro Pod!)
ztunnel:        10-20m CPU,  30-50Mi Memory  (pro Node, shared)

Bei 20 Pods pro Node:
  Sidecar: 20 x 60Mi  = 1200Mi Memory-Overhead
  Ambient: 1  x 40Mi  =   40Mi Memory-Overhead
  Ersparnis: ~97% weniger Memory-Overhead fuer L4

L4 Authorization Policy

apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: production
spec:
  selector:
    matchLabels:
      app: backend
  action: ALLOW
  rules:
    - from:
        - source:
            principals:
              - cluster.local/ns/production/sa/frontend
      to:
        - operation:
            ports:
              - "8080"

Diese Policy wird direkt vom ztunnel durchgesetzt - ohne Waypoint Proxy, ohne L7-Overhead.


Teil 3: Waypoint Proxy fuer L7-Features

Wenn Sie L7-Funktionen benoetigen (HTTP-Routing, Retries, Header-basierte Autorisierung), deployen Sie einen Waypoint Proxy.

Waypoint Proxy erstellen

# Waypoint fuer einen Namespace erstellen
istioctl waypoint apply --namespace production --enroll-namespace

# Status pruefen
kubectl get gateways -n production

Erwartete Ausgabe:

NAME        CLASS            ADDRESS        PROGRAMMED   AGE
waypoint    istio-waypoint   10.96.45.123   True         30s

Waypoint per YAML

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: waypoint
  namespace: production
  labels:
    istio.io/waypoint-for: service
spec:
  gatewayClassName: istio-waypoint
  listeners:
    - name: mesh
      port: 15008
      protocol: HBONE

L7 Traffic Management mit Waypoint

Sobald ein Waypoint aktiv ist, koennen Sie L7-Features nutzen:

apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: reviews-routing
  namespace: production
spec:
  hosts:
    - reviews
  http:
    - match:
        - headers:
            end-user:
              exact: beta-tester
      route:
        - destination:
            host: reviews
            subset: v2
          weight: 100
    - route:
        - destination:
            host: reviews
            subset: v1
          weight: 90
        - destination:
            host: reviews
            subset: v2
          weight: 10

L7 Authorization Policy

apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: allow-get-only
  namespace: production
spec:
  targetRefs:
    - kind: Service
      group: ""
      name: productpage
  action: ALLOW
  rules:
    - from:
        - source:
            principals:
              - cluster.local/ns/production/sa/frontend
      to:
        - operation:
            methods:
              - GET
            paths:
              - /api/products/*

Waypoint nur fuer bestimmte Services

Sie muessen nicht fuer den ganzen Namespace einen Waypoint deployen. Erstellen Sie einen Waypoint nur fuer einen Service:

# Waypoint fuer einzelnen Service
istioctl waypoint apply --namespace production \
  --name reviews-waypoint \
  --for service

# Service mit Waypoint verknuepfen
kubectl label service reviews \
  istio.io/use-waypoint=reviews-waypoint \
  -n production

Teil 4: Migration von Sidecar zu Ambient

Die Migration kann schrittweise pro Namespace erfolgen, ohne Downtime.

Migrationsschritte

# Schritt 1: Ambient Mesh im Namespace aktivieren
kubectl label namespace staging istio.io/dataplane-mode=ambient

# Schritt 2: Sidecar-Injection deaktivieren
kubectl label namespace staging istio-injection-

# Schritt 3: Pods neu starten (entfernt Sidecars)
kubectl rollout restart deployment -n staging

# Schritt 4: Pruefen dass alle Pods ohne Sidecar laufen
kubectl get pods -n staging -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{range .spec.containers[*]}{.name}{","}{end}{"\n"}{end}'

Vor der Migration sollte jeder Pod nur seinen Application-Container haben, keinen istio-proxy Sidecar mehr.

Checkliste vor der Migration

# 1. Welche Policies existieren im Namespace?
kubectl get authorizationpolicies -n staging

# 2. Gibt es VirtualServices oder DestinationRules?
kubectl get virtualservices,destinationrules -n staging

# 3. L7-Policies erfordern Waypoint Proxy
# Pruefen ob L7-Features genutzt werden:
kubectl get authorizationpolicies -n staging -o yaml | \
  grep -c "methods\|paths\|headers"

# 4. Bei L7-Nutzung: Waypoint Proxy zuerst deployen
istioctl waypoint apply --namespace staging --enroll-namespace

Rollback-Strategie

# Zurueck zum Sidecar-Modell falls noetig:
# 1. Ambient Label entfernen
kubectl label namespace staging istio.io/dataplane-mode-

# 2. Sidecar Injection wieder aktivieren
kubectl label namespace staging istio-injection=enabled

# 3. Pods neu starten
kubectl rollout restart deployment -n staging

Teil 5: Performance-Vergleich

Latenz-Benchmarks

SzenarioKein MeshSidecarAmbient (L4)Ambient (L4+L7)
P50 Latenz1.2ms2.5ms1.4ms2.2ms
P99 Latenz8ms15ms9ms13ms
Connections/s150008500135009800

Ressourcenverbrauch (50 Pods, 3 Nodes)

RessourceSidecar-ModellAmbient MeshErsparnis
Memory (Mesh)3000Mi (50x60Mi)150Mi (3x50Mi)95%
CPU (Mesh)5000m (50x100m)60m (3x20m)99%
Mit Waypoint-350Mi (+200Mi)88%
Startup-Zeit+2-5s (Injection)0s100%

Die groesste Ersparnis ergibt sich, wenn nur L4-Features benoetigt werden. Mit Waypoint Proxy fuer L7 sinkt die Ersparnis, bleibt aber deutlich besser als das Sidecar-Modell.


Teil 6: Wann Ambient, wann Sidecar?

Ambient Mesh ist ideal wenn:

  • Sie primaer mTLS und L4-Autorisierung brauchen
  • Ressourceneffizienz wichtig ist (viele kleine Pods)
  • Sie Sidecar-Injection-Probleme vermeiden wollen (Init-Container-Konflikte, Job-Pods)
  • Schnelle Adoption gewuenscht ist (kein Pod-Restart noetig)
  • Workloads existieren, die schlecht mit Sidecars funktionieren (z.B. StatefulSets, Batch Jobs)

Sidecar-Modell bleibt besser wenn:

  • Sie per-Pod L7-Processing mit minimaler Latenz brauchen
  • Workload-spezifische Envoy-Konfiguration erforderlich ist
  • Ihr Team das Sidecar-Modell bereits gut beherrscht und produktiv nutzt
  • Sie spezielle Envoy-Filter oder WASM-Plugins pro Pod einsetzen

Aktuelle Einschraenkungen von Ambient Mesh

Ambient Mesh ist seit Istio 1.22 als GA (Generally Available) freigegeben. Dennoch gibt es Punkte zu beachten:

  • CNI-Abhaengigkeit: Istio CNI muss installiert sein (kein reines istio-init)
  • Waypoint-Skalierung: Waypoint Proxies muessen manuell skaliert werden bei hohem Traffic
  • Debugging: Neue Tooling-Befehle (istioctl ztunnel-config) erfordern Einarbeitung
  • Drittanbieter-Integrationen: Manche Service-Mesh-Tools erwarten Sidecar-Proxies

Teil 7: Observability mit Ambient Mesh

Metriken ohne Sidecar

Der ztunnel exportiert L4-Metriken automatisch:

# ztunnel Metriken pruefen
kubectl exec -n istio-system ds/ztunnel -- \
  curl -s localhost:15020/metrics | grep istio_tcp

Verfuegbare Metriken:

# TCP-Verbindungen
istio_tcp_connections_opened_total
istio_tcp_connections_closed_total

# Bytes uebertragen
istio_tcp_sent_bytes_total
istio_tcp_received_bytes_total

Fuer L7-Metriken (HTTP-Statuscodes, Request-Dauer) ist ein Waypoint Proxy erforderlich:

# L7-Metriken (nur mit Waypoint)
istio_requests_total
istio_request_duration_milliseconds

Kiali mit Ambient Mesh

# Kiali installieren (ab Version 1.78+ fuer Ambient-Support)
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/addons/kiali.yaml

# Kiali Dashboard oeffnen
istioctl dashboard kiali

Kiali zeigt in der Ambient-Ansicht:

  • Welche Namespaces im Ambient-Modus sind
  • Wo Waypoint Proxies deployed sind
  • L4-Traffic-Graphen (auch ohne Waypoint)
  • L7-Details (nur mit Waypoint)

Zusammenfassung

AspektSidecar-ModellAmbient Mesh
Proxy-DeploymentPro Pod (Envoy Sidecar)Pro Node (ztunnel) + optional Waypoint
Memory-Overhead60-150Mi pro Pod30-50Mi pro Node (shared)
mTLSJaJa (via ztunnel)
L4 AuthJaJa (via ztunnel)
L7 FeaturesImmer verfuegbarNur mit Waypoint Proxy
Pod-Restart noetigJa (Injection)Nein
Upgrade-ImpactAlle Pods betroffenNur ztunnel/Waypoint

Istio Ambient Mesh ist ein bedeutender Schritt fuer Service Meshes in Kubernetes. Es macht die wichtigsten Mesh-Funktionen - mTLS und L4-Security - praktisch kostenlos verfuegbar und fuegt L7-Features nur dort hinzu, wo sie wirklich gebraucht werden.


Verwandte Artikel


Sie ueberlegen, ob Istio Ambient Mesh fuer Ihre Kubernetes-Umgebung geeignet ist? Wir beraten Sie bei der Evaluierung, fuehren Proof-of-Concepts durch und unterstuetzen bei der Migration vom Sidecar-Modell. Jetzt Beratung anfragen.

Kubernetes-Beratung gesucht?

Wir helfen deutschen Unternehmen bei der Kubernetes-Implementierung, Migration und Optimierung. DSGVO-konform und praxiserprobt.

📖 Verwandte Artikel

Weitere interessante Beiträge zu ähnlichen Themen