Zielüberschneidung verwalten

Auf dieser Seite wird beschrieben, wie Administratoren eines Erstellernetzwerks Zielüberschneidungen in VPC-Netzwerken (Virtual Private Cloud) verwalten können, die Private Service Connect-Schnittstellen verwenden.

Google Cloud sorgt dafür, dass die IP-Adressbereiche von Subnetzen, die Netzwerkschnittstellen in derselben VM-Instanz zugewiesen sind, keine überlappenden IP-Adressbereiche haben können. Die Subnetze in den Nutzer- und Ersteller-VPC-Netzwerken können sich jedoch überschneiden, wie in Abbildung 1 dargestellt. Wenn Sie eine Private Service Connect-Schnittstelle mit sich überschneidenden Ziel-IP-Adressbereichen verwenden, ist eine zusätzliche Konfiguration erforderlich, damit der Traffic das richtige Ziel im vorgesehenen Netzwerk erreicht.

Die auf dieser Seite beschriebenen Befehle zeigen, wie Sie das Routing für eine VM, die das Debian-Betriebssystem verwendet, vorübergehend aktualisieren. Wenn Sie die VM dauerhaft aktualisieren oder eine VM mit einem anderen Betriebssystem konfigurieren möchten, lesen Sie die öffentliche Dokumentation des Betriebssystems.

Subnet-a in einem VPC-Netzwerk des Erstellers überschneidet sich mit subnet-c in einem VPC-Netzwerk des Nutzers, da beide Subnetze denselben IP-Adressbereich verwenden. Ersteller-VMs müssen 10.0.1.5 in beiden Netzwerken erreichen können.

Sie können sich überschneidende Ziel-IP-Adressbereiche auf folgende Weisen verwalten, die auf dieser Seite ausführlich beschrieben werden:

Folgende Ansätze können auch zum Verwalten von Zielüberschneidungen verwendet werden. Sie werden jedoch auf dieser Seite nicht beschrieben:

  • Verwenden Sie eine Socket-Bibliothek und bind(), um das Routing zu steuern.
  • Verwenden Sie einen sich vollständig nicht überschneidenden IP-Adressbereich für das Erstellernetzwerk.
  • Wenn die erstellerseitigen überlappenden IP-Adressen nur für eigene API-Endpunkte relevant sind, können Sie privaten Google-Zugriff für lokale Hosts konfigurieren.
  • Verwenden Sie virtuelles Routing und Weiterleitung (VRF), um überlappende IP-Adressbereiche zu isolieren. Weisen Sie jeder Private Service Connect-Schnittstelle eine VRF-Instanz zu. Konfigurieren Sie Standardrouten für jede VRF-Instanz, damit der Traffic das gewünschte Ziel erreicht.
  • Verwenden Sie eBPF, um erweiterte Routingregeln anhand von anderen Kriterien, als der IP-Adresse anzupassen. Dieser Ansatz wird für Fälle empfohlen, in denen die vorherigen Optionen nicht infrage kommen.

Zieladressenüberschneidung über Netzwerk-Namespaces verwalten

Sie können die Überschneidung von Zieladressen übern Netzwerk-Namespaces verwalten. Dieser Ansatz eignet sich gut, wenn einige Anwendungen auf einer Produzenten-VM nur auf Nutzerarbeitslasten und andere Anwendungen auf der Ersteller-VM nur auf Erstellerarbeitslasten zugreifen müssen.

So verwalten Sie die Überschneidung von Zieladressen über Netzwerk-Namespaces:

  1. Stellen Sie eine Verbindung zur VM mit Ihrer Private Service Connect-Schnittstelle her.

  2. Namen des Gastbetriebssystems der Private Service Connect-Schnittstelle ermitteln

  3. Verwenden Sie den folgenden Befehl, um einen Netzwerk-Namespace für Consumer-gebundenen Traffic zu erstellen:

    sudo ip netns add consumer-ns
    
  4. Verschieben Sie die Private Service Connect-Schnittstelle in den Namespace des Nutzernetzwerks. Führen Sie folgende Befehle einzeln aus:

    sudo ip link set OS_INTERFACE_NAME netns consumer-ns
    
    sudo ip netns exec consumer-ns ip link set OS_INTERFACE_NAME up
    

    Ersetzen Sie OS_INTERFACE_NAME durch den Namen des Gastbetriebssystems für Ihre Private Service Connect-Schnittstelle, den Sie in einem vorherigen Schritt ermittelt haben.

  5. Stellen Sie die IP-Adresse der Private Service Connect-Schnittstelle wieder her:

    sudo ip netns exec consumer-ns ip addr add INTERFACE_IP/32 dev OS_INTERFACE_NAME
    

    Ersetzen Sie INTERFACE_IP durch die IP-Adresse Ihrer Private Service Connect-Schnittstelle.

  6. Prüfen Sie die Änderungen an Ihrer Private Service Connect-Schnittstelle:

    sudo ip netns exec consumer-ns ip a
    

    Prüfen Sie, ob der Name des Gastbetriebssystems Ihrer Private Service Connect-Schnittstelle in der Ausgabe des Befehls aufgeführt ist. Prüfen Sie, ob die Schnittstelle die richtige IP-Adresse hat.

  7. Fügen Sie eine Route zur Gateway-IP-Adresse hinzu:

    sudo ip netns exec consumer-ns ip route add GATEWAY_IP dev OS_INTERFACE_NAME scope link
    

    Ersetzen Sie GATEWAY_IP durch die IP-Adresse des Standardgateways für das Subnetz Ihrer Private Service Connect-Schnittstelle.

  8. Fügen Sie eine Standardroute für Ihre Private Service Connect-Schnittstelle hinzu:

    sudo ip netns exec consumer-ns ip route add default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  9. Prüfen Sie die Routingtabelle für den consumer-ns-Namespace:

    sudo ip netns exec consumer-ns ip route
    

    Prüfen Sie, ob die Routingtabelle einen Eintrag im folgenden Format enthält:

    default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  10. So prüfen Sie, ob Ihre Schnittstelle VMs in jedem Teil des sich überschneidenden IP-Adressbereichs erreichen kann:

    1. Achten Sie darauf, dass Firewallregeln so konfiguriert sind, dass ICMP-Traffic zu Ihren Ziel-VMs zugelassen wird.

    2. Senden Sie einen ICMP-Ping von der VM Ihrer Schnittstelle an eine Nutzer-VM, die sich im überlappenden IP-Adressbereich befindet. Verwenden Sie Ihren Consumer-Namespace:

      sudo ip netns exec consumer-ns ping CONSUMER_IP_ADDRESS
      

      Ersetzen Sie CONSUMER_IP_ADDRESS durch die IP-Adresse einer Nutzer-VM aus dem überlappenden IP-Adressbereich.

    3. Senden Sie einen ICMP-Ping von der VM Ihrer Schnittstelle an eine Ersteller-VM, die sich im überlappenden IP-Adressbereich befindet. Standard-Namespace verwenden:

      ping PRODUCER_IP_ADDRESS
      

      Ersetzen Sie PRODUCER_IP_ADDRESS durch die IP-Adresse einer Produzenten-VM aus dem überlappenden IP-Adressbereich.

Zieladressenüberschneidung mit richtlinienbasiertem Routing verwalten

Um die Überschneidung von Zieladressen zu verwalten, können Sie das richtlinienbasierte Routing auf dem Betriebssystem der VM Ihrer Schnittstelle konfigurieren. Dieser Ansatz funktioniert gut, wenn dieselbe Anwendung auf Arbeitslasten zugreifen muss, die sich sowohl in den Nutzer- als auch in den VPC-Netzwerken des Erstellers befinden. Sie müssen den Vorgang jedoch für jeden Port wiederholen, den Sie im überlappenden IP-Bereich erreichen möchten.

Wenn Sie richtlinienbasiertes Routing einrichten, um Zielüberschneidungen zu verwalten, wählen Sie Zielports für Verbraucheranwendungen aus. Traffic, der an einen dieser Ports gebunden ist, wird über die Private Service Connect-Schnittstelle an das Nutzer-Subnetz geleitet, während der andere Traffic über die Standardschnittstelle an das Ersteller-Subnetz geleitet wird.

  1. Stellen Sie eine Verbindung zur VM Ihrer Private Service Connect-Schnittstelle her.

  2. Wenn der Befehl iproute2 nicht verfügbar ist, installieren Sie ihn.

  3. Achten Sie darauf, dass Sie in folgende Datei schreiben können: /etc/iproute2/rt_tables

  4. Erstellen Sie eine Routingtabelle. Fügen Sie eine Standardroute für Ihre Private Service Connect-Schnittstelle hinzu:

    echo "200 pscnet" >> /etc/iproute2/rt_tables \
    sudo ip route add default dev OS_INTERFACE_NAME table pscnet
    

    Ersetzen Sie OS_INTERFACE_NAME durch den Namen des Gastbetriebssystems Ihrer Private Service Connect-Schnittstelle, z. B. ens5.

  5. Fügen Sie über Ihr Standardgateway eine Route zum sich überschneidenden Consumer-Subnetzbereich hinzu:

    sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME table pscnet
    

    Ersetzen Sie dabei Folgendes:

    • CONSUMER_SUBNET_RANGE ist der IP-Adressbereich Ihres Nutzersubnetzes.
    • GATEWAY_IP ist die IP-Adresse des Standardgateways für das Subnetz Ihrer Private Service Connect-Schnittstelle.
  6. Aktualisieren Sie die Routingtabelle so, dass ausgehende Pakete von dieser VM die IP-Adresse Ihrer Schnittstelle als Quell-IP-Adresse verwenden:

    sudo ip route add GATEWAY_IP src INTERFACE_IP dev OS_INTERFACE_NAME table pscnet
    

    Ersetzen Sie INTERFACE_IP durch die IP-Adresse Ihrer Private Service Connect-Schnittstelle.

  7. Fügen Sie eine IP-Regel hinzu, die für den gesamten Traffic gilt, der für den Zielport Ihrer Consumeranwendung bestimmt ist:

    sudo ip rule add dport CONSUMER_PORT table pscnet
    

    Ersetzen Sie CONSUMER_PORT durch den Port, den Sie für den Traffic zu Ihrer Nutzer-VM konfiguriert haben.

  8. So prüfen Sie, ob ein Paket basierend auf seinem Zielport an die richtige VM weitergeleitet wird:

    1. Erstellen Sie in den Ersteller- und Nutzernetzwerken Test-VMs, die dieselbe IP-Adresse aus dem überlappenden Bereich verwenden.
    2. Richten Sie auf jeder Test-VM einen HTTP-Server ein. Konfigurieren Sie die Test-VM des Nutzers, um den Port zu überwachen, den Sie für die Nutzeranwendung eingerichtet haben. Konfigurieren Sie die Test-VM des Erstellers, um einen anderen Port zu überwachen, als Sie für die Nutzeranwendung eingerichtet haben.
    3. Achten Sie darauf, dass Firewallregeln so konfiguriert sind, dass HTTP-Traffic zu Ihren Test-VMs zugelassen wird.
    4. Stellen Sie über den Port, den Sie für Ihre Nutzeranwendung konfiguriert haben, eine GET-Anfrage an die Test-IP-Adresse und prüfen Sie dann, ob Sie die richtige Instanz erreicht haben:

      curl TEST_IP_ADDRESS:CONSUMER_PORT
      

      Ersetzen Sie dabei Folgendes:

      • TEST_IP_ADDRESS: die IP-Adresse Ihrer Test-VMs.
      • CONSUMER_PORT ist der Port Ihrer Nutzeranwendung.
    5. Stellen Sie über den Port, den Sie für Ihre Produktions-Test-VM konfiguriert haben, eine GET-Anfrage an die Test-IP-Adresse und prüfen Sie dann, ob Sie die richtige Instanz erreicht haben:

      curl IP_ADDRESS:PRODUCER_PORT
      

      Ersetzen Sie dabei Folgendes:

      • IP_ADDRESS: die IP-Adresse Ihrer Test-VMs.
      • PRODUCER_PORT ist der Port, den Sie für Ihre Produktionstest-VM konfiguriert haben