Cluster-Traffic beobachten
Cilium bietet eine Erweiterung namens Hubble.
Ähnlich wie das gleichnamige Weltraum-Teleskop ist Hubble auf Observability spezialisiert.
Mit der Hubble UI kann der gesamte Datenverkehr im Cluster grafisch visualisiert werden.
Alternativ kann auch die leistungsstarke hubble CLI genutzt werden, um Fehler schneller zu
identifizieren.
Hubble Installation
In NETWAYS Managed Kubernetes Clustern, die Cilium als CNI nutzen, ist die Hubble UI bereits installiert.
Web-UI
Um Zugriff auf die Web-UI zu erhalten, muss man den Datenverkehr zum Hubble UI Service ins Cluster weiterleiten. Dies erfolgt mit folgendem Befehl:
Im Anschluss kann man die Hubble UI im Browser lokal unter 127.0.0.1:8080
aufrufen.

Oben links in der UI befindet sich eine Dropdown-Liste mit allen definierten Namespaces.
Nach Auswahl eines Namespaces wird eine Sitzung gestartet, die den gesamten Datenverkehr innerhalb dieses Namespaces beobachtet. Um einen bestimmten Pod genauer zu untersuchen, kann man diesen entweder direkt anklicken oder einen Filter in der Suchleiste setzen.
CLI
Für die Nutzung der hubble CLI muss man diese entweder lokal installieren oder aus dem Cilium
Container im Cluster selbst arbeiten.
Lokale Installation der hubble CLI
HUBBLE_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/hubble/master/stable.txt)
HUBBLE_ARCH=amd64
if [ "$(uname -m)" = "aarch64" ]; then HUBBLE_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/hubble/releases/download/$HUBBLE_VERSION/hubble-linux-${HUBBLE_ARCH}.tar.gz{,.sha256sum}
sha256sum --check hubble-linux-${HUBBLE_ARCH}.tar.gz.sha256sum
sudo tar xzvfC hubble-linux-${HUBBLE_ARCH}.tar.gz /usr/local/bin
rm hubble-linux-${HUBBLE_ARCH}.tar.gz{,.sha256sum}
Damit die lokale hubble CLI auf die Informationen aus dem Cluster zugreifen kann, muss man Zugriff
auf die API gewähren:
kubectl port-forward -n kube-system svc/hubble-relay 4245:80 &
Forwarding from 0.0.0.0:4245 -> 4245
Forwarding from [::]:4245 -> 4245
Nutzung des Hubble Containers im Cluster
Alternativ zu einer lokalen Installation der hubble CLI kann man auch direkt im Cilium Container im
Cluster arbeiten. Hierzu kann man einen alias einrichten:
alias hubble='kubectl exec -in kube-system ds/cilium -c cilium-agent -- hubble'
hubble status
Healthcheck (via unix:///var/run/cilium/hubble.sock): Ok
Current/Max Flows: 4,095/4,095 (100.00%)
Flows/s: 4.07
Beobachtung von Datenverkehr
Um den gesamten Datenverkehr im Cluster (ähnlich wie tcpdump) zu überwachen, kann man den folgenden
Befehl nutzen:
Dieser zeigt in Echtzeit den gesamten Netzwerkverkehr im Cluster an.
Sep 4 07:28:18.255: 10.100.2.60:48428 (host) -> 10.100.2.77:4240 (health) to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Sep 4 07:28:18.256: 10.100.2.60:48428 (host) <- 10.100.2.77:4240 (health) to-stack FORWARDED (TCP Flags: ACK, PSH)
Hubble kann den Datenverkehr basierend auf verschiedenen Kriterien wie Pod-Labels, Namespaces oder DNS-Anfragen filtern.
Dieser Befehl überwacht z. B. den gesamten Datenverkehr des Pods nginx-5f8f49fff4-m8m9h im Namespace
default, ignoriert jedoch DNS-Anfragen.
Ein weiteres häufiges Szenario ist die Filterung nach Zielport:
Dieser Befehl gibt detaillierte Netzwerkdaten im JSON-Format aus, z.B.:
{
"flow": {
"time": "2023-09-04T08:25:35.610232081Z",
"uuid": "c488a8f9-1301-4490-84f1-7ed96afd36f3",
"verdict": "FORWARDED",
"IP": {
"source": "10.100.3.241",
"destination": "142.250.184.238",
"ipVersion": "IPv4"
},
"l4": {
"TCP": {
"source_port": 33610,
"destination_port": 80,
"flags": {
"SYN": true
}
}
},
"source": {
"namespace": "default",
"pod_name": "nginx-5f8f49fff4-m8m9h"
},
"destination": {
"identity": 2,
"labels": ["reserved:world"]
},
"traffic_direction": "EGRESS"
},
"node_name": "cl-cilium-15-jibbo4pnpgn7-node-1",
"time": "2023-09-04T08:25:35.610232081Z"
}