Auswählen eines Netzwerkmodus - Amazon Elastic Container Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Auswählen eines Netzwerkmodus

Die zuvor genannten Ansätze für die Architektur eingehender und ausgehender Netzwerkverbindungen können für jede Ihrer Arbeitslasten aufAWS, auch wenn sie sich nicht in einem Container befinden. Beim Ausführen von Containern aufAWS, müssen Sie eine andere Ebene der Vernetzung in Betracht ziehen. Einer der Hauptvorteile der Verwendung von Containern ist, dass Sie mehrere Container auf einem einzigen Host packen können. Dabei müssen Sie auswählen, wie Sie die Container vernetzen möchten, die auf demselben Host ausgeführt werden. Im Folgenden finden Sie die Optionen zur Auswahl.

Host-Modus

DiehostNetzwerkmodus ist der grundlegendste Netzwerkmodus, der in Amazon ECS unterstützt wird. Im Hostmodus ist das Netzwerk des Containers direkt an den zugrunde liegenden Host gebunden, auf dem der Container ausgeführt wird.


                    Diagramm, das die Architektur eines Netzwerks mit Containern zeigt, die den Hostnetzwerkmodus verwenden.

Angenommen Sie, Sie einen Container Node.js mit einer Express-Anwendung ausführen, die auf Port lauscht3000Wie in der obigen Abbildung dargestellt. Wenn die Optionhost-Netzwerkmodus verwendet wird, empfängt der Container Datenverkehr auf Port 3000 mit der IP-Adresse der zugrunde liegenden Host-Amazon EC2 Instance. Wir empfehlen nicht, diesen Modus zu verwenden.

Es gibt erhebliche Nachteile bei der Verwendung dieses Netzwerkmodus. Sie können nicht mehr als eine einzelne Instanziierung einer Aufgabe auf jedem Host ausführen. Dies liegt daran, dass nur die erste Aufgabe an den erforderlichen Port auf der Amazon EC2 Instance binden kann. Es gibt auch keine Möglichkeit, einen Containerport neu zuzuordnen, wenn erhostNetzwerkmodus. Wenn eine Anwendung beispielsweise auf eine bestimmte Portnummer hören muss, können Sie die Portnummer nicht direkt neu zuordnen. Stattdessen müssen Sie alle Portkonflikte durch Ändern der Anwendungskonfiguration verwalten.

Es gibt auch Auswirkungen auf die Sicherheit, wenn Sie diehostNetzwerkmodus. In diesem Modus können Container die Identität des Hosts annehmen und Container können sich mit privaten Loopback-Netzwerkdiensten auf dem Host verbinden.

Diehost-Netzwerkmodus wird nur für Amazon ECS-Aufgaben unterstützt, die auf Amazon EC2 Instances gehostet werden. Es wird nicht unterstützt, wenn Amazon ECS auf Fargate verwendet wird.

Bridge-Modus

mitbridgeverwenden Sie eine virtuelle Netzwerkbrücke, um einen Layer zwischen dem Host und dem Netzwerk des Containers zu erstellen. Auf diese Weise können Sie Portzuordnungen erstellen, die einen Hostport einem Containerport neu zuordnen. Die Zuordnungen können entweder statisch oder dynamisch sein.


                    Diagramm, das die Architektur eines Netzwerks mit Bridge-Netzwerkmodus mit statischer Portzuordnung anzeigt.

Mit einer statischen Portzuordnung können Sie explizit definieren, welcher Hostport einem Containerport zugeordnet werden soll. Im obigen Beispiel wird Port80auf dem Host wird dem Port zugeordnet3000auf dem Container. Um mit der containerisierten Anwendung zu kommunizieren, senden Sie Datenverkehr an Port80Die IP-Adresse der Amazon EC2 Instance. Aus der Sicht der containerisierten Anwendung sieht es, dass eingehender Datenverkehr auf Port3000.

Wenn Sie nur den Traffic-Port ändern möchten, sind statische Port-Mappings geeignet. Dies hat jedoch immer noch den gleichen Nachteil wie die Verwendung derhostNetzwerkmodus. Sie können nicht mehr als eine einzelne Instanziierung einer Aufgabe auf jedem Host ausführen. Dies liegt daran, dass bei einer statischen Portzuordnung nur ein einzelner Container Port 80 zugeordnet werden kann.

Verwenden Sie zum Beheben dieses Problems diebridgeWie im folgenden Diagramm dargestellt.


                    Diagramm, das die Architektur eines Netzwerks mit Bridge-Netzwerkmodus mit dynamischer Portzuordnung anzeigt.

Wenn Sie keinen Hostport in der Portzuordnung angeben, können Sie Docker einen zufälligen, nicht verwendeten Port aus dem kurzlebigen Portbereich auswählen und ihn als öffentlichen Hostport für den Container zuweisen. Zum Beispiel die Anwendung Node.js auf Port3000auf dem Container möglicherweise ein Zufallsgenerator mit hoher Zahl wie47760auf dem Amazon EC2 Host. Dies bedeutet, dass Sie mehrere Kopien dieses Containers auf dem Host ausführen können. Darüber hinaus kann jedem Container ein eigener Port auf dem Host zugewiesen werden. Jede Kopie des Containers empfängt Datenverkehr auf Port3000. Clients, die Datenverkehr an diese Container senden, verwenden jedoch die zufällig zugewiesenen Host-Ports.

Amazon ECS hilft Ihnen dabei, die zufällig zugewiesenen Ports für jede Aufgabe zu überblicken. Dies geschieht, indem Load Balancer Zielgruppen automatisch aktualisiert undAWS Cloud Map-Dienstermittlung, um die Liste der Task-IP-Adressen und -Ports zu erhalten. Dies vereinfacht die Verwendung von Diensten, die mitbridge-Modus mit dynamischen Ports.

Ein Nachteil der Verwendung derbridgeNetzwerkmodus ist, dass es schwierig ist, den Dienst für die Service-Kommunikation zu sperren. Da Dienste jedem zufälligen, nicht verwendeten Port zugewiesen werden können, ist es notwendig, breite Portbereiche zwischen Hosts zu öffnen. Es ist jedoch nicht einfach, bestimmte Regeln zu erstellen, damit ein bestimmter Dienst nur mit einem anderen bestimmten Dienst kommunizieren kann. Die Dienste verfügen über keine spezifischen Ports, die für Sicherheitsgruppennetzwerkregeln verwendet werden müssen.

Diebridge-Netzwerkmodus wird nur für Amazon ECS-Aufgaben unterstützt, die auf Amazon EC2 Instances gehostet werden. Es wird nicht unterstützt, wenn Amazon ECS auf Fargate verwendet wird.

AWSVPC-Modus

Mit derawsvpc-Netzwerkmodus erstellt und verwaltet Amazon ECS für jede Aufgabe eine Elastic Network Interface (ENI) und jede Aufgabe erhält eine eigene private IP-Adresse innerhalb der VPC. Diese ENI ist getrennt von den zugrunde liegenden Hosts ENI. Wenn eine Amazon EC2 Instance mehrere Tasks ausführt, ist die ENI jedes Tasks ebenfalls separat.


                    Diagramm, das die Architektur eines Netzwerks mit dem AWSVPC-Netzwerkmodus anzeigt.

Im vorangegangenen Beispiel wird die Amazon EC2 Instance einem ENI zugewiesen. Das ENI stellt die IP-Adresse der EC2-Instance dar, die für die Netzwerkkommunikation auf Host-Ebene verwendet wird. Jede Aufgabe hat auch eine entsprechende ENI und eine private IP-Adresse. Da jedes ENI getrennt ist, kann jeder Container an Port binden80über die Aufgabe ENI. Daher müssen Sie Portnummern nicht im Auge behalten. Stattdessen können Sie Datenverkehr an Port senden80ENI unter der IP-Adresse der Aufgabe.

Der Vorteil der Verwendung desawsvpc-Netzwerkmodus besteht darin, dass jede Aufgabe über eine separate Sicherheitsgruppe verfügt, um Datenverkehr zuzulassen oder zu verweigern. Dies bedeutet, dass Sie eine größere Flexibilität haben, um die Kommunikation zwischen Aufgaben und Diensten auf einer detaillierteren Ebene zu steuern. Sie können eine Aufgabe auch so konfigurieren, dass eingehenden Datenverkehr von einer anderen Aufgabe auf demselben Host verweigert wird.

Dieawsvpc-Netzwerkmodus wird für Amazon ECS-Aufgaben unterstützt, die sowohl auf Amazon EC2 als auch in Fargate gehostet werden. Achten Sie darauf, dass bei der Verwendung von Fargate dieawsvpc-Netzwerkmodus ist erforderlich.

Bei Verwendung vonawsvpc-Netzwerkmodus gibt es ein paar Herausforderungen, auf die Sie achten sollten.

Erhöhte Aufgabendichte mit ENI Trunking

Der größte Nachteil der Verwendung derawsvpcNetwork-Modus mit Tasks, die auf Amazon EC2 Instances gehostet werden, besteht darin, dass EC2-Instances eine Begrenzung für die Anzahl der ENIs haben, die an sie angehängt werden können. Dadurch wird begrenzt, wie viele Aufgaben Sie auf jede Instanz platzieren können. Amazon ECS bietet die ENI-Trunking-Funktion, die die Anzahl der verfügbaren ENIs erhöht, um eine höhere Aufgabendichte zu erreichen.


                        Diagramm, das die Architektur eines Netzwerks im AWSVPC-Netzwerkmodus mit ENI-Trunking anzeigt.

Bei der Verwendung von ENI-Trunking werden standardmäßig zwei ENI-Anhänge verwendet. Die erste ist die primäre ENI der Instanz, die für alle Prozesse auf Host-Ebene verwendet wird. Die zweite ist die Trunk ENI, die Amazon ECS erstellt. Diese Funktion wird nur für bestimmte Amazon EC2 Instance-Typen unterstützt.

Betrachten Sie dieses Beispiel. Ohne ENI-Trunking, einc5.large-Instanz, die über zwei vCPUs verfügt, kann nur zwei Tasks hosten. Mit ENI-Trunking wird jedoch einc5.large-Instanz mit zwei vCPUs kann bis zu zehn Tasks hosten. Jede Aufgabe hat eine andere IP-Adresse und Sicherheitsgruppe. Weitere Hinweise zu verfügbaren Instance-Typen und zu ihrer Dichte finden Sie unterUnterstützte Amazon EC2 Instance-TypenimAmazon Elastic Container Service-Entwicklerhandbuch.

ENI-Trunking hat keine Auswirkungen auf die Laufzeitleistung in Bezug auf Latenz oder Bandbreite. Es erhöht jedoch die Startzeit der Aufgabe. Wenn ENI-Trunking verwendet wird, sollten Sie sicherstellen, dass Ihre Autoskalierungsregeln und andere Arbeitslasten, die von der Startzeit der Aufgabe abhängen, weiterhin wie erwartet funktionieren.

Weitere Informationen finden Sie unterTrunking Elastic Network-SchnittstelleimAmazon Elastic Container Service-Entwicklerhandbuch.

Verhinderung der Erschöpfung der IP-Adresse

Indem Sie jeder Aufgabe eine separate IP-Adresse zuweisen, können Sie Ihre gesamte Infrastruktur vereinfachen und Sicherheitsgruppen verwalten, die ein hohes Maß an Sicherheit bieten. Diese Konfiguration kann jedoch zu IP-Erschöpfung führen.

Die Standard-VPC auf IhrerAWS-Konto verfügt über vorab bereitgestellte Subnetze, die eine/20CIDR-Bereich. Das bedeutet, dass jedes Subnetz 4.091 verfügbare IP-Adressen hat. Beachten Sie, dass mehrere IP-Adressen innerhalb der/20-Bereich sind für AWS spezifische Verwendung reserviert. Betrachten Sie dieses Beispiel. Sie verteilen Ihre Anwendungen über drei Subnetze in drei Availability Zones, um eine hohe Verfügbarkeit zu erzielen. In diesem Fall können Sie etwa 12.000 IP-Adressen in den drei Subnetzen verwenden.

Mit ENI-Trunking benötigt jede Amazon EC2 Instance, die Sie starten, zwei IP-Adressen. Eine IP-Adresse wird für das primäre ENI verwendet, die andere IP-Adresse wird für den Trunk ENI verwendet. Jede Amazon ECS-Aufgabe auf der Instance erfordert eine IP-Adresse. Wenn Sie eine extrem große Arbeitslast starten, können Ihnen die verfügbaren IP-Adressen nicht mehr zur Verfügung stehen. Dies kann zu Fehlern beim Start von Amazon EC2 oder zu Fehlern beim Start von Tasks führen. Diese Fehler treten auf, weil die ENIs keine IP-Adressen innerhalb der VPC hinzufügen können, wenn keine verfügbaren IP-Adressen vorhanden sind.

Bei Verwendung vonawsvpc-Netzwerkmodus sollten Sie Ihre IP-Adressanforderungen auswerten und sicherstellen, dass Ihre Subnetz-CIDR-Bereiche Ihren Anforderungen entsprechen. Wenn Sie bereits begonnen haben, eine VPC mit kleinen Subnetzen zu verwenden und der Adressraum nicht mehr verfügbar ist, können Sie ein sekundäres Subnetz hinzufügen.


                        Diagramm, das die Architektur eines Netzwerks im AWSVPC-Netzwerkmodus mit ENI-Trunking anzeigt.

Mithilfe von ENI-Trunking kann das Amazon VPC CNI so konfiguriert werden, dass ENIs in einem anderen IP-Adressraum als der Host verwendet werden. Auf diese Weise können Sie Ihrem Amazon EC2 Host und Ihren Aufgaben unterschiedliche IP-Adressbereiche zuweisen, die sich nicht überschneiden. Im Beispieldiagramm befindet sich die EC2-Host-IP-Adresse in einem Subnetz, das die172.31.16.0/20IP-Bereich. Aufgaben, die auf dem Host ausgeführt werden, werden jedoch IP-Adressen im100.64.0.0/19-Bereich. Durch die Verwendung von zwei unabhängigen IP-Bereichen müssen Sie sich keine Gedanken über Aufgaben machen, die zu viele IP-Adressen verbrauchen und nicht genügend IP-Adressen für Instanzen hinterlassen.

Verwenden des IPv6-Dual-Stapelmodus

Dieawsvpc-Netzwerkmodus ist mit VPCs kompatibel, die für den IPv6-Dual-Stack-Modus konfiguriert sind. Eine VPC, die den Dual-Stack-Modus verwendet, kann über IPv4, IPv6 oder beide kommunizieren. Jedes Subnetz in der VPC kann sowohl einen IPv4-CIDR-Bereich als auch einen IPv6-CIDR-Bereich haben. Weitere Informationen finden Sie unterIP-Adressierung in Ihrer VPCimAmazon-VPC Benutzerhandbuch.

Sie können die IPv4-Unterstützung für Ihre VPC und Subnetze deaktivieren, um IPv4-Erschöpfungsprobleme zu beheben. Mithilfe der IPv6-Unterstützung können Sie jedoch einige neue Funktionen nutzen, insbesondere das Internet-Gateway nur für ausgehenden Verkehr. Mithilfe eines Internet-Gateways für ausgehenden Verkehr können Sie mithilfe ihrer öffentlich routingfähigen IPv6-Adresse ausgehenden Verbindungen zum Internet initiieren. Das Internet-Gateway erlaubt jedoch keine Verbindungen aus dem Internet. Weitere Informationen finden Sie unterInternet-Gateways nur für ausgehenden DatenverkehrimAmazon-VPC Benutzerhandbuch.