Netzwerkkonzepte für Kubernetes-Container

Abgeschlossen

Kubernetes ist eine portable, erweiterbare Open-Source-Plattform für die Automatisierung von Bereitstellung, Skalierung und Verwaltung von containerisierten Workloads. Als Orchestrierungsplattform ist Kubernetes genauso benutzerfreundlich und flexibel wie Platform-as-a-Service (PaaS)- und Infrastructure-as-a-Service (IaaS)-Angebote.

Wichtig

Sie müssen mit Konzepten wie virtuellen Netzwerken, Lastenausgleichen und Reverseproxys vertraut sein, um Kubernetes-Netzwerke konfigurieren zu können.

Cluster und Knoten

Kubernetes basiert auf Clustern. Statt eines einzigen virtuellen Computers werden mehrere virtuelle Computer, so genannte Nodes, verwendet, die als eine Einheit zusammenarbeiten. Kubernetes verwendet eine Clusterarchitektur, die aus einem primären Knoten und einem oder mehreren Workerknoten besteht. Auf dem primären Knoten werden die Komponenten der Steuerungsebene ausgeführt, z. B. den API-Server, den Planer und den Controller-Manager. Auf dem Workerknoten werden die Datenebenenkomponenten ausgeführt, z. B. kubelet, kube-proxyund Containerlaufzeit.

Diagram showing how Kubernetes uses a cluster architecture that consists of a primary node and one or more worker nodes.

Die Komponente „Kube-Proxy“ ist für lokale Clusternetzwerke zuständig und wird auf jedem Knoten ausgeführt. Die Komponente stellt sicher, dass jeder Knoten über eine eindeutige IP-Adresse verfügt. Dieser Knoten implementiert auch Regeln für das Routing und den Lastenausgleich des Datenverkehrs mithilfe von IP-Tabellen und einem virtuellen IP-Server. Dieser Proxy stellt selbst keine DNS-Dienste bereit. Ein DNS-Cluster-Add-On, das auf CoreDNS basiert, wird empfohlen und standardmäßig installiert.

Pods

Ein Kubernetes-Pod gruppiert Container und Anwendungen in eine logische Struktur. Diese Pods verfügen über keine Intelligenz und bestehen aus mindestens einem Anwendungscontainer. Jeder verfügt über eine IP-Adresse, Netzwerkregeln und verfügbar gemachte Ports.

Diagram showing how a Kubernetes pod groups containers and applications into a logical structure.

Eine Kubernetes-Bereitstellung ist eine Weiterentwicklung von Pods. Eine Bereitstellung umschließt die Pods in einem intelligenten Objekt, wodurch das horizontale Skalieren ermöglicht wird. Sie können Ihre Anwendung problemlos duplizieren und skalieren, um eine höhere Auslastung zu unterstützen, ohne dass Sie komplexe Netzwerkregeln konfigurieren müssen.

Abstraktionsebenenressourcen

Um den Zugriff auf Ihre Anwendungen oder zwischen Anwendungskomponenten zu erlauben, stellt Kubernetes eine Abstraktionsschicht für virtuelle Netzwerke bereit. Kubernetes-Knoten stellen eine Verbindung mit einem virtuellen Netzwerk her, das eingehende und ausgehende Konnektivität für Pods bereitstellt. Die Komponente kube-proxy, die auf jedem Knoten ausgeführt wird, stellt diese Netzwerkfunktionen bereit.

In Kubernetes:

  • Dienste gruppieren Pods logisch, um über eine IP-Adresse oder einen DNS-Namen den direkten Zugriff auf einen bestimmten Port zu erlauben.
  • Mit ServiceTypes können Sie angeben, welche Art von Dienst Sie wünschen.
  • Sie können den Datenverkehr mithilfe eines Lastenausgleichs verteilen.
  • Layer-7-Routing von Anwendungsdatenverkehr kann auch mit Eingangsdatencontrollern erzielt werden.
  • Sie können ausgehenden Datenverkehr für Clusterknoten steuern.
  • Die Sicherheit und das Filtern des Netzwerkdatenverkehrs für Pods kann mit Netzwerkrichtlinien ermöglicht werden.

Netzwerke in Kubernetes

Kubernetes hat spezifische Anforderungen an die Implementierung von Netzwerken für einen Cluster. Ihre Konfigurationsentscheidungen wirken sich darauf aus, wie Sie Ihre Anwendungen im Clusternetzwerk bereitstellen und wie Sie Daten speichern. Kubernetes vereinfacht die Kommunikation, indem erwartet wird, dass Netzwerke so konfiguriert werden, dass Folgendes möglich ist:

  • Pods können knotenübergreifend ohne Netzwerkadressenübersetzung (Network Address Translation, NAT) miteinander kommunizieren.
  • Knoten und Pods können ohne NAT miteinander kommunizieren.
  • Agents auf einem Knoten können mit allen Knoten und Pods kommunizieren.

Die Konfiguration eines Containers und die enthaltenen Daten werden zwischen den Ausführungen nicht beibehalten. Nachdem Sie einen Container gelöscht haben, werden alle Informationen entfernt, es sei denn, die Verwendung eines Volumes wurde konfiguriert. Dies gilt auf für die Netzwerkkonfiguration und alle zugewiesenen IP-Adressen des Containers.

Bei einer Bereitstellung handelt es sich um eine logische Gruppierung von Pods. Sie gilt nicht als physische Workload, und ihr wird keine IP-Adresse zugewiesen. Jedem Pod wird automatisch eine IP-Adresse zugewiesen, die verloren geht, wenn der Pod zerstört wird. Aufgrund dieses Verhaltens sind manuelle Strategien für die Netzwerkkonfiguration komplex.

Kubernetes-Netzwerkoptionen für Windows-Container

Wenn Sie Kubernetes mit Windows-Containern bereitstellen, haben Sie zwei Netzwerkoptionen: Dienste und Eingangscontroller. Um diese Optionen verwenden zu können, ist Windows von CNI-Plug-Ins (Container Network Interface) angewiesen.

Kubernetes verwendet Dienste zum logischen Gruppieren von mehreren Pods und zum Bereitstellen von Netzwerkkonnektivität, um die Netzwerkkonfiguration für Anwendungsworkloads zu vereinfachen. Der Dienst fungiert als Einstiegspunkt für die Gruppe von Pods und stellt eine statische IP-Adresse bereit. Der Datenverkehr kommt beim Dienst für die Gruppe an und wird in einem Roundrobin-Muster an die Pods verteilt. Da sich die IP-Adressen für die Pods im Laufe der Zeit ändern, verfolgt der Dienst die Änderungen, um den korrekten Netzwerkdatenverkehrflow zu den Pods sicherzustellen.

Containerisierte Anwendungen, die auf Kubernetes ausgeführt werden, müssen Daten über das Internet senden und empfangen. Kubernetes unterstützt diese Kommunikation durch Eingangs- und Ausgangskomponenten. Der Eingangscontroller gibt an, welcher Datenverkehr und welche Quellen eine Verbindung mit Ihren Diensten herstellen können. Mit dem Ausgangscontroller können Sie Ihre Apps über ein Internetgateway mit externen Entitäten verbinden.

CNI-Plug-Ins ermöglichen es Kubernetes, verschiedener Netzwerkschnittstellen für Containernetzwerke zu verwenden. Die Plug-Ins verbinden Ihre Pods mit dem Netzwerk und weisen die Pod-IP-Adressen zu. Sie interagieren mit dem Windows Host Networking Service (HNS) und dem Host Compute Service (HCS), um Netzwerkressourcen für Windows-Container zu erstellen und zu verwalten. Einige Beispiele für Plug-Ins sind Calico, Flannel und Azure CNI.

Kubernetes ServiceTypes

Um Ihren gewünschten Dienst zu konfigurieren, können Sie einen der folgenden Kubernetes ServiceTypes angeben:

  • ClusterIP erstellt eine interne IP-Adresse zur Verwendung innerhalb des AKS-Clusters. Dieser Dienst eignet sich ideal für rein interne Anwendungen, die andere Workloads im Cluster unterstützen. Dies ist der Standardwert, der verwendet wird, wenn Sie für einen Dienst keinen expliziten Typ angeben.

Diagram showing how ClusterIP creates an internal IP address for use within the cluster.

  • NodePort erstellt eine Portzuordnung auf dem zugrunde liegenden Knoten, über die mit der Knoten-IP-Adresse und dem Port direkt auf die Anwendung zugegriffen werden kann.

Diagram showing how NodePort creates a port mapping on the underlying node that allows the application to be accessed directly with the node IP address and port.

  • LoadBalancer erstellt eine Lastenausgleichsressource, konfiguriert eine externe IP-Adresse und verbindet die angeforderten Pods mit dem Back-End-Pool des Lastenausgleichs. An den gewünschten Ports werden Regeln für den Lastenausgleich erstellt, damit der Datenverkehr der Kunden die Anwendung erreichen kann.

Diagram showing how LoadBalancer creates a load balancer resource, configures an external IP address, and connects the requested pods to the load balancer backend pool.

Für den HTTP/S-Lastausgleich des eingehenden Datenverkehrs besteht eine weitere Möglichkeit darin, einen Eingangscontroller zu verwenden.

  • ExternalName erstellt einen bestimmten DNS-Eintrag für einen einfacheren Anwendungszugriff.

Kubernetes-Eingang

Die Kubernetes-Eingangskomponente macht Routen für HTTP- und HTTPS-Datenverkehr von außerhalb eines Clusters für Dienste innerhalb des Clusters verfügbar. Sie werden mithilfe von Eingangsregeln definiert. Ein Kubernetes-Cluster lehnt den gesamten eingehenden Datenverkehr ab, wenn diese Routen nicht definiert sind.

Diagram showing how the Kubernetes ingress component exposes routes for HTTP and HTTPS traffic from outside a cluster to services inside the cluster.

Eingangscontroller

Ein Eingangsdatencontroller ist eine Softwarekomponente, die die konfigurierbare Datenverkehrsweiterleitung für Kubernetes-Dienste ermöglicht. Mithilfe von Ressourcen für eingehende Kubernetes-Daten werden Eingangsregeln und Routen für einzelne Kubernetes-Dienste konfiguriert. Durch Verwendung eines Eingangsdatencontrollers und von Eingangsregeln kann eine einzelne IP-Adresse zum Weiterleiten von Datenverkehr an mehrere Dienste in einem Kubernetes-Cluster genutzt werden. Nachdem Sie den Controller in Ihrer Umgebung bereitgestellt haben, können Sie das Eingangsmanifest erstellen und bereitstellen. Kubernetes verwendet Eingangsdatencontroller zum Verwalten der Eingangsdatenkonfiguration in einem Cluster und bietet mehrere Features.

Eingangsregeln

Mithilfe von Eingangsregeln wird festgelegt, woher der Datenverkehr kommt und wohin er in einem Cluster weitergeleitet werden soll. Sie definieren Eingangsregeln in einer Bereitstellungsmanifestdatei für Eingänge. Diese Regeln werden im rules-Schlüssel der Manifestdatei definiert. Jede Regel entspricht einer Reihe von Werten, mit denen die Regel beschrieben wird.

Eingangsanmerkungen

Eine Anmerkung ermöglicht das Anfügen von nicht identifizierenden Metadaten wie beispielsweise Eingangskonfigurationen für Workloads. Sie können sich die Anmerkung als interne Bezeichnung vorstellen, die bestimmte Konfigurationen für Ressourcen definiert. Sie sollten beispielsweise einen bestimmten Eingangsdatencontroller verwenden, der das Umschreiben von Namen oder das Beschränken von Payloads unterstützt.

Netzwerkrichtlinien

Kubernetes stellt das Feature Netzwerkrichtlinien zum Steuern des Datenverkehrsflusses zwischen Pods zur Verfügung. Sie können den Datenverkehr auf der Grundlage Ihrer Einstellungen für zugewiesene Bezeichnungen, den Namespace und den Datenverkehrsport zulassen oder verweigern. Netzwerkrichtlinien bieten einen cloudnativen Ansatz, der sich ideal für die Steuerung des Datenverkehrs über Kubernetes-Pods eignet.