Abläufe des Netzwerk-Datenverkehrs für Hybridknoten - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

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.

Um zu diesem Benutzerhandbuch beizutragen, wählen Sie den GitHub Link Diese Seite bearbeiten auf, der sich im rechten Bereich jeder Seite befindet.

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.

Abläufe des Netzwerk-Datenverkehrs für Hybridknoten

Auf dieser Seite werden die Netzwerkverkehrsflüsse für EKS-Hybridknoten mit Diagrammen beschrieben, die die end-to-end Netzwerkpfade für die verschiedenen Verkehrstypen zeigen.

Die folgenden Datenverkehr-Abläufe werden abgedeckt:

Hybridknoten kubelet zur EKS-Steuerebene

Hybridknoten-Cubelet zur EKS-Steuerebene

Anforderung

1kubelet. Initiiert Anforderung

Wenn kubelet auf einem Hybridknoten mit der EKS-Steuerebene kommunizieren muss (z. B. um den Knotenstatus zu melden oder Pod-Spezifikationen abzurufen), verwendet es die während der Knotenregistrierung bereitgestellte kubeconfig-Datei. Dieses kubeconfig hat die URL des API-Server-Endpunkts (den Route53-DNS-Namen) und keine direkten IP-Adressen.

Das kubelet führt eine DNS-Suche für den Endpunkt durch (z. B. https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.gr7.us-west-2.eks.amazonaws.com). In einem Cluster mit öffentlichem Zugriff wird daraus eine öffentliche IP-Adresse (z. B. 54.239.118.52) abgeleitet, die zum in AWS ausgeführten EKS-Service gehört. kubelet erstellt dann eine sichere HTTPS-Anfrage an diesen Endpunkt. Das ursprüngliche Paket sieht folgendermaßen aus:

+--------------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.80.0.2 | Src: 52390 (random) | | | Dst: 54.239.118.52 | Dst: 443 | | +--------------------+---------------------+-----------------+

2. Lokales Router-Routing

Da es sich bei der Ziel-IP um eine öffentliche IP-Adresse handelt und sie nicht Teil des lokalen Netzwerks ist, sendet kubelet dieses Paket an sein Standard-Gateway (den On-Premises-Router vor Ort). Der Router prüft die Ziel-IP und stellt fest, dass es sich um eine öffentliche IP-Adresse handelt.

Bei öffentlichem Datenverkehr leitet der Router das Paket normalerweise an ein Internet-Gateway oder einen Border-Router weiter, der den ausgehenden Datenverkehr ins Internet abwickelt. Dies ist im Diagramm nicht dargestellt und hängt von der Konfiguration Ihres On-Premises-Netzwerks ab. Das Paket durchläuft Ihre On-Premises-Netzwerkinfrastruktur und erreicht schließlich das Netzwerk Ihres Internet-Serviceanbieters.

3. Übermittlung an die EKS-Steuerebene

Das Paket wird über das öffentliche Internet und die Transitnetzwerke übertragen, bis es AWS das Netzwerk erreicht. AWS Das Netzwerk leitet das Paket an den EKS-Dienstendpunkt in der entsprechenden Region weiter. Wenn das Paket den EKS-Service erreicht, wird es an die eigentliche EKS-Steuerebene für Ihren Cluster weitergeleitet.

Dieses Routing über das öffentliche Internet unterscheidet sich vom privaten VPC-weitergeleiteten Pfad, den wir in anderen Datenverkehrsabläufen sehen werden. Der Hauptunterschied besteht darin, dass im öffentlichen Zugriffsmodus der Datenverkehr von On-Premises-kubelet (jedoch nicht von Pods) zur EKS-Steuerebene nicht über Ihre VPC läuft, sondern stattdessen die globale Internetinfrastruktur verwendet.

Antwort

Nachdem die EKS-Steuerebene die kubelet-Anfrage verarbeitet hat, sendet sie eine Antwort zurück:

3. EKS-Steuerebene sendet Antwort

Die EKS-Steuerebene erstellt ein Antwortpaket. Dieses Paket hat die öffentliche IP als Quelle und die IP des Hybridknotens als Ziel:

+--------------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 54.239.118.52 | Src: 443 | | | Dst: 10.80.0.2 | Dst: 52390 | | +--------------------+---------------------+-----------------+

2. Internet-Routing

Das Antwortpaket wird über das Internet zurückgesendet und folgt dabei dem von den Internet-Serviceanbietern festgelegten Routing-Pfad, bis es Ihren On-Premises-Netzwerk-Edge-Router erreicht.

1. Lokale Übermittlung

Ihr On-Premises-Router empfängt das Paket und erkennt die Ziel-IP (10.80.0.2) als zu Ihrem lokalen Netzwerk gehörig. Er leitet das Paket über Ihre lokale Netzwerkinfrastruktur weiter, bis es den Ziel-Hybridknoten erreicht, wo es von kubelet empfangen und verarbeitet wird.

Hybridknoten kube-proxy zur EKS-Steuerebene

Wenn Sie den öffentlichen Endpunktzugriff für den Cluster aktivieren, wird für den Rück-Datenverkehr das öffentliche Internet verwendet. Dieser Datenverkehr stammt vom kube-proxy auf dem Hybridknoten zur EKS-Steuerebene und folgt dem gleichen Pfad wie der Datenverkehr vom kubelet zur EKS-Steuerebene.

EKS-Steuerebene zum Hybridknoten (kubelet-Server)

EKS-Steuerebene zum Hybridknoten

Anforderung

1. EKS-Kubernetes-API-Server initiiert Anfrage

Der EKS-Kubernetes-API-Server ruft die IP-Adresse (10.80.0.2) des Knotens aus dem Status des Knotenobjekts ab. Anschließend leitet er diese Anfrage über seine ENI in der VPC weiter, da die Ziel-IP zum konfigurierten CIDR (10.80.0.0/16) des Knotens aus der Ferne gehört. Das ursprüngliche Paket sieht folgendermaßen aus:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.0.0.132 | Src: 67493 (random) | | | Dst: 10.80.0.2 | Dst: 10250 | | +-----------------+---------------------+-----------------+

2. VPC-Netzwerkverarbeitung

Das Paket verlässt die ENI und gelangt in die VPC- Netzwerkebene, wo es zur weiteren Weiterleitung an das Gateway des Subnetzes weitergeleitet wird.

3. Abfrage der VPC-Routing-Tabelle

Die VPC-Routing-Tabelle für das Subnetz, das die EKS-Steuerebene ENI enthält, verfügt über eine bestimmte Route (die zweite im Diagramm) für den CIDR des Knotens aus der Ferne. Basierend auf dieser Routing-Regel wird das Paket an das VPC-to-onprem Gateway weitergeleitet.

4. Grenzüberschreitender Transit

Das Gateway überträgt das Paket über die Cloud-Grenze hinweg über Ihre vorhandene Verbindung (z. B. Direct Connect oder VPN) an Ihr On-Premises-Netzwerk.

5. On-Premises-Netzwerkempfang

Das Paket wird an Ihren On-Premises-Router vor Ort weitergeleitet, der den Datenverkehr für das Subnetz verwaltet, in dem sich Ihre Hybridknoten befinden.

6. Endgültige Übermittlung

Der lokale Router erkennt, dass die Ziel IP (10.80.0.2)-Adresse zu seinem direkt verbundenen Netzwerk gehört, und leitet das Paket direkt an den Ziel-Hybridknoten weiter, wo kubelet die Anfrage empfängt und verarbeitet.

Antwort

Nachdem das kubelet des Hybridknotens die Anfrage verarbeitet hat, sendet er eine Antwort auf dem gleichen Weg in umgekehrter Richtung zurück:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.80.0.2 | Src: 10250 | | | Dst: 10.0.0.132 | Dst: 67493 | | +-----------------+---------------------+-----------------+

6. kubelet Sendet Antwort

Das kubelet auf dem Hybridknoten (10.80.0.2) erstellt ein Antwortpaket mit der ursprünglichen Quell-IP als Ziel. Das Ziel gehört nicht zum lokalen Netzwerk, daher wird es an das Standard-Gateway des Hosts gesendet, das der lokale Router ist.

5. Lokales Router-Routing

Der Router stellt fest, dass die Ziel-IP (10.0.0.132) zu 10.0.0.0/16 gehört, das über eine Route verfügt, die auf das Gateway zeigt, das mit AWS verbunden ist.

4. Grenzüberschreitende Rückgabe

Das Paket wird über dieselbe On-Premises-VPC-Verbindung (z. B. Direct Connect oder VPN) zurückgesendet und durchquert die Cloud-Grenze in umgekehrter Richtung.

3. VPC-Routing

Wenn das Paket in der VPC ankommt, erkennen die Routing-Tabellen, dass die Ziel-IP zu einer VPC-CIDR gehört. Das Paket wird innerhalb der VPC weitergeleitet.

2. VPC-Netzwerkzustellung

Die VPC-Netzwerkschicht leitet das Paket an das Subnetz mit der EKS-Steuerebene ENI (10.0.0.132) weiter.

1. ENI-Empfang

Das Paket erreicht die EKS-Steuerebene ENI, die an den Kubernetes-API-Server angefügt ist, und schließt damit den Rundlauf ab.

Pods, die in Hybridknoten zur EKS-Steuerebene ausgeführt werden

Pods, die in Hybridknoten zur EKS-Steuerebene ausgeführt werden

Ohne CNI NAT

Anforderung

Pods kommunizieren in der Regel über den kubernetes-Service mit dem Kubernetes-API-Server. Die Service-IP ist die erste IP-Adresse des CIDR-Adressbereichs des Clusters. Diese Konvention ermöglicht es Pods, die vor der Verfügbarkeit von CoreDNS ausgeführt werden müssen, den API-Server zu erreichen, beispielsweise das CNI. Anfragen verlassen den Pod mit der Service-IP als Ziel. Wenn beispielsweise die CIDR des Services 172.16.0.0/16 ist, lautet die IP-Adresse des Services 172.16.0.1.

1. Pod initiiert Anfrage

Der Pod sendet von einem zufälligen Quell-Port eine Anfrage an die kubernetes-Service-IP (172.16.0.1) auf dem API-Server-Port (443). Das Paket sieht wie folgt aus:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.85.1.56 | Src: 67493 (random) | | | Dst: 172.16.0.1 | Dst: 443 | | +-----------------+---------------------+-----------------+

2. CNI-Verarbeitung

Das CNI erkennt, dass die Ziel-IP zu keinem von ihm verwalteten Pod-CIDR gehört. Da ausgehendes NAT deaktiviert ist, leitet das CNI das Paket unverändert an den Host-Netzwerk-Stack weiter.

3. Knoten-Netzwerkverarbeitung

Das Paket gelangt in den Netzwerk-Stack des Knotens, wo netfilter-Hooks die vom Kube-Proxy festgelegten iptables-Regeln auslösen. Es gelten mehrere Regeln in der folgenden Reihenfolge:

  1. Das Paket erreicht zunächst die KUBE-SERVICES-Kette, die Regeln enthält, die mit der ClusterIP und dem Port jedes Services übereinstimmen.

  2. Die übereinstimmende Regel springt zur KUBE-SVC-XXX-Kette für den kubernetes-Service (Pakete mit dem Ziel für 172.16.0.1:443), die Regeln zum Load Balancing enthält.

  3. Die Lastenausgleichsregel wählt zufällig eine der KUBE-SEP-XXX Ketten für die Steuerungsebene ENI IPs (10.0.0.132oder10.0.1.23) aus.

  4. Die ausgewählte KUBE-SEP-XXX-Kette verfügt über die eigentliche Regel, welche die Ziel-IP von der Service-IP in die ausgewählte IP ändert. Dies wird als Destination Network Address Translation (DNAT) bezeichnet.

Nachdem diese Regeln angewendet wurden, sieht das Paket wie folgt aus, vorausgesetzt, dass die IP der ausgewählten EKS-Steuerebene ENI 10.0.0.132 ist:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.85.1.56 | Src: 67493 (random) | | | Dst: 10.0.0.132 | Dst: 443 | | +-----------------+---------------------+-----------------+

Der Knoten leitet das Paket an sein Standard-Gateway weiter, da sich die Ziel-IP nicht im lokalen Netzwerk befindet.

4. Lokales Router-Routing

Der lokale Router stellt fest, dass die Ziel-IP (10.0.0.132) zur VPC-CIDR (10.0.0.0/16) gehört, und leitet sie an das Gateway weiter, das mit AWS verbunden ist.

5. Grenzüberschreitender Transit

Das Paket wird über Ihre eingerichtete Verbindung (z. B. Direct Connect oder VPN) über die Cloud-Grenze hinweg an die VPC weitergeleitet.

6. VPC-Netzwerkzustellung

Die VPC-Netzwerkebene leitet das Paket an das richtige Subnetz weiter, in dem sich die EKS-Steuerebene ENI (10.0.0.132) befindet.

7. ENI-Empfang

Das Paket erreicht die EKS-Steuerebene ENI, die an den Kubernetes-API-Server angefügt ist.

Antwort

Nachdem die EKS-Steuerebene die Anfrage verarbeitet hat, sendet sie eine Antwort zurück an den Pod:

7. API-Server übermittelt Antwort

Der EKS-Kubernetes-API-Server erstellt ein Antwortpaket mit der ursprünglichen Quell-IP als Ziel. Das Paket sieht wie folgt aus:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.0.0.132 | Src: 443 | | | Dst: 10.85.1.56 | Dst: 67493 | | +-----------------+---------------------+-----------------+

Da die Ziel-IP zum konfigurierten Fern-Pod-CIDR (10.85.0.0/16) gehört, sendet sie diese über ihre ENI in der VPC mit dem Router des Subnetzes als nächstem Hop.

6. VPC-Routing

Die VPC-Routentabelle enthält einen Eintrag für den Remote-Pod CIDR (10.85.0.0/16), der diesen Datenverkehr an das Gateway weiterleitet. VPC-to-onprem

5. Grenzüberschreitender Transit

Das Gateway überträgt das Paket über die Cloud-Grenze hinweg über Ihre vorhandene Verbindung (z. B. Direct Connect oder VPN) an Ihr On-Premises-Netzwerk.

4. On-Premises-Netzwerkempfang

Das Paket erreicht Ihren lokalen On-Premises-Router.

3. Zustellung an den Knoten

Die Tabelle des Routers enthält einen Eintrag für 10.85.1.0/24 mit 10.80.0.2 als nächstem Hop, wodurch das Paket an unseren Knoten übermittelt wird.

2. Knoten-Netzwerkverarbeitung

Während das Paket vom Netzwerk-Stack des Knotens verarbeitet wird, ordnet conntrack (ein Teil von netfilter) das Paket der Verbindung zu, die der Pod ursprünglich hergestellt hat. Da ursprünglich DNAT angewendet wurde, kehrt conntrack das DNAT um, indem die Quell-IP von der IP der ENI der EKS-Steuerebene in die kubernetes-Service-IP umgeschrieben wird:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 172.16.0.1 | Src: 443 | | | Dst: 10.85.1.56 | Dst: 67493 | | +-----------------+---------------------+-----------------+

1. CNI-Verarbeitung

Das CNI erkennt, dass die Ziel-IP zu einem Pod in seinem Netzwerk gehört, und liefert das Paket an den richtigen Pod-Netzwerk-Namespace.

Dieser Ablauf zeigt, warum Remote Pod von der VPC bis zu dem spezifischen Knoten, der jeden Pod hostet, ordnungsgemäß routbar sein CIDRs muss. Der gesamte Rückpfad hängt vom ordnungsgemäßen Routing des Pods sowohl IPs in der Cloud als auch in lokalen Netzwerken ab.

Mit CNI NAT

Dieser Ablauf ist dem ohne CNI NAT sehr ähnlich, jedoch mit einem wesentlichen Unterschied: Das CNI wendet Source NAT (SNAT) auf das Paket an, bevor es an den Netzwerk-Stack des Knotens gesendet wird. Dadurch wird die Quell-IP des Pakets in die IP des Knotens geändert, sodass das Paket ohne zusätzliche Routing-Konfiguration zurück zum Knoten geleitet werden kann.

Anforderung

1. Pod initiiert Anfrage

Der Pod sendet von einem zufälligen Quell-Port eine Anfrage an die kubernetes-Service-IP (172.16.0.1) auf dem EKS-Kubernetes-API-Server-Port (443). Das Paket sieht wie folgt aus:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.85.1.56 | Src: 67493 (random) | | | Dst: 172.16.0.1 | Dst: 443 | | +-----------------+---------------------+-----------------+

2. CNI-Verarbeitung

Das CNI erkennt, dass die Ziel-IP zu keinem von ihm verwalteten Pod-CIDR gehört. Da ausgehendes NAT aktiviert ist, wendet das CNI SNAT auf das Paket an und ändert die Quell-IP in die IP des Knotens, bevor es an den Netzwerk-Stack des Knotens weitergeleitet wird:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.80.0.2 | Src: 67493 (random) | | | Dst: 172.16.0.1 | Dst: 443 | | +-----------------+---------------------+-----------------+

Hinweis: CNI und iptables werden im Beispiel aus Gründen der Übersichtlichkeit als separate Blöcke dargestellt. In der Praxis ist es jedoch möglich, dass einige NAT CNIs verwendeniptables.

3. Knoten-Netzwerkverarbeitung

Hier kube-proxy verhalten sich die von festgelegten iptables Regeln genauso wie im vorherigen Beispiel, indem sie den Lastenausgleich zwischen dem Paket und einer der EKS-Steuerungsebenen durchführen ENIs. Das Paket sieht nun so aus:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.80.0.2 | Src: 67493 (random) | | | Dst: 10.0.0.132 | Dst: 443 | | +-----------------+---------------------+-----------------+

Der Knoten leitet das Paket an sein Standard-Gateway weiter, da sich die Ziel-IP nicht im lokalen Netzwerk befindet.

4. Lokales Router-Routing

Der lokale Router stellt fest, dass die Ziel-IP (10.0.0.132) zur VPC-CIDR (10.0.0.0/16) gehört, und leitet sie an das Gateway weiter, das mit AWS verbunden ist.

5. Grenzüberschreitender Transit

Das Paket wird über Ihre eingerichtete Verbindung (z. B. Direct Connect oder VPN) über die Cloud-Grenze hinweg an die VPC weitergeleitet.

6. VPC-Netzwerkzustellung

Die VPC-Netzwerkebene leitet das Paket an das richtige Subnetz weiter, in dem sich die EKS-Steuerebene ENI (10.0.0.132) befindet.

7. ENI-Empfang

Das Paket erreicht die EKS-Steuerebene ENI, die an den Kubernetes-API-Server angefügt ist.

Antwort

Nachdem die EKS-Steuerebene die Anfrage verarbeitet hat, sendet sie eine Antwort zurück an den Pod:

7. API-Server übermittelt Antwort

Der EKS-Kubernetes-API-Server erstellt ein Antwortpaket mit der ursprünglichen Quell-IP als Ziel. Das Paket sieht wie folgt aus:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.0.0.132 | Src: 443 | | | Dst: 10.80.0.2 | Dst: 67493 | | +-----------------+---------------------+-----------------+

Da die Ziel-IP zum konfigurierten Fern-Knoten-CIDR (10.80.0.0/16) gehört, sendet sie diese über ihre ENI in der VPC mit dem Router des Subnetzes als nächstem Hop.

6. VPC-Routing

Die VPC-Routentabelle enthält einen Eintrag für den Remote-Knoten CIDR (10.80.0.0/16), der diesen Verkehr an das Gateway weiterleitet. VPC-to-onprem

5. Grenzüberschreitender Transit

Das Gateway überträgt das Paket über die Cloud-Grenze hinweg über Ihre vorhandene Verbindung (z. B. Direct Connect oder VPN) an Ihr On-Premises-Netzwerk.

4. On-Premises-Netzwerkempfang

Das Paket erreicht Ihren lokalen On-Premises-Router.

3. Zustellung an den Knoten

Der lokale Router erkennt, dass die Ziel-IP-Adresse (10.80.0.2) zu seinem direkt verbundenen Netzwerk gehört, und leitet das Paket direkt an den Ziel-Hybridknoten weiter.

2. Knoten-Netzwerkverarbeitung

Während das Paket vom Netzwerkstack des Knotens verarbeitet wird, gleicht conntrack (ein Teil von netfilter) das Paket mit der ursprünglich vom Pod hergestellten Verbindung ab. Da ursprünglich DNAT angewendet wurde, wird dies rückgängig gemacht, indem die Quell-IP von der IP der EKS-Steuerebene ENI in die kubernetes-Service-IP umgeschrieben wird:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 172.16.0.1 | Src: 443 | | | Dst: 10.80.0.2 | Dst: 67493 | | +-----------------+---------------------+-----------------+

1. CNI-Verarbeitung

Das CNI identifiziert dieses Paket als Teil einer Verbindung, für die zuvor SNAT angewendet wurde. Es kehrt das SNAT um und ändert die Ziel-IP wieder in die IP des Pods:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 172.16.0.1 | Src: 443 | | | Dst: 10.85.1.56 | Dst: 67493 | | +-----------------+---------------------+-----------------+

Das CNI erkennt, dass die Ziel-IP zu einem Pod in seinem Netzwerk gehört, und liefert das Paket an den korrekten Pod-Netzwerk-Namespace.

Dieser Ablauf zeigt, wie CNI NAT-ing die Konfiguration vereinfachen kann, indem Pakete zurück zum Knoten geleitet werden können, ohne dass zusätzliches Routing für den Pod erforderlich ist. CIDRs

EKS-Steuerebene für Pods, die in einem Hybridknoten ausgeführt werden (Webhooks)

EKS-Steuerebene für Pods, die auf einem Hybridknoten ausgeführt werden

Dieses Datenverkehrsmuster tritt am häufigsten bei Webhooks auf, bei denen die EKS-Steuerebene direkt Verbindungen zu Webhook-Servern herstellen muss, die in Pods auf Hybridknoten ausgeführt werden. Beispiele hierfür sind die Validierung und Mutation von Zulassungs-Webhooks, die vom API-Server während der Ressourcenvalidierung oder Mutationsprozesse aufgerufen werden.

Anforderung

1. EKS-Kubernetes-API-Server initiiert Anfrage

Wenn ein Webhook im Cluster konfiguriert ist und durch einen entsprechenden API-Vorgang ausgelöst wird, muss der EKS-Kubernetes-API-Server eine direkte Verbindung zum Webhook-Server-Pod herstellen. Der API-Server sucht zunächst die IP-Adresse des Pods aus der dem Webhook zugeordneten Service- oder Endpunkt-Ressource.

Vorausgesetzt, der Webhook-Pod wird in einem Hybridknoten mit IP 10.85.1.23 ausgeführt, erstellt der EKS-Kubernetes-API-Server eine HTTPS-Anfrage an den Webhook-Endpunkt. Das erste Paket wird über die EKS-Steuerebene ENI in Ihrem VPC gesendet, da die Ziel-IP 10.85.1.23 zum konfigurierten Fern-Pod-CIDR (10.85.0.0/16) gehört. Das Paket sieht wie folgt aus:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.0.0.132 | Src: 41892 (random) | | | Dst: 10.85.1.23 | Dst: 8443 | | +-----------------+---------------------+-----------------+

2. VPC-Netzwerkverarbeitung

Das Paket verlässt die EKS-Steuerebene (ENI) und gelangt mit dem Router des Subnetzes als nächstem Hop in die VPC-Netzwerkebene.

3. Abfrage der VPC-Routing-Tabelle

Die VPC-Routing-Tabelle für das Subnetz, das die EKS-Steuerebene ENI enthält, enthält eine bestimmte Route für den Fern-Pod-CIDR (10.85.0.0/16). Diese Routing-Regel leitet das Paket an das VPC-to-onprem Gateway weiter (z. B. ein Virtual Private Gateway für Direct Connect- oder VPN-Verbindungen):

Destination Target 10.0.0.0/16 local 10.85.0.0/16 vgw-id (VPC-to-onprem gateway)

4. Grenzüberschreitender Transit

Das Gateway überträgt das Paket über die Cloud-Grenze hinweg über Ihre vorhandene Verbindung (z. B. Direct Connect oder VPN) an Ihr On-Premises-Netzwerk. Das Paket behält seine ursprünglichen Quell- und Ziel-IP-Adressen bei, während es diese Verbindung durchläuft.

5. On-Premises-Netzwerkempfang

Das Paket erreicht Ihren lokalen On-Premises-Router. Der Router fragt seine Routing-Tabelle ab, um zu ermitteln, wie die Adresse 10.85.1.23 erreicht werden kann. Damit dies funktioniert, muss Ihr lokales Netzwerk über Routen für den Pod verfügen CIDRs , die den Datenverkehr an den entsprechenden Hybridknoten weiterleiten.

In diesem Fall enthält die Routing-Tabelle des Routers einen Eintrag, der angibt, dass das 10.85.1.0/24-Subnetz über den Hybridknoten mit der IP 10.80.0.2 erreichbar ist:

Destination Next Hop 10.85.1.0/24 10.80.0.2

6. Zustellung an den Knoten

Basierend auf dem Eintrag in der Routing-Tabelle leitet der Router das Paket an den Hybridknoten (10.80.0.2) weiter. Wenn das Paket am Knoten ankommt, sieht es genauso aus wie beim Versand durch den EKS-Kubernetes-API-Server, wobei die Ziel-IP weiterhin die IP des Pods ist.

7. CNI-Verarbeitung

Der Netzwerk-Stack des Knotens empfängt das Paket und leitet es zur Verarbeitung an das CNI weiter, da er erkennt, dass die Ziel-IP nicht die eigene IP des Knotens ist. Das CNI erkennt, dass die Ziel-IP zu einem Pod gehört, der lokal auf diesem Knoten ausgeführt wird, und leitet das Paket über die entsprechenden virtuellen Schnittstellen an den richtigen Pod weiter:

Original packet -> node routing -> CNI -> Pod's network namespace

Der Webhook-Server im Pod empfängt die Anfrage und verarbeitet sie.

Antwort

Nachdem der Webhook-Pod die Anfrage verarbeitet hat, sendet er eine Antwort zurück, die demselben Pfad in umgekehrter Reihenfolge folgt:

7. Pod sendet Antwort

Der Webhook-Pod erstellt ein Antwortpaket mit seiner eigenen IP-Adresse als Quelle und dem ursprünglichen Anforderer (der EKS-Steuerebenen-ENI) als Ziel:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.85.1.23 | Src: 8443 | | | Dst: 10.0.0.132 | Dst: 41892 | | +-----------------+---------------------+-----------------+

Das CNI erkennt, dass dieses Paket an ein externes Netzwerk (nicht an einen lokalen Pod) gesendet wird, und leitet das Paket unter Beibehaltung der ursprünglichen Quell-IP-Adresse an den Netzwerk-Stack des Knotens weiter.

6. Knoten-Netzwerkverarbeitung

Der Knoten stellt fest, dass sich die Ziel-IP (10.0.0.132) nicht im lokalen Netzwerk befindet, und leitet das Paket an sein Standard-Gateway (den lokalen Router) weiter.

5. Lokales Router-Routing

Der lokale Router fragt seine Routing-Tabelle ab und stellt fest, dass die Ziel-IP (10.0.0.132) zum VPC CIDR (10.0.0.0/16) gehört. Er leitet das Paket an das Gateway weiter, das eine Verbindung zu AWS herstellt.

4. Grenzüberschreitender Transit

Das Paket wird über dieselbe On-Premises-VPC-Verbindung zurückgesendet und durchquert die Cloud-Grenze in umgekehrter Richtung.

3. VPC-Routing

Wenn das Paket in der VPC ankommt, erkennen die Routing-Tabellen, dass die Ziel-IP zu einem Subnetz innerhalb der VPC gehört. Das Paket wird innerhalb der VPC entsprechend weitergeleitet.

2. und 1. ENI-Empfang der EKS-Steuerebene

Das Paket erreicht das ENI, das mit dem EKS-Kubernetes-API-Server verbunden ist, und schließt damit den Rundlauf ab. Der API-Server empfängt die Webhook-Antwort und setzt die Verarbeitung der ursprünglichen API-Anforderung basierend auf dieser Antwort fort.

Dieser Verkehrsfluss zeigt, warum der Remote-Pod ordnungsgemäß konfiguriert und geroutet werden CIDRs muss:

  • Die VPC muss über Routen für den Remote-Pod verfügen, die auf das lokale Gateway CIDRs verweisen

  • Ihr lokales Netzwerk muss über Routen für Pods verfügen CIDRs , die den Datenverkehr zu den spezifischen Knoten weiterleiten, auf denen diese Pods gehostet werden

  • Ohne diese Routing-Konfiguration wären Webhooks und andere ähnliche Services, die in Pods auf Hybridknoten ausgeführt werden, von der EKS-Steuerebene aus nicht erreichbar.

Pod-to-Pod läuft auf Hybridknoten

Pod-zu-Pod-Ausführung auf Hybridknoten

In diesem Abschnitt wird erläutert, wie Pods, die in verschiedenen Hybridknoten ausgeführt werden, miteinander kommunizieren. In diesem Beispiel wird davon ausgegangen, dass Ihr CNI VXLAN für die Kapselung verwendet, was bei Cilium CNIs oder Calico üblich ist. Der Gesamtprozess ist bei anderen Kapselungsprotokollen wie Geneve oder ähnlich. IP-in-IP

Anforderung

1. Pod A initiiert die Kommunikation

Pod A (10.85.1.56) on Knoten 1 möchte Datenverkehr an Pod B (10.85.2.67) an Knoten 2 senden. Das ursprüngliche Paket sieht folgendermaßen aus:

+------------------+-----------------+-------------+-----------------+ | Ethernet Header | IP Header | TCP/UDP | Payload | | Src: Pod A MAC | Src: 10.85.1.56 | Src: 43721 | | | Dst: Gateway MAC | Dst: 10.85.2.67 | Dst: 8080 | | +------------------+-----------------+-------------+-----------------+

2. CNI fängt das Paket ab und verarbeitet es

Wenn das Paket von Pod A seinen Netzwerk-Namespace verlässt, wird es vom CNI abgefange Das CNI konsultiert seine Routing-Tabelle und stellt fest: – Die Ziel-IP (10.85.2.67) gehört zum Pod-CIDR. – Diese IP befindet sich nicht auf dem lokalen Knoten, sondern gehört zu Knoten 2 (10.80.0.3). – Das Paket muss mit VXLAN gekapselt werden.

Die Entscheidung für die Kapselung ist von entscheidender Bedeutung, da das zugrunde liegende physische Netzwerk nicht weiß, wie der Pod CIDRs direkt weitergeleitet wird — es weiß nur, wie der Verkehr zwischen den Knoten weitergeleitet wird. IPs

Das CNI kapselt das gesamte ursprüngliche Paket in einem VXLAN-Frame. Dadurch wird effektiv ein „Paket innerhalb eines Pakets“ mit neuen Headern erstellt:

+-----------------+----------------+--------------+------------+---------------------------+ | Outer Ethernet | Outer IP | Outer UDP | VXLAN | Original Pod-to-Pod | | Src: Node1 MAC | Src: 10.80.0.2 | Src: Random | VNI: 42 | Packet (unchanged | | Dst: Router MAC | Dst: 10.80.0.3 | Dst: 8472 | | from above) | +-----------------+----------------+--------------+------------+---------------------------+

Wichtige Punkte zu dieser Kapselung: – Das äußere Paket ist von Knoten 1 (10.80.0.2) an Knoten 2 (10.80.0.3) adressiert. – Der UDP-Port 8472 ist der VXLAN-Port, den Cilium standardmäßig verwendet. – Die VXLAN-Netzwerk-ID (VNI) identifiziert, zu welchem Überlagerungsnetzwerk dieses Paket gehört. – Das gesamte Originalpaket (mit der IP-Adresse von Pod A als Quelle und der IP-Adresse von Pod B als Ziel) bleibt im Inneren unverändert

Das gekapselte Paket gelangt nun in den regulären Netzwerk-Stack von Knoten 1 und wird wie jedes andere Paket verarbeitet:

  1. Knoten-Netzwerkverarbeitung: Der Netzwerk-Stack von Knoten 1 leitet das Paket basierend auf seinem Ziel weiter (10.80.0.3)

  2. Bereitstellung im lokalen Netzwerk:

    • Wenn sich beide Knoten im selben Layer-2-Netzwerk befinden, wird das Paket direkt an Knoten 2 gesendet

    • Wenn sie sich in unterschiedlichen Subnetzen befinden, wird das Paket zuerst an den lokalen Router weitergeleitet

  3. Router-Verarbeitung: Der Router leitet das Paket anhand seiner Routing-Tabelle weiter und übergibt es an Knoten 2

3. Verarbeitung des empfangenden Knotens

Wenn das gekapselte Paket bei Knoten 2 (10.80.0.3) ankommt:

  1. Der Netzwerk-Stack des Knotens empfängt es und identifiziert es als VXLAN-Paket (UDP-Port 4789).

  2. Das Paket wird zur Verarbeitung an die VXLAN-Schnittstelle des CNI weitergeleitet

4. VXLAN-Entkapselung

Das CNI auf Knoten 2 verarbeitet das VXLAN-Paket:

  1. Es entfernt die äußeren Header (Ethernet, IP, UDP und VXLAN).

  2. Es extrahiert das ursprüngliche innere Paket

  3. Das Paket hat nun wieder seine ursprüngliche Form:

+------------------+-----------------+-------------+-----------------+ | Ethernet Header | IP Header | TCP/UDP | Payload | | Src: Pod A MAC | Src: 10.85.1.56 | Src: 43721 | | | Dst: Gateway MAC | Dst: 10.85.2.67 | Dst: 8080 | | +------------------+-----------------+-------------+-----------------+

Das CNI auf Knoten 2 untersucht die Ziel-IP (10.85.2.67) und:

  1. Identifiziert, dass diese IP zu einem lokalen Pod gehört

  2. Leitet das Paket durch die entsprechenden virtuellen Schnittstellen

  3. Liefert das Paket an den Netzwerk-Namespace von Pod B

Antwort

Wenn Pod B auf Pod A reagiert, verläuft der gesamte Prozess in umgekehrter Reihenfolge:

  1. Pod B sendet ein Paket an Pod A (10.85.1.56)

  2. Das CNI von Knoten 2 kapselt ihn mit VXLAN und legt das Ziel auf Knoten 1 (10.80.0.2) fest

  3. Das gekapselte Paket wird an Knoten 1 übermittelt

  4. Knoten 1 entkapselt die CNI und übermittelt die ursprüngliche Antwort an Pod A

Pods auf Cloud-Knoten zu Pods auf Hybridknoten (Ost-West–Datenverkehr)

Pods auf Cloud-Knoten zu Pods auf Hybridknoten

Anforderung

1. Pod A initiiert die Kommunikation

Pod A (10.0.0.56) auf dem EC2 Node möchte Traffic an Pod B (10.85.1.56) auf dem Hybrid-Node senden. Das ursprüngliche Paket sieht folgendermaßen aus:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.0.0.56 | Src: 52390 (random) | | | Dst: 10.85.1.56 | Dst: 8080 | | +-----------------+---------------------+-----------------+

Mit der VPC CNI hat Pod A eine IP von der VPC CIDR und ist direkt mit einer ENI auf der Instance verbunden. EC2 Der Netzwerk-Namespace des Pods ist mit dem VPC-Netzwerk verbunden, sodass das Paket direkt in die VPC-Routing-Infrastruktur gelangt.

2. VPC-Routing

Die VPC-Routentabelle enthält eine spezifische Route für den Remote Pod CIDR (10.85.0.0/16), die diesen Verkehr an das Gateway weiterleitet: VPC-to-onprem

Destination Target 10.0.0.0/16 local 10.85.0.0/16 vgw-id (VPC-to-onprem gateway)

Basierend auf dieser Routing-Regel wird das Paket an das Gateway weitergeleitet, das mit Ihrem On-Premises-Netzwerk verbunden ist.

3. Grenzüberschreitender Transit

Das Gateway überträgt das Paket über die Cloud-Grenze hinweg über Ihre vorhandene Verbindung (z. B. Direct Connect oder VPN) an Ihr On-Premises-Netzwerk. Das Paket behält während der gesamten Übertragung seine ursprünglichen Quell- und Ziel-IP-Adressen bei.

4. On-Premises-Netzwerkempfang

Das Paket erreicht Ihren lokalen On-Premises-Router. Der Router fragt seine Routing-Tabelle ab, um den nächsten Hop zum Erreichen der Adresse 10.85.1.56 zu ermitteln. Ihr lokaler Router muss über Routen für den Pod verfügen CIDRs , die den Datenverkehr zum entsprechenden Hybridknoten weiterleiten.

Die Tabelle des Routers enthält einen Eintrag, der angibt, dass das 10.85.1.0/24-Subnetz über den Hybridknoten mit der IP 10.80.0.2 erreichbar ist:

Destination Next Hop 10.85.1.0/24 10.80.0.2

5. Knoten-Netzwerkverarbeitung

Der Router leitet das Paket an den Hybridknoten weiter (10.80.0.2). Wenn das Paket am Knoten ankommt, enthält es weiterhin die IP-Adresse von Pod A als Quelle und die IP-Adresse von Pod B als Ziel.

6. CNI-Verarbeitung

Der Netzwerk-Stack des Knotens empfängt das Paket und leitet es, da die Ziel-IP-Adresse nicht seine eigene ist, zur Verarbeitung an das CNI weiter. Das CNI erkennt, dass die Ziel-IP zu einem Pod gehört, der lokal auf diesem Knoten ausgeführt wird, und leitet das Paket über die entsprechenden virtuellen Schnittstellen an den richtigen Pod weiter:

Original packet -> node routing -> CNI -> Pod B's network namespace

Pod B empfängt das Paket und verarbeitet es entsprechend den Anforderungen.

Antwort

6. Pod B sendet Antwort

Pod B erstellt ein Antwortpaket mit seiner eigenen IP als Quelle und der IP von Pod A als Ziel:

+-----------------+---------------------+-----------------+ | IP Header | TCP Header | Payload | | Src: 10.85.1.56 | Src: 8080 | | | Dst: 10.0.0.56 | Dst: 52390 | | +-----------------+---------------------+-----------------+

Das CNI erkennt, dass dieses Paket für ein externes Netzwerk bestimmt ist, und leitet es an den Netz-Stack des Knotens weiter.

5. Knoten-Netzwerkverarbeitung

Der Knoten stellt fest, dass die Ziel-IP (10.0.0.56) nicht zum lokalen Netzwerk gehört und leitet das Paket an sein Standard-Gateway (den lokalen Router) weiter.

4. Lokales Router-Routing

Der lokale Router fragt seine Routing-Tabelle ab und stellt fest, dass die Ziel-IP (10.0.0.56) zum VPC CIDR (10.0.0.0/16) gehört. Er leitet das Paket an das Gateway weiter, das eine Verbindung zu AWS herstellt.

3. Grenzüberschreitender Transit

Das Paket wird über dieselbe On-Premises-VPC-Verbindung zurückgesendet und durchquert die Cloud-Grenze in umgekehrter Richtung.

2. VPC-Routing

Wenn das Paket in der VPC ankommt, erkennt das Routing-System, dass die Ziel-IP zu einem Subnetz innerhalb der VPC gehört. Das Paket wird durch das VPC-Netzwerk an die EC2 Instance weitergeleitet, die Pod A hostet.

1. Pod A empfängt Antwort

Das Paket kommt bei der EC2 Instance an und wird über das angehängte ENI direkt an Pod A übermittelt. Da die VPC CNI für Pods in der VPC kein Überlagerungsnetzwerk verwendet, ist keine zusätzliche Entkapselung erforderlich – das Paket kommt mit intakten Original-Headern an.

Dieser Ost-West-Verkehrsfluss zeigt, warum der Remote-Pod ordnungsgemäß konfiguriert und aus beiden Richtungen routbar sein CIDRs muss:

  • Die VPC muss über Routen für den Remote-Pod verfügen, die auf das lokale Gateway CIDRs verweisen

  • Ihr lokales Netzwerk muss über Routen für Pods verfügen CIDRs , die den Datenverkehr zu den spezifischen Knoten weiterleiten, auf denen diese Pods gehostet werden.