Zum Hauptinhalt springen

Blogs

Multus erforschen: Eine erweiterte Netzwerklösung für Kubernetes

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 verstehen

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.

Worker Node

Wie Multus operiert

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.

Praktische Integration: Das Flannel-Netzwerk an einen Calico-basierten Pod anhängen

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-Funktionen

  • Multi-Netzwerk-Support

    Multus gestattet es den Pods, mehr als eine Netzwerkschnittstelle zu haben. Jede Schnittstelle kann mit einem anderen Netzwerk verbunden werden, während jedes Netzwerk wiederum durch ein anderes CNI-Plugin gesteuert werden kann. Dies hat zur Folge, dass verschiedene Netzwerke je nach dem verwendeten CNI-Plugin unterschiedliche Funktionen besitzen können.
  • Kompatibilität

    Multus ist mit allen CNI-Plugins kompatibel, welche den CNI-Spezifikationen folgen. Dies ermöglicht eine umfassende Anpassung und Kontrolle über die Netzwerkkonfigurationen, da Sie verschiedene Plugins auswählen können, um bestimmte Netzwerkfunktionen zu bieten.
  • Flexibilität

    Da Multus jedem Pod die Möglichkeit gibt, sich mit mehreren Netzen zu verbinden, bietet diese Lösung erhebliche Flexibilität. Dies kann besonders dann von Vorteil sein, wenn Sie den Netzwerkverkehr trennen oder eine direkte Verbindung zu externen Netzwerken oder der Hardware bereitstellen müssen.

Vorteile von Multus

  • Verbesserte Netzwerk-Customization

    Multus ermöglicht ein hohes Maß an kundenspezifischer Anpassung des Netzwerks. Da jeder Pod mit mehreren Netzwerken verbunden werden kann, ist es möglich, ausgefeilte Netzwerkarchitekturen zu entwerfen, welche bestimmte Anforderungen erfüllen, wie z. B. die Abtrennung von sensiblem Datenverkehr, die direkte Verbindung mit externen Netzwerken oder die direkte Verwendung von Hardware-Geräten.
  • Weitgefächerte Kompatibilität

    Die Kompatibilität von Multus mit allen CNI-Plugins, welche den CNI-Spezifikationen folgen, bedeutet, dass Sie Multus mit einer Vielzahl von bestehenden Netzwerklösungen verwenden können. Diese breite Kompatibilität ermöglicht es Ihnen, die Fähigkeiten und Funktionen mehrerer Netzwerklösungen in Ihrer Kubernetes-Umgebung zu integrieren.
  • Erweiterte Networking-Einsätze

    Multus ist besonders vorteilhaft bei erweiterten Netzwerkanwendungen. In Anwendungsfällen der Netzwerkfunktionsvirtualisierung (NFV) beispielsweise können die Netzwerkfunktionen je nach Bedarf mit mehreren Netzwerken verbunden werden, wodurch die unterschiedlichen Netzwerkanforderungen dieser Anwendungen erfüllt werden.

Wie Multus Netzwerkmigrationen vereinfacht und mehrere Netzwerke im Cluster ermöglicht.

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.

Zusammengefasst

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.