Pod-Netzwerk (CNI) - Amazon EKS

Pod-Netzwerk (CNI)

Amazon EKS unterstützt natives VPC-Netzwerk mit dem Amazon VPC Container-Network-Interface-Plugin (CNI) für Kubernetes. Dieses Plug-In weist jedem Pod eine IP-Adresse von Ihrer VPC zu. Dieses Plug-In ist ein Open-Source-Projekt, das auf GitHub verwaltet wird. Weitere Informationen finden Sie unter amazon-vpc-cni-k8s und Vorschlag: CNI-Plug-In für Kubernetes-Netzwerke über Amazon VPC auf GitHub. Das Amazon VPC CNI-Plugin wird vollständig für die Verwendung auf Amazon EKS und selbstverwalteten Kubernetes-Clustern auf AWS unterstützt.

Anmerkung

Kubernetes kann das Container Networking Interface (CNI) für konfigurierbare Netzwerk-Setups verwenden. Das Amazon-VPC-CNI-Plug-In erfüllt möglicherweise nicht die Anforderungen für alle Anwendungsfälle. Amazon EKS unterhält ein Netzwerk von Partnern, die alternative CNI-Lösungen mit kommerziellen Supportoptionen anbieten. Weitere Informationen finden Sie unter Alternative kompatible CNI-Plugins.

Wenn Sie einen Amazon-EKS-Knoten erstellen, verfügt dieser über eine Netzwerkschnittstelle. Alle Amazon-EC2-Instance-Typen unterstützen mehr als eine Netzwerkschnittstelle. Die beim Erstellen der Instance an die Instance angehängte Netzwerkschnittstelle wird als primäre Netzwerkschnittstelle bezeichnet. Jede zusätzliche Netzwerkschnittstelle, die mit der Instance verbunden ist, wird als sekundäre Netzwerkschnittstelle bezeichnet. Jeder Netzwerkschnittstelle können mehrere private IP-Adressen zugewiesen werden. Eine der privaten IP-Adressen ist die primäre IP-Adresse, während alle anderen der Netzwerkschnittstelle zugewiesenen Adressen sekundäre IP-Adressen sind. Weitere Informationen zu Elastic Network-Schnittstellen finden Sie unter Elastic-Network-Schnittstellen im Amazon-EC2-Benutzerhandbuch für Linux-Instances. Weitere Informationen dazu, wie viele Netzwerkschnittstellen und private IP-Adressen für jede Netzwerkschnittstelle unterstützt werden, finden Sie unter IP-Adressen pro Netzwerkschnittstelle pro Instance-Typ im Amazon-EC2-Benutzerhandbuch für Linux-Instances. Ein Instance-Typ m5.large unterstützt beispielsweise drei Netzwerkschnittstellen und zehn private IP-Adressen für jede Netzwerkschnittstelle.

Das Amazon VPC Container Network-Interface-(CNI)-Plug-In für Kubernetes wird mit jedem Ihrer Amazon-EC2-Knoten in einem Daemonset mit dem Namen aws-node bereitgestellt. Das Plug-in besteht aus zwei primären Komponenten:

  • L-IPAM-Daemon – Verantwortlich für das Erstellen von Netzwerkschnittstellen und das Anhängen der Netzwerkschnittstellen an Amazon-EC2-Instances, das Zuweisen von sekundären IP-Adressen zu den Netzwerkschnittstellen und das Verwalten eines warmen Pools von IP-Adressen auf jedem Knoten für die Zuweisung an Kubernetes-Pods, wenn diese geplant sind. Wenn die Anzahl der Pods, die auf dem Knoten ausgeführt werden, die Anzahl der Adressen überschreitet, die einer einzelnen Netzwerkschnittstelle zugewiesen werden können, beginnt das Plug-In mit der Zuweisung einer neuen Netzwerkschnittstelle, solange nicht bereits die maximale Anzahl von Netzwerkschnittstellen für die Instance angehängt ist . Es gibt Konfigurationsvariablen, mit denen Sie den Standardwert ändern können, wenn das Plug-In neue Netzwerkschnittstellen erstellt. Weitere Informationen finden Sie unter WARM_ENI_TARGET, WARM_IP_TARGET und MINIMUM_IP_TARGET auf GitHub.

    Jedem bereitgestellten Pod wird eine sekundäre private IP-Adresse von einer der mit der Instance verbundenen Netzwerkschnittstellen zugewiesen. Zuvor wurde erwähnt, dass eine m5.large-Instanz drei Netzwerkschnittstellen und zehn private IP-Adressen für jede Netzwerkschnittstelle unterstützt. Obwohl eine m5.large-Instanz 30 private IP-Adressen unterstützt, können Sie auf diesem Knoten keine 30 Pods bereitstellen. Verwenden Sie die folgende Formel, um zu bestimmen, wie viele Pods Sie auf einem Knoten bereitstellen können:

    (Number of network interfaces for the instance type × (the number of IP addressess per network interface - 1)) + 2

    Mit dieser Formel kann ein m5.large-Instance-Typ maximal 29 Pods unterstützen. Eine Liste der maximalen Anzahl von Pods, die von jedem Instance-Typ unterstützt werden, finden Sie unter eni-max-pods.txt auf GitHub. System-Pods zählen zu den maximalen Pods. Das CNI-Plug-in und die kube-proxy-Pods werden beispielsweise auf jedem Knoten in einem Cluster ausgeführt, sodass Sie nur 27 zusätzliche Pods auf einer m5.large-Instance bereitstellen können, nicht 29. Darüber hinaus wird CoreDNS auf einigen der Knoten im Cluster ausgeführt, wodurch die maximale Anzahl von Pods für die Knoten, auf denen es ausgeführt wird, um einen anderen verringert wird.

    Standardmäßig werden allen auf einem Knoten bereitgestellten Pods dieselben Sicherheitsgruppen und privaten IP-Adressen aus einem CIDR-Block zugewiesen, der dem Subnetz zugewiesen ist, mit dem eine der Netzwerkschnittstellen der Instance für die Knoten verbunden ist, auf denen sie ausgeführt wird. Sie können IP-Adressen aus einem anderen CIDR-Block als dem Subnetz zuweisen, mit dem die primäre Netzwerkschnittstelle verbunden ist, indem Sie Benutzerdefinierte CNI-Netzwerke konfigurieren. Sie können auch benutzerdefinierte CNI-Netzwerke verwenden, um allen Pods auf einem Knoten dieselben Sicherheitsgruppen zuzuweisen. Die allen Pods zugewiesenen Sicherheitsgruppen können sich von den Sicherheitsgruppen unterscheiden, die der primären Netzwerkschnittstelle zugewiesen sind. Sie können Pods, die vielen Amazon-EC2-Instance-Typen bereitgestellt werden, mithilfe von Sicherheitsgruppen für Pods eindeutige Sicherheitsgruppen zuweisen. Weitere Informationen finden Sie unter Sicherheitsgruppen für Pods.

  • CNI-Plugin – Verantwortlich für die Verkabelung des Hostnetzwerks (z. B. die Konfiguration der Netzwerkschnittstellen und virtuellen Ethernet-Paare) und das Hinzufügen der richtigen Netzwerkschnittstelle zum Pod-Namespace.

Wichtig

Wenn Sie Version 1.7.0 oder höher des CNI-Plugins verwenden und dem Kubernetes-Servicekonto aws-node, das für die vom Daemonset bereitgestellten aws-node-Pods verwendet wird, eine benutzerdefinierte Pod-Sicherheitsrichtlinie zuweisen, muss die Richtlinie NET_ADMIN im Abschnitt allowedCapabilities zusammen mit hostNetwork: true enthalten und privileged: true im spec der Richtlinie. Weitere Informationen finden Sie unter Pod-Sicherheitsrichtlinie.