Optimierung der Netzwerk- und Laufzeitsicherheit in Kubernetes durch den Einsatz von eBPF und Cilium: Einführung Cilium

In diesem Teil unserer Blogbeitragsreihe werfen wir einen genaueren Blick auf Cilium. Cilium ist eine Netzwerklösung für Kubernetes, welche den Datapath im Cluster mithilfe von eBPF-Anwendungen konfiguriert. Dadurch können wir in Kubernetes von den Vorteilen, welche eBPF uns bietet, direkt profitieren. Eine Einführung zu eBPF bietet der erste Teil der Beitragsreihe Optimierung der Netzwerk- und Laufzeitsicherheit in Kubernetes durch den Einsatz von eBPF und Cilium.

Inhalt

Teil 2: Einführung Cilium

Die Vorteile von Cilium kurz zusammengefasst:

  • Netzwerkpolicies mit Layer 7 Attributen, Egress FQDN Filterung und TLS Traffic Analyse
  • Host Firewall
  • Observability mit Hubble
  • Multi Cluster Fähigkeiten
  • Optimierung der Performance & Skalierbarkeit
Figure 1: eBPF Datapath mit Cilium Agent

Cilium Cluster Komponenten

Eine Installation von Cilium erstellt folgende Komponenten im Cluster:

Agent

Der Cilium Agent ist ein Kubernetes DaemonSet, welcher die nötigen eBPF Anwendungen in den Kernel injiziert und konfiguriert. Der Agent dient als CNI Plugin und ermöglicht damit eBPF basierende Netzwerktechnik in Kubernetes. Zusätzlich kann Hubble im Agent aktiviert werden, um die Netzwerkkommunikation im Cluster zu überwachen.

Operator

Der Cilium Operator ist eine Anwendung, welche spezifische Aufgaben übernimmt, wie zum Beispiel die Synchronisierung von Shared Services in einer Multi Cluster Umgebung.

CiliumNetworkPolicy

Die CiliumNetworkPolicy bietet einen erweiterten Funktionsumfang gegenüber der NetworkPolicy von Kubernetes. Besonders hervorzuheben ist die Möglichkeit nach Attributen von Layer 7 Protokollen wie HTTP, gRPC oder gar Kafka zu filtern. Ein weiteres Feature ist es Egress nur für bestimmte FQDNs freizugeben. Das ist nützlich um einfach den Zugriff auf öffentliche Endpunkte, in einer ansonsten abgeriegelten Umgebung zu ermöglichen. Es kann auch mit TLS verschlüsselte Kommunikation analysiert werden. So bekomme ich einen besseren Einblick, wenn meine Anwendung zum Beispiel auf Azure PaaS Dienste zugreift.

Cluster Mesh

Cilium bietet mit Cluster Mesh die Möglichkeit mehrere Cluster miteinander zu verbinden und die Vorteile von Cilium in einer Multi Cluster Umgebung zu nutzen. Zum Beispiel können Shared Services erstellt werden. Fällt ein Cluster aus, können immer noch die Pods im verfügbaren Cluster den Service bedienen. Mehr über Cluster Mesh kannst Du hier erfahren.

Host Firewall

Cilium ermöglicht es Netzwerkpolicies für die Kubernetes Nodes zu erstellen. Diese Host Firewall kann über die CiliumClusterwideNetworkPolicy Ressource konfiguriert werden. Zum Beispiel kann eine Host Firewall den Ingress für bestimmte Nodes auf Port 22 für SSH und ICMP für ping beschränken.

Hubble

Hubble ist eine Observability Plattform, welche auf eBPF und Cilium aufbaut. Hubble ermöglicht einen detailreichen Überblick über die Kommunikation im Kubernetes Cluster. Durch Hubble erhält man Informationen, wie zum Beispiel, welche Services miteinander kommunizieren, welche HTTP response status codes einzelne Aufrufe verursachen oder ob Pakete aufgrund von Netzwerkpolicies blockiert werden. Möchte man einen historischen Rückblick ermöglichen, können die Metriken mit Prometheus abgefragt, gespeichert und schließlich mit Grafana visualisiert werden.

Figure 2: Hubble UI Service Karte

Optimierung der Performance & Skalierbarkeit

Die Kubernetes Komponente Kube Proxy verwendet in allen verfügbaren Modi Netfilter/iptables um Netzwerkpakete zu bearbeiten. Im iptables Modus muss jedes Paket, welches den Node erreicht sequentiell alle Regeln durchlaufen, bis eine Regel greift. Die Anzahl der Regeln steigt also mit der Anzahl der Services, was zu einer mangelhaften Skalierbarkeit führt. Cilium löst dieses Problem durch eBPF und den damit verfügbaren Datenstrukturen.

In Kubernetes werden Pods oft neu deployed, was zu einer neuen IP-Adresse führt. Dadurch müssen alle zu dem Pod gehörenden Regeln auf den Nodes aktualisiert werden. Cilium löst dies durch Identity basierendes Security Enforcement. Dabei wird jedem Pod eine Identität in Form eines Labels zugeordnet. Der Cilium Agent fragt die Identität, welche in einem Key Value Store gespeichert wird ab und entscheidet, ob der Zugriff den Richtlinien entspricht. Dadurch werden die Nachteile von IP basiertem Security Enforcement vermieden.

Netzwerkpakete müssen bei iptables auch den Linux Netzwerkstack passieren und werden erst hier gefiltert. Pakete bereits zu filtern, bevor sie den Netzwerkstack erreichen ist deutlich effizienter. Dies kann durch den eBPF Anwendungstyp eXpress Data Path (XDP) , welcher von Cilium unterstützt wird ermöglicht werden.

Optimierung der Netzwerk- und Laufzeitsicherheit

Im nächsten Blogpost steht mit Tetragon eine weitere Technologie im Fokus, welche auf die eBPF Plattform aufbaut, bevor die Reihe mit dem Thema Optimierung der Netzwerk- und Laufzeitsicherheit in Kubernetes durch den Einsatz von eBPF und Cilium endet. Sie möchten mehr über Cilium oder Kubernetes erfahren? Sprechen Sie uns an! Weitere Details zu unserem Kubernetes Consulting Angeboten finden Sie hier.