Während Kubernetes weiterhin die Welt der Container-Orchestrierung dominiert, wächst der Bedarf für flexiblere und fortschrittlichere Netzwerklösungen innerhalb dieser Umgebung. Hier kommt Multus ins Spiel, ein Open-Source-Container-Network-Interface-(CNI)-Plugin, das die Anbindung mehrerer Netzwerkschnittstellen an Pods innerhalb eines Kubernetes-Clusters ermöglicht.
In diesem Blogbeitrag werden wir in die Welt von Multus eintauchen, dessen Funktionen sowie Vorteile erörtern und erklären, warum es die Netzwerklösung sein könnte, nach der Sie gesucht haben.
Multus CNI dient als "Meta-Plugin", welches zahlreiche andere CNI-Plugins aufrufen kann. Es ermöglicht den Kubernetes-Pods, mehr als eine Netzwerkschnittstelle zu haben, wodurch erweiterte und angepasste Netzwerkfunktionen möglich sind. Es erweitert im Wesentlichen die Netzwerkfähigkeiten von Kubernetes, um mehrere Schnittstellen im Pod zu unterstützen, wodurch es möglich wird, verschiedene Netzwerkkonfigurationen zu implementieren, welche jeweils spezifische Netzwerkdienste zur Verfügung stellen.
Im Wesentlichen arbeitet Multus als Koordinator zwischen Container-Runtimes und Plugins. Während es die Netzwerkkonfiguration nicht selbst vornimmt, kann es andere Plugins dazu veranlassen, dies zu tun. Multus unterstützt eine breite Palette dieser Plugins, von Referenz-Plugins wie Calico, welche die CNI-Spezifikationen implementieren, bis hin zu Drittanbieter-Plugins wie Weave, Flannel, Contiv und Cilium.
Darüber hinaus kann Multus auch Data-Plane-Development-Kit (DPDK)- und Single-Root-Input/Output-Virtualization (SRIOV)-Schnittstellen zu Pods hinzufügen, was die Netzwerkleistung für jene intensive Workloads erheblich verbessern kann.
Der Betrieb von Multus basiert auf dessen Fähigkeit, als Arbiter für andere CNI-Plugins zu dienen. So ruft es Plugins wie Flannel, Calico, vHost CNI oder SR-IOV auf, um Netzwerkschnittstellen zu erstellen.
Diese Funktionalität wird durch die Kubernetes-Komponente Kubelet ermöglicht, welche auf jedem Node im Kubernetes-Cluster läuft. Kubelet verwaltet den Lebenszyklus von Pods, welche auf dem jeweiligen Knoten laufen, und richtet Netzwerkschnittstellen für jeden dieser Pods ein. Dazu verwendet es eine Multus-eigene CNI-Konfigurationsdatei, um das Netzwerk jedes Pods einzurichten. In diesem Szenario ist Kubelet so konfiguriert, dass es das Container Network Interface als Netzwerk-Plugin verwendet. Wenn Kubelet aufgerufen wird, um einen Pod einzurichten, ruft es seine Container-Runtime-Umgebung auf und stellt ihr einen Netzwerk-Plugin-Wrapper zur Verfügung - Multus.
Nehmen wir an, dass Sie Ihren Kubernetes-Cluster bereits mit Calico als Standard-CNI-Plugin eingerichtet haben. Um Multus in diese Einrichtung einzubinden, wird im ersten Schritt eine NetworkAttachmentDefinition für das zusätzliche Netzwerk erstellt. Dies dient als Hinweis für Multus über die Details des neuen Netzwerks und die zugrunde liegende CNI, auf die es zurückgreifen soll.
Wenn Sie beispielsweise ein Flannel-Netzwerk hinzufügen möchten, kann die bestehende Flannel-CNI-Konfiguration (normalerweise im Verzeichnis /etc/cni/net.d/ zu finden) in eine NetworkAttachmentDefinition umgewandelt werden. Wichtig ist dabei, dass das Feld spec.config in der NetworkAttachmentDefinition mit dem Inhalt der Flannel-Konfigurationsdatei übereinstimmt. Sobald dies geschehen ist, können die Pods für die Verwendung dieses zusätzlichen Netzwerks konfiguriert werden.
Hier ein Beispiel, wie Sie eine NetworkAttachmentDefinition für Flannel erstellen können:
cat <<EOF | kubectl create -f -
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: flannel-net
spec:
config: '{
"name": "cbr0",
"type": "flannel",
"delegate": {
"isDefaultGateway": true
}
}'
EOF
Nach Erstellen der NetworkAttachmentDefinition, können Sie einem Pod auftragen, das Flannel-Netzwerk zu nutzen. Fügen Sie dazu den Netzwerknamen
k8s.v1.cni.cncf.io/networks
via einer Pod-Annotation wie hier dargestellt ein:
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
annotations:
k8s.v1.cni.cncf.io/networks: flannel-net
spec:
containers:
- name: sample-container
image: nginx
Mit diesem Setup hat der Pod Schnittstellen sowohl im Calico-Netzwerk (als Standardnetzwerk) als auch im Flannel-Netzwerk (als zusätzliches Netzwerk). Dies zeigt, wie leistungsfähig Multus ist, wenn es darum geht, flexible Lösungen mit mehreren Netzwerken für Kubernetes-Pods bereitzustellen.
Denken Sie daran, dass Sie diese Schritte für jedes zusätzliche Netzwerk, das Sie hinzufügen möchten, wiederholen können, indem Sie einfach eine weitere NetworkAttachmentDefinition für jedes Netzwerk erstellen. Durch die Verwendung von Multus können Ihre Pods gleichzeitig in verschiedenen Netzwerken existieren, was den Horizont für komplexe Netzwerkszenarien sowie Multi-Tenant-Setups vergrößert.
Multus spielt eine wichtige Rolle bei der Vereinfachung von Netzwerkmigrationen und der Ermöglichung mehrerer getrennter Netzwerke innerhalb eines Clusters. Es befähigt verschiedene Anwendungen, welche auf demselben Cluster laufen, unterschiedliche Netzwerklösungen zu nutzen. Wenn Sie also von einer Netzwerklösung zu einer anderen wechseln müssen, können Sie dies für jede einzelne Anwendung tun, anstelle den gesamten Cluster auf einmal migrieren zu müssen. Dieser Ansatz ermöglicht einen geschmeidigeren Übergang mit minimalen Ausfallzeiten.
Was die Unterstützung mehrerer Netzwerke angeht, so ermöglicht die Multus-Fähigkeit, mehrere Netzwerkschnittstellen für jeden Pod zu erstellen, ein hohes Maß an Netzwerksegmentierung innerhalb des Clusters. Dies kann besonders nützlich sein, um den Netzwerkverkehr für bestimmte Anwendungen zu isolieren oder feinkörnige Netzwerkrichtlinien zu implementieren.
Durch die Bereitstellung solch fortschrittlicher Funktionen ist Multus zweifelsohne ein unschätzbares Tool, mit dem Netzwerkmigrationen wesentlich einfacher werden und das die Existenz mehrerer separater Netzwerke innerhalb eines Clusters ermöglicht, wodurch die Netzwerkfähigkeiten von Kubernetes erheblich erweitert werden.
Da Unternehmen für ihre Container-Orchestrierung zunehmend auf Kubernetes setzen, wächst der Bedarf an fortschrittlicheren Netzwerklösungen innerhalb von Kubernetes weiter. Multus bietet eine Open-Source-Lösung, welche die Netzwerkfähigkeiten von Kubernetes erweitert und die Erstellung von Pods mit mehreren Netzwerkschnittstellen ermöglicht.
Dessen Flexibilität, Kompatibilität sowie die Unterstützung mehrerer Netzwerke machen es zu einem wertvollen Werkzeug für Unternehmen, welche ihre Kubernetes-Netzwerke verbessern möchten. Ganz gleich, ob Sie den Netzwerkverkehr trennen, eine direkte Verbindung zu externen Netzwerken herstellen oder einfach nur Ihre Netzwerkanpassungsoptionen erweitern möchten, könnte Multus genau das richtige Tool für Sie sein.
Denken Sie daran, dass es in der Welt der Kubernetes-Netzwerke keine Einheitslösung gibt. Es geht stets darum, die richtigen Tools zu finden, welche Ihre spezifischen Bedürfnisse und Anforderungen erfüllen. Und für viele könnte Multus die perfekte Ergänzung sein.
Sie haben Fragen?
Wenn Sie Fragen haben, die noch nicht beantwortet sind, können Sie sich gerne an uns wenden.
Wir freuen uns auf den Kontakt mit Ihnen!
KubeOps GmbH
Hinter Stöck 17
72406 Bisingen
Germany
+49 7433 93724 90