Panoramaanalyse der Datenverbindungen des Alibaba Cloud-Containernetzwerks (7): Terway DataPath V2 (Terway≥1.8.0)

Autor: Yu Kai

Vorwort

In den letzten Jahren ist der Trend zur Cloud-nativen Unternehmensinfrastruktur immer stärker geworden. Vom ersten IaaS bis hin zu den aktuellen Microservices sind die Anforderungen der Kunden an granulare Verfeinerung und Beobachtbarkeit gestiegen. Um der höheren Leistung und Dichte der Kunden gerecht zu werden, haben sich Containernetzwerke mit hoher Geschwindigkeit entwickelt und weiterentwickelt, was zwangsläufig extrem hohe Schwellenwerte und Herausforderungen für die Sichtbarkeit cloudnativer Netzwerke für Kunden mit sich bringt. Um die Beobachtbarkeit von Cloud-nativen Netzwerken zu verbessern und es Kunden und Studierenden an vorderster Front zu erleichtern, die Lesbarkeit von Geschäftsverbindungen zu verbessern, haben ACK Industrial Research und AES gemeinsam eine Reihe von Beobachtbarkeiten auf Datenebene für Cloud-native Netzwerke entwickelt, um Kunden und Studenten zu helfen In den vorderen und hinteren Linien verstehen wir das Cloud-Native-Netzwerkarchitektursystem, vereinfachen die Beobachtbarkeitsschwelle des Cloud-Native-Netzwerks, optimieren die Erfahrung von Kundenbetrieb und -wartung sowie After-Sales-Studenten bei der Bewältigung schwieriger Probleme und verbessern die Stabilität der Verbindungen von das cloudnative Netzwerk.

Aus der Vogelperspektive des Containernetzwerks lässt sich das gesamte Containernetzwerk in drei Teile unterteilen: Pod-Netzwerksegment, Service-Netzwerksegment und Knotennetzwerksegment. Diese drei Netzwerke müssen eine Verbindung und Zugangskontrolle erreichen. Was sind also die technischen Prinzipien für die Implementierung? Was ist der gesamte Link und welche Einschränkungen gibt es? Was ist der Unterschied zwischen Flannel und Terway? Wie hoch ist die Netzwerkleistung in verschiedenen Modi? Diese erfordern, dass Kunden vor dem Bau von Containern Entscheidungen auf der Grundlage ihrer eigenen Geschäftsszenarien treffen. Nach Abschluss der Konstruktion kann die relevante Architektur nicht geändert werden, sodass Kunden die Eigenschaften jeder Architektur vollständig verstehen müssen. Die folgende Abbildung ist beispielsweise ein vereinfachtes Diagramm. Das Pod-Netzwerk muss die Netzwerkinteroperabilität und -steuerung zwischen Pods im selben ECS realisieren und auch den Zugriff zwischen Pods in verschiedenen ECS realisieren. Das Backend von Pods, die auf SVC zugreifen, kann sich im selben ECS befinden Andere ECSs: In diesen verschiedenen Modi ist der Datenverbindungsweiterleitungsmodus unterschiedlich, und auch die Leistungsergebnisse auf der Geschäftsseite sind unterschiedlich.

Dieser Artikel ist der siebte Teil von [Panoramaanalyse von Container-Netzwerk-Datenverbindungen]. Er stellt hauptsächlich die Weiterleitungsverbindungen von Datenebenenverbindungen im Kubernetes Terway DataPath V2-Modus vor. Zunächst können wir die Weiterleitungsverbindungen der Datenebene in verschiedenen Szenarien identifizieren Kunden können die Datenoberflächenleistung der Zugriffsverbindung in verschiedenen Szenarien durch ein detailliertes Verständnis der Weiterleitungsverbindung, des Kundenbetriebs und der Alibaba Cloud weiter optimieren Die Schüler können erkennen, was passiert, und manuell beobachten, welche Verbindungspunkte bereitgestellt werden, um die Richtung und Ursache des Problems genauer zu ermitteln.

Serie 1: Panoramaanalyse der Datenverbindungen des Alibaba Cloud-Containernetzwerks (1) – Flannel

Serie 2: Panoramaanalyse der Datenverbindungen des Alibaba Cloud-Containernetzwerks (2) – Terway ENI

Serie Drei: Panoramaanalyse der Datenverbindungen des Alibaba Cloud Container Network (3) – Terway ENIIP

Serie 4: Panoramaanalyse der Datenverbindungen des Alibaba Cloud-Containernetzwerks (4) – Terway IPVLAN+EBPF

Serie 5: Panoramaanalyse der Datenverbindungen des Alibaba Cloud-Containernetzwerks (5) – Terway ENI-Trunking

Serie 6: Panoramaanalyse der Datenverbindungen des Alibaba Cloud-Containernetzwerks (6) – ASM Istio 

Design der Terway DataPath V2-Musterarchitektur

Die elastische Netzwerkschnittstelle (ENI) unterstützt die Funktion der Konfiguration mehrerer Hilfs-IPs. Einer einzelnen elastischen Netzwerkschnittstelle (ENI) können gemäß den Instanzspezifikationen 6 bis 20 Hilfs-IPs zugewiesen werden zum Container, wodurch die Effizienz der Pod-Bereitstellung erheblich verbessert wird. In Bezug auf die Netzwerkkonnektivität unterstützt Terway derzeit zwei Lösungen: Veth-Pair-Policy-Routing und IPVLAN. Die Community hat die IPVLAN-Unterstützung jedoch nach Cilium v1.12 aufgegeben [ 1] , um die Konsistenz der Datenebene zu vereinheitlichen ACK Die Entwicklung steht im Einklang mit der Community, was die Integration von Cloud-nativen Funktionen erleichtert und die Differenzierung verringert. Ab v1.8.0 unterstützt Terway keine IPvlan-Tunnelbeschleunigung mehr, sondern verwendet DataPath V2, um die Datenebene zu vereinheitlichen.

Das vom Pod verwendete CIDR-Netzwerksegment ist dasselbe Netzwerksegment wie das CIDR des Knotens.

Es gibt eine Netzwerkkarte eth0 im Pod, und die IP von eth0 ist die IP des Pods. Die MAC-Adresse dieser Netzwerkkarte stimmt nicht mit der MAC-Adresse von ENI auf der Konsole überein Netzwerkkarten auf ECS, was bedeutet, dass die an ENI angeschlossene Netzwerkkarte nicht direkt mit dem Netzwerk-Namespace des Pods verbunden ist.

Im Pod gibt es nur eine Standardroute, die auf eth0 zeigt. Das bedeutet, dass eth0 der einheitliche Ein- und Ausgang ist, wenn der Pod auf ein beliebiges Adresssegment zugreift.

Gleichzeitig gibt es in ECS mehrere Ethx-Netzwerkkarten, was bedeutet, dass die an ENI angeschlossene Netzwerkkarte nicht direkt im Netzwerk-Namespace des Pods bereitgestellt wird.

Über OS Linux Routing kann erreicht werden, dass der gesamte für die Pod-IP bestimmte Datenverkehr an die dem Pod entsprechende virtuelle Calixx-Karte weitergeleitet wird. Daher hat der Netzwerk-Namespace von ECS OS und Pod eine vollständige Konfiguration für eingehende und ausgehende Links eingerichtet.

Für die Implementierung von ENI Multi-IP ähnelt dies dem Prinzip der ACK-Container-Netzwerkdatenverbindung (Terway ENIIP) [ 2] . Terway Pod wird auf jedem Knoten über Daemonset bereitgestellt. Mit dem Zuordnungsbefehl terway-cli können Sie die Anzahl der angeschlossenen ENIs auf dem Knoten, die MAC-Adresse und die IP auf jedem ENI abrufen.

Damit der Pod auf SVC zugreifen kann, verwendet der Container verschiedene Methoden, um die Anforderung an die ECS-Schicht weiterzuleiten, auf der sich der Pod befindet, und das Netfilter-Modul in ECS implementiert die Auflösung der SVC-IP. Da die Datenverbindung jedoch vom Netzwerk-Namespace des Pods auf den Netzwerk-Namespace des Betriebssystems des ECS umgestellt werden muss und den Kernel-Protokollstapel in der Mitte durchläuft, kommt es zwangsläufig zu Leistungseinbußen Streben Sie nach hoher Parallelität und hoher Leistung, ist es möglicherweise nicht möglich, die Kundenanforderungen vollständig zu erfüllen. Im Vergleich zum IPVLAN-Modus, bei dem eBPF innerhalb des Pods für die SVC-Adressübersetzung bereitgestellt wird, lauscht eBPF im DataPath V2-Modus auf der Calixxx-Netzwerkkarte jedes Pods, um den Pod- und Pod-Zugriff zu beschleunigen und die Adresse des Pod-Zugriffs an den zu übertragen Für die Verbindungsbeschleunigung kann sich der Modellvergleich auf die Verwendung des Terway-Netzwerk-Plugins [ 3] beziehen .

BPF-Routing

Nach dem 5.10-Kernel hat Cilium die eBPF-Host-Routing-Funktion und zwei neue Umleitungsmethoden hinzugefügt, bpf_redirect_peer und bpf_redirect_neigh.

  • bpf_redirect_peer

    Das Datenpaket wird direkt an die Schnittstelle eth0 im Veth-Paar-Pod gesendet, ohne die lxc-Schnittstelle des Hosts zu durchlaufen, sodass das Datenpaket weniger einmal in die CPU-Backlog-Warteschlange gelangt und eine bessere Weiterleitungsleistung erzielt.

  • bpf_redirect_neigh

    Wird verwendet, um die SRC- und DST-Mac-Adressen des Pod-Ausgangsdatenverkehrs einzugeben. Der Datenverkehr muss nicht die Routenprotokoll-Stack-Verarbeitung des Kernels durchlaufen.

Daher kann das Gesamtmodell von Terway DataPath V2 wie folgt zusammengefasst werden:

  • Derzeit unterstützen Kernel niedrigerer Versionen (niedriger als 4.2) keine eBPF-Beschleunigung. Aliyun2 kann teilweise Beschleunigungsfunktionen erhalten, und Aliyun3 kann vollständige Beschleunigungsfunktionen erhalten.
  • Knoten müssen den Protokollstapel des Hosts durchlaufen, um auf Pods zuzugreifen. Der Pod-zu-Pod-Zugriff und der Pod-Zugriff auf SVC erfolgen nicht über den Protokollstapel des Hosts.
  • Wenn im DataPath V2-Modus ein Pod auf die SVC-IP zugreift, wird die SVC-IP durch eBPF auf der Veth-Paar-Calixxx-Netzwerkkarte des Pods in die IP eines SVC-Backend-Pods konvertiert, und dann umgeht die Datenverbindung den Host-Protokollstapel. Mit anderen Worten: Die SVC-IP wird nur im Veth-Paar des Quell-Pods erfasst, aber weder der Ziel-Pod noch das ECS, in dem sich der Ziel-Pod befindet, werden erfasst.

Analyse der Containernetzwerk-Datenverbindung im Terway DataPath V2-Modus

Basierend auf den Eigenschaften des Containernetzwerks können die Netzwerkverbindungen im Terway-Datapathv2-Modus grob in zwei große SOP-Szenarien unterteilt werden: Bereitstellung externer Dienste mithilfe von Pod-IP und Bereitstellung externer Dienste mithilfe von SVC. Dies kann weiter in 11 verschiedene kleine SOP-Szenarien unterteilt werden . SOP-Szenario.

Nach dem Durchkämmen und Zusammenführen der Datenverbindungen dieser 15 Szenarien können diese Szenarien in die folgenden 8 typischen Szenarien zusammengefasst werden:

  • Greifen Sie über denselben Knoten auf die Pod-IP und den Pod zu
  • Zugriff auf Pod-IP, gegenseitiger Zugriff zwischen Pods auf demselben Knoten (Pods gehören zu derselben ENI)
  • Zugriff auf Pod-IP, gegenseitiger Zugriff zwischen Pods auf demselben Knoten (Pods gehören zu verschiedenen ENIs)
  • Zugriff auf Pod-IP, gegenseitiger Zugriff zwischen Pods zwischen verschiedenen Knoten
  • SVC-Cluster-IP/externe IP, auf die Pods im Cluster zugreifen, SVC-Backend-Pod und Client-Pod gehören zum gleichen ECS und ENI
  • SVC-Cluster-IP/externe IP, auf die Pods im Cluster zugreifen, SVC-Backend-Pod und Client-Pod gehören demselben ECS, aber unterschiedlichen ENI
  • Die SVC-Cluster-IP/externe IP, auf die die Pods im Cluster, der SVC-Backend-Pod und der Client-Pod zugreifen, gehören zu unterschiedlichen ECS
  • Greifen Sie von außerhalb des Clusters auf die externe SVC-IP zu

Szenario 1: Zugriff auf die Pod-IP, Zugriff auf den Pod vom selben Knoten (einschließlich Knotenzugriff auf die Backend-SVC-ClusterIP desselben Knotens)

Umfeld

nginx2-7ff4679659-xkpmm existiert auf dem Knoten xxx.10.0.1.219 mit der IP-Adresse 10.0.0.2.

Kernel-Routing

nginx2-7ff4679659-xkpmm, IP-Adresse 10.0.0.2, die PID des Containers auf dem Host ist 5630 und der Container-Netzwerk-Namespace verfügt über eine Standardroute, die auf den Container eth0 verweist.

Das entsprechende Veth-Paar des Containers eth0 in ECS OS ist cali10e985649a0. In ECS OS gibt es eine Route, die auf die Pod-IP zeigt, und der nächste Hop ist calixxx. Aus dem vorherigen Artikel können wir erkennen, dass die calixxx-Netzwerkkarte ein Paar ist veth1 in jedem Pod.

Mit dem folgenden Befehl können wir nginx2-7ff4679659-xkpmm erhalten. Die IP-Adresse 10.0.0.2 wird der eth2-Zubehörnetzwerkkarte von terway zugewiesen.

kubectl --kubeconfig kubeconfig -n kube-system exec -it terway-eniip-v5v2p -c terway -- terway-cli-Zuordnung

Zusammenfassung

ECSs eth0 hat die von nginx2-7ff4679659-xkpmm zurückgegebenen Daten erfasst, die gesendeten Daten jedoch nicht.

ECSs eth1 hat auch die von nginx2-7ff4679659-xkpmm zurückgegebenen Daten erfasst, die gesendeten Daten jedoch nicht.

cali10e985649a0 kann gesendete und empfangene Pakete erfassen.

In der anschließenden Zusammenfassung werden keine Datenpaketbeobachtungen mehr angezeigt.

Datenverbindungsweiterleitungsdiagramm (Aliyun2 und Aliyun3):

  • Die gesamte Verbindung durchläuft den Netzwerkprotokollstapel von ECS und Pod.
  • Der gesamte Anforderungslink lautet: ECS OS -> calixxx -> ECS Pod eth0

Szenario 2: Zugriff auf Pod-IP, gegenseitiger Zugriff zwischen Pods auf demselben Knoten (Pods gehören zu derselben ENI)

Umfeld

nginx2-7ff4679659-xkpmm, IP-Adresse 10.0.0.2 und centos-5bf8644bcf-jqxpk, IP-Adresse 10.0.0.13 sind auf dem Knoten xxx.10.0.1.219 vorhanden.

Kernel-Routing

centos-5bf8644bcf-jqxpk, IP-Adresse 10.0.0.13, die PID des Containers auf dem Host ist 126938 und der Container-Netzwerk-Namespace verfügt über eine Standardroute, die auf den Container eth0 verweist.

Das entsprechende Veth-Paar dieses Containers eth0 in ECS OS ist calia7003b8c36c. In ECS OS gibt es eine Route, die auf die Pod-IP zeigt, und der nächste Hop ist calixxx. Aus dem vorherigen Artikel können wir erkennen, dass die calixxx-Netzwerkkarte ein Paar ist mit veth1 in jedem Pod.

nginx2-7ff4679659-xkpmm, IP-Adresse 10.0.0.2, die PID des Containers auf dem Host ist 5630 und der Container-Netzwerk-Namespace verfügt über eine Standardroute, die auf den Container eth0 verweist.

Das entsprechende Veth-Paar des Containers eth0 in ECS OS ist cali10e985649a0. In ECS OS gibt es eine Route, die auf die Pod-IP zeigt, und der nächste Hop ist calixxx. Aus dem vorherigen Artikel können wir erkennen, dass die calixxx-Netzwerkkarte ein Paar ist veth1 in jedem Pod.

Mit dem folgenden Befehl können wir erreichen, dass nginx2-7ff4679659-xkpmm und centos-5bf8644bcf-jqxpk von terway derselben eth2-Zubehörnetzwerkkarte zugewiesen werden.

kubectl --kubeconfig kubeconfig -n kube-system exec -it terway-eniip-v5v2p -c terway -- terway-cli-Zuordnung

Zusammenfassung

Aliyun2:

  • Wird nicht über die dem Pod zugewiesene sekundäre Netzwerkkarte weitergeleitet.
  • Der gesamte Link durchläuft den Netzwerkprotokollstapel des Pods. Wenn der Link über den Netzwerk-Namespace des Pods an den Peer weitergeleitet wird, wird er durch eBPF beschleunigt und umgeht den Betriebssystemprotokollstapel.
  • Der gesamte Anforderungslink lautet: ECS Pod1 -> Pod1 calixxx -> Pod2 calixxx -> ECS Pod2.

Aliyun3:

  • Wird nicht über die dem Pod zugewiesene sekundäre Netzwerkkarte weitergeleitet.
  • Die gesamte Verbindung wird durch den eBPF-Eingang direkt zum Ziel-Pod beschleunigt und verläuft nicht über die Calixxx-Netzwerkkarte des Ziel-Pods.
  • Der gesamte Anfragelink lautet:

<!---->

  • Richtung: ECS Pod1 -> Pod1 calixxx -> ECS Pod2.
  • Rückkehrrichtung: ECS Pod2 -> Pod2 calixxx -> ECS Pod1.

Szenario 3: Zugriff auf Pod-IP, gegenseitiger Zugriff zwischen Pods auf demselben Knoten (Pods gehören zu verschiedenen ENIs)

Umfeld

Es gibt zwei Pods, ngxin3-55f5c67988-p4qnb und centos-5bf8644bcf-jqxpk, auf dem Knoten xxx.10.0.1.219 mit den IP-Adressen 10.0.0.251 bzw. 10.0.0.13.

Verwenden Sie für den Terway-Pod dieses Knotens den Zuordnungsbefehl terway-cli, um zu erhalten, dass die beiden IPs (10.0.0.251 und 10.0.0.13) zu unterschiedlichen ENI-Netzwerkkarten gehören und auf Betriebssystemebene als eth1 und eth2 gelten.

Kernel-Routing

centos-5bf8644bcf-jqxpk, IP-Adresse 10.0.0.13, die PID des Containers auf dem Host ist 126938 und der Container-Netzwerk-Namespace verfügt über eine Standardroute, die auf den Container eth0 verweist.

Das entsprechende Veth-Paar dieses Containers eth0 in ECS OS ist calia7003b8c36c. In ECS OS gibt es eine Route, die auf die Pod-IP zeigt, und der nächste Hop ist calixxx. Aus dem vorherigen Artikel können wir erkennen, dass die calixxx-Netzwerkkarte ein Paar ist mit veth1 in jedem Pod.

ngxin3-55f5c67988-p4qnb, IP-Adresse 10.0.0.251, die PID des Containers auf dem Host ist 5630 und der Container-Netzwerk-Namespace verfügt über eine Standardroute, die auf den Container eth0 verweist.

Das entsprechende Veth-Paar dieses Containers eth0 in ECS OS ist cali08203025d22. In ECS OS gibt es eine Route, die auf die Pod-IP zeigt, und der nächste Hop ist calixxx. Aus dem vorherigen Artikel können wir erkennen, dass die calixxx-Netzwerkkarte ein Paar ist mit veth1 in jedem Pod.

Zusammenfassung

Aliyun2:

  • Wird nicht über die dem Pod zugewiesene sekundäre Netzwerkkarte weitergeleitet.
  • Der gesamte Link durchläuft den Netzwerkprotokollstapel des Pods. Wenn der Link über den Netzwerk-Namespace des Pods an den Peer weitergeleitet wird, wird er durch eBPF beschleunigt und umgeht den Betriebssystemprotokollstapel.
  • Der gesamte Anforderungslink lautet: ECS Pod1 -> Pod1 calixxx -> Pod2 calixxx -> ECS Pod2.

Aliyun3:

  • Wird nicht über die dem Pod zugewiesene sekundäre Netzwerkkarte weitergeleitet.
  • Die gesamte Verbindung wird durch den eBPF-Eingang direkt zum Ziel-Pod beschleunigt und verläuft nicht über die Calixxx-Netzwerkkarte des Ziel-Pods.
  • Der gesamte Anfragelink lautet:
    • Richtung: ECS Pod1 -> Pod1 calixxx -> ECS Pod2.
    • Rückkehrrichtung: ECS Pod2 -> Pod2 calixxx -> ECS Pod1.

Szenario 4: Zugriff auf Pod-IP, gegenseitiger Zugriff zwischen Pods zwischen verschiedenen Knoten

Umfeld

centos-5bf8644bcf-jqxpk existiert auf dem Knoten xxx.10.0.1.219 und die IP-Adresse ist 10.0.0.13.

nginx1-7bcf4ffdb4-6rsqz existiert auf dem Knoten xxx.10.0.5.27 und die IP-Adresse ist 10.0.4.121.

Sie können den Befehl terway-cli show Factory verwenden, um die ENI-Netzwerkkarte abzurufen, deren IP 10.0.0.13 zu centos-5bf8644bcf-jqxpk gehört und deren MAC-Adresse 00:16:3e:0d:74:23 auf xxx.10.0.1.219 lautet .

Ebenso gehört die IP 10.0.4.121 von nginx1-7bcf4ffdb4-6rsqz zur ENI-Netzwerkkarte mit der MAC-Adresse 00:16:3e:0c:ef:6c auf xxx.10.0.5.27.

Kernel-Routing

centos-5bf8644bcf-jqxpk, IP-Adresse 10.0.0.13, die PID des Containers auf dem Host ist 126938 und der Container-Netzwerk-Namespace verfügt über eine Standardroute, die auf den Container eth0 verweist.

Das entsprechende Veth-Paar dieses Containers eth0 in ECS OS ist calia7003b8c36c. In ECS OS gibt es eine Route, die auf die Pod-IP zeigt, und der nächste Hop ist calixxx. Aus dem vorherigen Artikel können wir erkennen, dass die calixxx-Netzwerkkarte ein Paar ist mit veth1 in jedem Pod.

nginx1-7bcf4ffdb4-6rsqz, IP-Adresse 10.0.4.121, die PID des Containers auf dem Host ist 7745 und der Container-Netzwerk-Namespace verfügt über eine Standardroute, die auf den Container eth0 verweist.

Das entsprechende Veth-Paar dieses Containers eth0 in ECS OS ist cali06cd16bb25f. In ECS OS gibt es eine Route, die auf die Pod-IP zeigt, und der nächste Hop ist calixxx. Aus dem vorherigen Artikel können wir erkennen, dass die calixxx-Netzwerkkarte ein Paar ist mit veth1 in jedem Pod.

Zusammenfassung

Aliyun2:

  • Es durchläuft den Netzwerk-Namespace des Host-Betriebssystems, die Protokoll-Stack-Verbindung wird jedoch durch eBPF beschleunigt.
  • Die gesamte Verbindung muss von der ENI-Netzwerkkarte, zu der der Client-Pod gehört, aus ECS herausgehen und dann von der ENI-Netzwerkkarte, zu der der Ziel-Pod gehört, in ECS eintreten.
  • Der gesamte Anforderungslink lautet ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS1 ENI ethx -> VPC -> ECS2 ENI ethx -> ECS2 Pod2 calixxx -> ECS2 Pod2.

Aliyun3:

  • Die gesamte Verbindung muss bei der ENI-Netzwerkkarte beginnen, zu der der Client-Pod gehört, dann ECS durchlaufen und dann von der ENI-Netzwerkkarte, zu der der Ziel-Pod gehört, in ECS eintreten.
  • Der gesamte Anfragelink lautet:
    • Richtung: ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS1 ENI ethx -> VPC -> ECS2 ENI ethx -> ECS2 Pod2.
    • Richtung: ECS2 Pod2 -> ECS2 Pod2 calixxx -> ECS2 ENI ethx -> VPC -> ECS1 ENI ethx -> ECS1 Pod1.

Szenario 5: Die SVC-Cluster-IP/externe IP, auf die der Pod im Cluster zugreift, der SVC-Backend-Pod und der Client-Pod gehören demselben ECS und derselben ENI

Umfeld

nginx2-7ff4679659-xkpmm, IP-Adresse 10.0.0.2 und centos-5bf8644bcf-jqxpk, IP-Adresse 10.0.0.13 sind auf dem Knoten xxx.10.0.1.219 vorhanden.

Unter ihnen ist nginx2-7ff4679659-xkpmm Pod der Endpunkt von SVC nginx2.

Kernel-Routing

Das Kernel-Routing ähnelt Szenario 2 und wird hier nicht beschrieben.

Was eBPF betrifft, so überwacht eBPF in datapathv2 die calixxx-Netzwerkkarte auf Betriebssystemebene und nicht innerhalb des Pods. Mithilfe der Fähigkeit von Cilium, eBPF aufzurufen, können Sie über den grafischen Befehl die Identitäts-IDs „centos-5bf8644bcf-jqxpk“ und „nginx2-7ff4679659-xkpmm“ als 693 bzw. 2702 abrufen.

Suchen Sie den Terway-Pod des ECS, in dem sich der Pod befindet, als terway-eniip-v5v2p. Führen Sie den Befehl cilium bpf grep -A5 192.168.152.119 im Terway-Pod aus, um das Backend für die Cluster-IP 192.168.152.119 aufzuzeichnen :80 als 10.0 .0.2:80.

Zusammenfassung

Greifen Sie über den Client-Pod centos-5bf8644bcf-jqxpk auf SVC zu.

Die Beobachtung der Netzwerkkarte „centos-6c48766848-znkl8 calia7003b8c36c“ des Clients kann die SVC-IP und die Pod-IP des Clients erfassen.

Auf der ENI der angeschlossenen Netzwerkkarte, zu der Pod centos-6c48766848-znkl8 gehört, wurde beobachtet, dass keine relevanten Verkehrspakete erfasst wurden, was darauf hindeutet, dass der Verkehr einer eBPF-Konvertierung von der Calixx-Netzwerkkarte des Clients zu ENI unterzogen wurde.

Bei der cali10e985649a0-Beobachtung von Pod nginx2-7ff4679659-xkpmmI können nur die Pod-IPs von Centos und Nginx erfasst werden.

Cilium bietet eine Überwachungsfunktion. Mit cilium monitor --related-to <endpoint ID> können Sie Folgendes abrufen: Die Quell-Pod-IP greift auf die SVC-Back-End-Pod-IP 10.0.0.2 zu SVC-IP wird direkt auf der tc-Ebene weitergeleitet.

Aliyun2:

  • Der gesamte Link durchläuft den Netzwerkprotokollstapel des Pods. Wenn der Link über den Netzwerk-Namespace des Pods an den Peer weitergeleitet wird, wird er durch eBPF beschleunigt und umgeht den Betriebssystemprotokollstapel.
  • Die gesamte Verbindungsanforderung durchläuft nicht die vom Pod zugewiesene ENI.
  • Die SVC-IP wird über eBPF auf der calixxx-Netzwerkkarte des Client-Pods in die IP des SVC-Backend-Pods konvertiert, und nachfolgende Knoten können die SVC-IP nicht erfassen.
  • Der gesamte Anforderungslink lautet: ECS Pod1 -> Pod1 calixxx -> Pod2 calixxx -> ECS Pod2.

Aliyun3:

  • Der gesamte Link durchläuft den Netzwerkprotokollstapel des Pods. Wenn der Link über den Netzwerk-Namespace des Pods an den Peer weitergeleitet wird, wird er durch eBPF beschleunigt und umgeht den Betriebssystemprotokollstapel.

  • Die gesamte Verbindungsanforderung durchläuft nicht die vom Pod zugewiesene ENI.

  • Die SVC-IP wird über eBPF auf der calixxx-Netzwerkkarte des Client-Pods in die IP des SVC-Backend-Pods konvertiert, und nachfolgende Knoten können die SVC-IP nicht erfassen.

  • Die gesamte Verbindung wird durch den eBPF-Eingang direkt zum Ziel-Pod beschleunigt und verläuft nicht über die Calixxx-Netzwerkkarte des Ziel-Pods.

  • Der gesamte Anfragelink lautet:

    • Richtung: ECS Pod1 -> Pod1 calixxx -> ECS Pod2.
    • Rückkehrrichtung: ECS Pod2 -> Pod2 calixxx -> ECS Pod1.

Szenario 6: Die SVC-Cluster-IP/externe IP, auf die der Pod im Cluster zugreift, der SVC-Backend-Pod und der Client-Pod gehören demselben ECS, aber unterschiedlichen ENI

Umfeld

Es gibt ngxin3-55f5c67988-p4qnb, IP-Adresse 10.0.0.251 und centos-5bf8644bcf-jqxpk, IP-Adresse 10.0.0.13 auf dem Knoten xxx.10.0.1.219.

Unter ihnen ist ngxin3-55f5c67988-p4qnb Pod der Endpunkt von SVC nginx3.

Kernel-Routing

Das Kernel-Routing ähnelt Szenario 3 und wird hier nicht beschrieben.

Was eBPF betrifft, so überwacht eBPF in datapathv2 die calixxx-Netzwerkkarte auf Betriebssystemebene und nicht innerhalb des Pods. Mithilfe der Fähigkeit von Cilium, eBPF aufzurufen, können Sie über den grafischen Befehl die Identitäts-IDs „centos-5bf8644bcf-jqxpk“ und „ngxin3-55f5c67988-p4qnb“ als 693 bzw. 94 abrufen.

Suchen Sie den Terway-Pod des ECS, in dem sich der Pod befindet, als terway-eniip-v5v2p. Führen Sie den Befehl cilium bpf lb list | aus. Sie können das Backend in eBPF für die Cluster-IP aufzeichnen 192.168.239.183:80 ist 10,0 .0,2:80.

Zusammenfassung

Greifen Sie über den Client-Pod centos-5bf8644bcf-jqxpk auf SVC zu.

Die Beobachtung der Netzwerkkarte „centos-6c48766848-znkl8 calia7003b8c36c“ des Clients kann die SVC-IP und die Pod-IP des Clients erfassen.

Auf der angeschlossenen Netzwerkkarten-ENI von Pod centos-6c48766848-znkl8 und der angeschlossenen Netzwerkkarten-ENI von ngxin3-55f5c67988-p4qnb wurde kein relevanter Datenverkehr erfasst, was darauf hinweist, dass der Datenverkehr von der Calixx-Netzwerkkarte des Clients in SVC-bezogenen Datenverkehr umgewandelt wurde durch eBPF Nach dem Endpunkt wird es direkt mit der Ziel-Calixxx-Netzwerkkarte kurzgeschlossen.

Bei der Beobachtung von cali08203025d22, zu dem der Pod ngxin3-55f5c67988-p4qnb gehört, können nur die Pod-IPs von Centos und Nginx erfasst werden.

Cilium bietet eine Überwachungsfunktion. Mit cilium monitor --related-to <endpoint ID> können Sie Folgendes abrufen: Die Quell-Pod-IP greift auf die SVC-Backend-Pod-IP 110.0.0.251 zu SVC-IP wird direkt auf der tc-Ebene weitergeleitet.

Wenn es in den folgenden Abschnitten um den SVC-IP-Zugriff geht und es Ähnlichkeiten gibt, wird keine detaillierte Erklärung gegeben.

Aliyun2:

  • Es durchläuft den Netzwerk-Namespace des Host-Betriebssystems, die Protokoll-Stack-Verbindung wird jedoch durch eBPF beschleunigt.
  • Die gesamte Verbindungsanforderung durchläuft nicht die vom Pod zugewiesene ENI.
  • Die SVC-IP wird über eBPF auf der calixxx-Netzwerkkarte des Client-Pods in die IP des SVC-Backend-Pods konvertiert, und nachfolgende Knoten können die SVC-IP nicht erfassen.
  • Der gesamte Anforderungslink lautet ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS2 Pod2 calixxx -> ECS2 Pod2.

Aliyun3:

  • Wird nicht über die dem Pod zugewiesene sekundäre Netzwerkkarte weitergeleitet.
  • Die gesamte Verbindung wird durch den eBPF-Eingang direkt zum Ziel-Pod beschleunigt und verläuft nicht über die Calixxx-Netzwerkkarte des Ziel-Pods.
  • Die SVC-IP wird über eBPF auf der calixxx-Netzwerkkarte des Client-Pods in die IP des SVC-Backend-Pods konvertiert, und nachfolgende Knoten können die SVC-IP nicht erfassen.
  • Der gesamte Anfragelink lautet:

<!---->

  • Richtung: ECS Pod1 -> Pod1 calixxx -> ECS Pod2.
  • Rückkehrrichtung: ECS Pod2 -> Pod2 calixxx -> ECS Pod1.

Szenario 7: Die SVC-Cluster-IP/externe IP, auf die der Pod im Cluster zugreift, der SVC-Backend-Pod und der Client-Pod gehören zu unterschiedlichen ECS

Umfeld

centos-5bf8644bcf-jqxpk existiert auf dem Knoten xxx.10.0.1.219 und die IP-Adresse ist 10.0.0.13.

nginx1-7bcf4ffdb4-6rsqz existiert auf dem Knoten xxx.10.0.5.27 und die IP-Adresse ist 10.0.4.121.

Unter ihnen ist nginx1-7bcf4ffdb4-6rsqz Pod der Endpunkt von SVC nginx1.

Kernel-Routing

Der Pod greift auf die Cluster-IP des SVC zu, und der Backend-Pod und der Client-Pod werden auf verschiedenen ECS bereitgestellt. Diese Architektur ähnelt Szenario 4: Gegenseitiger Zugriff zwischen Pods zwischen verschiedenen Knoten [ 4] , mit der Ausnahme, dass es sich bei diesem Szenario um den Pod-Cluster-IP des SVC handelt . Die eBPF-Weiterleitung der Cluster-IP wird beschrieben. Weitere Informationen finden Sie in Szenario 5 und Szenario 6.

Zusammenfassung

Aliyun2:

  • Es durchläuft den Netzwerk-Namespace des Host-Betriebssystems, die Protokoll-Stack-Verbindung wird jedoch durch eBPF beschleunigt.
  • Die gesamte Verbindung muss von der ENI-Netzwerkkarte, zu der der Client-Pod gehört, aus ECS herausgehen und dann von der ENI-Netzwerkkarte, zu der der Ziel-Pod gehört, in ECS eintreten.
  • Der gesamte Anforderungslink lautet ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS1 ENI ethx -> VPC -> ECS2 ENI ethx -> ECS2 Pod2 calixxx -> ECS2 Pod2.

Aliyun3:

  • Die gesamte Verbindung muss bei der ENI-Netzwerkkarte beginnen, zu der der Client-Pod gehört, dann ECS durchlaufen und dann von der ENI-Netzwerkkarte, zu der der Ziel-Pod gehört, in ECS eintreten.

  • Der gesamte Anfragelink lautet:

    • Richtung: ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS1 ENI ethx -> VPC -> ECS2 ENI ethx -> ECS2 Pod2.
    • Richtung: ECS2 Pod2 -> ECS2 Pod2 calixxx -> ECS2 ENI ethx -> VPC -> ECS1 ENI ethx -> ECS1 Pod1.

Szenario 8: Zugriff auf die externe SVC-IP von außerhalb des Clusters

Umfeld

nginx1-7bcf4ffdb4-6rsqz existiert auf dem Knoten xxx.10.0.5.27 und die IP-Adresse ist 10.0.4.121.

Durch die Beschreibung von SVC können Sie feststellen, dass der Nginx-Pod zum Backend von SVC Nginx hinzugefügt wurde. Die Cluster-IP von SVC ist 192.168.190.78.

Kernel-Routing

In der SLB-Konsole können Sie die Backend-Servergruppe der virtuellen Servergruppe lb-3nsj50u4gyz623nitxxx abrufen, die ENI eni-j6cgs979ky3evxxx der beiden Backend-Nginx-Pods ist.

Aus der Perspektive außerhalb des Clusters ist die virtuelle Back-End-Servergruppe von SLB die ENI-Netzwerkkarte, zu der der Back-End-Pod von SVC gehört, und die IP-Adresse des Intranets ist die Adresse des Pods.

Zusammenfassung

Aliyun2:

  • Wenn sich ExternalTrafficPolicy im lokalen oder Cluster-Modus befindet, stellt SLB nur die vom Pod zugewiesene ENI der virtuellen SLB-Servergruppe bereit.
  • Die Datenverbindung wird über die Calixxx-Netzwerkkarte des Veth des Pods geleitet
  • Datenverbindung: Client -> SLB -> Pod ENI + Pod Port -> ECS1 Pod1 calixxx -> ECS1 Pod1 eth0.

Aliyun3:

  • Wenn sich ExternalTrafficPolicy im lokalen oder Cluster-Modus befindet, stellt SLB nur die vom Pod zugewiesene ENI der virtuellen SLB-Servergruppe bereit.
  • Die Datenverbindung wird durch eBPF auf der angeschlossenen Netzwerkkarte des ECS beschleunigt, wobei die Calixxx-Netzwerkkarte des Veth des Pods umgangen wird und direkt in den Netzwerk-Namespace des Pods gelangt.
  • Datenverbindung: Client -> SLB -> Pod ENI + Pod Port -> ECS1 Pod1 eth0.

Verwandte Links:

[1] Veraltete IPVLAN-Unterstützung

https://docs.cilium.io/en/v1.12/operations/upgrade/#deprecated-options

[2] ACK-Container-Netzwerk-Datenverbindung (Terway ENIIP)

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/ack-network-fabric-terway-eniip

[3] Verwendung des Terway-Netzwerk-Plug-ins

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/work-with-terway

[4] Gegenseitiger Zugriff zwischen Pods zwischen verschiedenen Knoten https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/ack-network-fabric-terway-eni-trunking # RS9Nc

Das Team der Google Python Foundation wurde entlassen , und die an Flutter, Dart und Python beteiligten Teams stürmten auf die GitHub-Hotlist – Wie können Open-Source-Programmiersprachen und Frameworks so süß sein? Xshell 8 startet Betatest: Unterstützt das RDP-Protokoll und kann eine Fernverbindung zu Windows 10/11 herstellen. Wenn Passagiere eine Verbindung zum Hochgeschwindigkeits-WLAN der Bahn herstellen , taucht der „35 Jahre alte Fluch“ chinesischer Programmierer auf, wenn sie sich mit Hochgeschwindigkeit verbinden Rail WiFi. MySQLs erstes KI-Suchtool mit Langzeitunterstützung für Version 8.4 GA : Vollständig Open Source und kostenlos, eine Open-Source-Alternative zu Perplexity. Hongmeng: Es verfügt trotz anhaltender Unterdrückung immer noch über ein eigenes Betriebssystem Das deutsche Automobilsoftwareunternehmen Elektrobit hat eine auf Ubuntu basierende Automobil-Betriebssystemlösung als Open Source bereitgestellt .
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/3874284/blog/11066857
Empfohlen
Rangfolge