Das Networking konfigurieren
Diese Anleitung erklärt, wie Sie die Netzwerkkonfiguration Ihres Hikube-Kubernetes-Clusters mit Kubernetes-NetworkPolicies und den Observability-Werkzeugen Cilium/Hubble verwalten.
Voraussetzungen
- Ein bereitgestellter Hikube-Kubernetes-Cluster (siehe Schnellstart)
- Die über die Konsole heruntergeladene kubeconfig des Clusters (Schaltfläche Kubeconfig, Projektadministratoren vorbehalten), in Ihre Sitzung geladen:
export KUBECONFIG=~/Downloads/kubeconfig-<cluster-name>.yaml
- Grundkenntnisse zum Kubernetes-Networking (Services, Pods, Namespaces)
Schritte
1. Das Hikube-Netzwerk verstehen
Cilium ist das CNI (Container Network Interface) der Hikube-Kubernetes-Cluster. Es stellt Networking, Netzwerksicherheit und Observability bereit. Es ist immer vorhanden; seine Konfiguration wird in der Konsole im Abschnitt Advanced Configuration der Addons überschrieben (siehe Cilium).
Die Hikube-Cluster enthalten:
- Cilium als CNI: Pod-zu-Pod-Netzwerk, Services und Durchsetzung der NetworkPolicies;
- Hubble für Observability: Visualisierung der Netzwerkflüsse, zu aktivieren über das Cilium-Override.
Standardmäßig können alle Pods ohne Einschränkung miteinander kommunizieren. Mit NetworkPolicies schränken Sie diese Kommunikation ein.
Die Erreichbarkeit aus dem Internet läuft über die Node-Gruppen, die in der Konsole als Exposed on the internet (Public IP) markiert sind und den Controller Ingress NGINX hosten.
2. Eine NetworkPolicy erstellen
Definieren Sie Regeln, um den eingehenden (Ingress) und ausgehenden (Egress) Traffic Ihrer Pods zu steuern:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-web
spec:
podSelector:
matchLabels:
app: web
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 80
egress:
- to:
- podSelector:
matchLabels:
app: database
ports:
- protocol: TCP
port: 5432
Diese Policy:
- erlaubt eingehenden Traffic zu den Pods
app: webnur von den Podsapp: frontendauf Port 80; - erlaubt ausgehenden Traffic von den Pods
app: webnur zu den Podsapp: databaseauf Port 5432; - blockiert jeden anderen ein- und ausgehenden Traffic für die Pods
app: web.
3. Anwenden und testen
# NetworkPolicy anwenden
kubectl apply -f network-policy.yaml
# Prüfen, ob die Policy erstellt wurde
kubectl get networkpolicies
# Erlaubte Konnektivität testen
kubectl exec -it deploy/frontend -- curl -s http://web-service:80
# Blockierte Konnektivität testen (muss fehlschlagen)
kubectl exec -it deploy/other-app -- curl -s --connect-timeout 3 http://web-service:80
Beginnen Sie mit großzügigen Policies und schränken Sie sie dann schrittweise ein. Eine zu restriktive Policy kann die Kommunikation zwischen Ihren Services unterbrechen.
Beispiel für eine Standard-Policy zur Isolierung eines Namespace:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
Die Policy default-deny-all blockiert den gesamten Traffic im Namespace, einschließlich des DNS-Zugriffs. Wenn Sie sie anwenden, fügen Sie sofort eine Policy hinzu, die ausgehenden DNS-Traffic (Port 53) erlaubt, sonst funktioniert die Namensauflösung nicht mehr.
4. Hubble für das Netzwerk-Debugging verwenden
Hubble ist standardmäßig nicht aktiviert. Um es zu aktivieren, klappen Sie Cilium im Abschnitt Advanced Configuration des Schritts Addons (bei der Erstellung) oder unter Edit > Extensions & Addons (bei einem bestehenden Cluster) auf und geben Sie das folgende Override in Helm Configuration (YAML) — optional ein:
cilium:
hubble:
enabled: true
Sobald Cilium neu bereitgestellt ist, verwenden Sie die in die Cilium-Pods integrierte Hubble-CLI:
# Cilium-Pods (einer pro Node)
kubectl get pods -A -l k8s-app=cilium
# Namespace von Cilium, von den folgenden Befehlen verwendet
CILIUM_NS=$(kubectl get ds -A -l k8s-app=cilium -o jsonpath='{.items[0].metadata.namespace}')
# Status von Hubble prüfen
kubectl exec -n "$CILIUM_NS" -it ds/cilium -- hubble status
# Netzwerkflüsse in Echtzeit beobachten
kubectl exec -n "$CILIUM_NS" -it ds/cilium -- hubble observe
# Von NetworkPolicies abgelehnte Flüsse anzeigen
kubectl exec -n "$CILIUM_NS" -it ds/cilium -- hubble observe --verdict DROPPED
# Nach Namespace filtern
kubectl exec -n "$CILIUM_NS" -it ds/cilium -- hubble observe --namespace production
Der Befehl hubble observe --verdict DROPPED ist besonders hilfreich, um von einer NetworkPolicy blockierte Flüsse zu erkennen und Ihre Regeln anzupassen.
Überprüfung
# Alle NetworkPolicies auflisten
kubectl get networkpolicies -A
# Details einer Policy
kubectl describe networkpolicy allow-web
# Zustand von Cilium prüfen
CILIUM_NS=$(kubectl get ds -A -l k8s-app=cilium -o jsonpath='{.items[0].metadata.namespace}')
kubectl exec -n "$CILIUM_NS" -it ds/cilium -- cilium status
Erwartetes Ergebnis für kubectl get networkpolicies:
NAME POD-SELECTOR AGE
allow-web app=web 5m
Weiterführende Informationen
- Konzepte: Netzwerkarchitektur und erreichbare Node-Gruppen
- Einen Ingress mit TLS bereitstellen: HTTPS-Bereitstellung Ihrer Anwendungen