Gestire la sovrapposizione delle destinazioni

In questa pagina viene descritto in che modo gli amministratori di rete producer possono gestire la sovrapposizione di destinazioni in una rete Virtual Private Cloud (VPC) che utilizza un'interfaccia Private Service Connect.

Google Cloud garantisce che gli intervalli di indirizzi IP delle subnet assegnate alle interfacce di rete sulla stessa istanza di macchina virtuale (VM) non possano avere intervalli di indirizzi IP sovrapposti. Tuttavia, le subnet nelle reti VPC consumer e producer possono sovrapporsi, come mostrato nella figura 1. Quando utilizzi un'interfaccia Private Service Connect con intervalli di indirizzi IP di destinazione sovrapposti, è necessaria un'ulteriore configurazione per garantire che il traffico raggiunga la destinazione corretta nella rete prevista.

I comandi descritti in questa pagina mostrano come aggiornare temporaneamente il routing per una VM che utilizza il sistema operativo Debian. Per aggiornare definitivamente la VM o per configurare una VM con un sistema operativo diverso, consulta la documentazione pubblica del sistema operativo.

Figura 1. Subnet-a in una rete VPC producer si sovrappone a subnet-c in una rete VPC consumer perché entrambe le subnet utilizzano lo stesso intervallo di indirizzi IP. Una VM producer deve poter raggiungere 10.0.1.5 in entrambe le reti.

Puoi gestire gli intervalli di indirizzi IP di destinazione sovrapposti nei modi descritti di seguito, descritti in dettaglio in questa pagina:

Anche gli approcci seguenti possono essere utilizzati per gestire la sovrapposizione delle destinazioni, ma non sono descritti in questa pagina:

  • Utilizza una libreria socket e bind() per controllare il routing.
  • Utilizza uno spazio di indirizzi IP completamente non sovrapposto per la rete del producer.
  • Se gli indirizzi IP sovrapposti sul lato producer riguardano solo gli endpoint API proprietari, puoi configurare l'accesso privato Google per gli host on-premise.
  • Utilizza il routing virtuale e l'inoltro (VRF) per isolare gli spazi di indirizzi IP sovrapposti. Assegna un'istanza VRF a ogni interfaccia Private Service Connect. Configura route predefinite per ogni istanza VRF per assicurarti che il traffico raggiunga la destinazione prevista.
  • Utilizza eBPF per personalizzare le regole di routing avanzate in base a criteri diversi dall'indirizzo IP. Questo approccio è consigliato nei casi in cui le opzioni precedenti non sono attuabili.

Gestisci la sovrapposizione degli indirizzi di destinazione utilizzando gli spazi dei nomi di rete

Puoi gestire la sovrapposizione degli indirizzi di destinazione utilizzando gli spazi dei nomi di rete. Questo approccio funziona bene quando alcune applicazioni sulla VM producer devono accedere solo ai carichi di lavoro consumer, mentre altre applicazioni sulla VM producer devono accedere solo ai carichi di lavoro del producer.

Per gestire la sovrapposizione degli indirizzi di destinazione utilizzando gli spazi dei nomi di rete:

  1. Connettiti alla VM che ha la tua interfaccia Private Service Connect.

  2. Esegui questo comando:

    ip address
    

    Nell'elenco delle interfacce di rete, individua e annota il nome del sistema operativo guest per la tua interfaccia Private Service Connect, ad esempio ens5. Questo nome è associato all'indirizzo IP della tua interfaccia Private Service Connect.

  3. Crea uno spazio dei nomi di rete per il traffico legato al consumer:

    sudo ip netns add consumer-ns
    
  4. Sposta l'interfaccia di Private Service Connect nello spazio dei nomi di rete consumer. Esegui i seguenti comandi singolarmente:

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

    Sostituisci OS_INTERFACE_NAME con il nome del sistema operativo ospite per l'interfaccia di Private Service Connect che hai trovato nel passaggio 2, ad esempio ens5.

  5. Ripristina l'indirizzo IP dell'interfaccia Private Service Connect:

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

    Sostituisci INTERFACE_IP con l'indirizzo IP della tua interfaccia Private Service Connect.

  6. Convalida le modifiche all'interfaccia di Private Service Connect:

    sudo ip netns exec consumer-ns ip a
    

    Assicurati che il nome del sistema operativo guest dell'interfaccia Private Service Connect sia elencato nell'output del comando. Assicurati che l'indirizzo IP dell'interfaccia sia corretto.

  7. Aggiungi una route all'indirizzo IP del gateway:

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

    Sostituisci GATEWAY_IP con l'indirizzo IP del gateway predefinito per la subnet dell'interfaccia di Private Service Connect.

  8. Aggiungi una route predefinita per l'interfaccia di Private Service Connect:

    sudo ip netns exec consumer-ns ip route add default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  9. Convalida la tabella di routing per lo spazio dei nomi consumer-ns:

    sudo ip netns exec consumer-ns ip route
    

    Assicurati che la tabella di routing contenga una voce nel seguente formato:

    default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  10. Per verificare che l'interfaccia possa raggiungere le VM in ogni parte dell'intervallo di indirizzi IP che si sovrappone:

    1. Assicurati che le regole firewall siano configurate in modo da consentire il traffico ICMP in entrata verso le VM di destinazione.

    2. Invia un ping ICMP dalla VM dell'interfaccia a una VM consumer che si trova nell'intervallo di indirizzi IP sovrapposti. Utilizza lo spazio dei nomi consumer:

      sudo ip netns exec consumer-ns ping CONSUMER_IP_ADDRESS
      

      Sostituisci CONSUMER_IP_ADDRESS con l'indirizzo IP di una VM consumer dell'intervallo di indirizzi IP sovrapposto.

    3. Invia un ping ICMP dalla VM dell'interfaccia a una VM producer che si trova nell'intervallo di indirizzi IP sovrapposti. Utilizza lo spazio dei nomi predefinito:

      ping PRODUCER_IP_ADDRESS
      

      Sostituisci PRODUCER_IP_ADDRESS con l'indirizzo IP di una VM producer dall'intervallo di indirizzi IP sovrapposto.

Gestire la sovrapposizione degli indirizzi di destinazione con il routing basato su criteri

Puoi gestire la sovrapposizione degli indirizzi di destinazione configurando il routing basato su criteri sul sistema operativo della VM dell'interfaccia. Questo approccio funziona bene quando la stessa applicazione deve accedere a carichi di lavoro che si trovano nelle reti VPC sia consumer che producer, ma devi ripetere la procedura per ogni porta diversa che vuoi raggiungere nell'intervallo IP sovrapposto.

Quando configuri il routing basato su criteri per gestire la sovrapposizione delle destinazioni, scegli le porte di destinazione da utilizzare per le applicazioni consumer. Il traffico legato a una di queste porte passa attraverso l'interfaccia Private Service Connect verso la subnet consumer, mentre l'altro traffico passa attraverso l'interfaccia predefinita verso la subnet del producer.

  1. Connettiti alla VM dell'interfaccia di Private Service Connect.

  2. Se il comando iproute2 non è disponibile, installalo.

  3. Assicurati di poter scrivere nel seguente file: /etc/iproute2/rt_tables

  4. Creare una tabella di route. Aggiungi una route predefinita per la tua interfaccia Private Service Connect:

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

    Sostituisci OS_INTERFACE_NAME con il nome del sistema operativo guest della tua interfaccia Private Service Connect, ad esempio ens5.

  5. Aggiungi una route all'intervallo di subnet consumer sovrapposta tramite il gateway predefinito:

    sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME table pscnet
    

    Sostituisci quanto segue:

    • CONSUMER_SUBNET_RANGE: l'intervallo di indirizzi IP della subnet consumer.
    • GATEWAY_IP: l'indirizzo IP del gateway predefinito per la subnet dell'interfaccia di Private Service Connect.
  6. Aggiorna la tabella delle route in modo che i pacchetti in uscita da questa VM utilizzino l'indirizzo IP della tua interfaccia come indirizzo IP di origine:

    sudo ip route add GATEWAY_IP src INTERFACE_IP dev OS_INTERFACE_NAME table pscnet
    

    Sostituisci INTERFACE_IP con l'indirizzo IP della tua interfaccia Private Service Connect.

  7. Aggiungi una regola IP che si applichi a tutto il traffico destinato alla porta di destinazione dell'applicazione consumer:

    sudo ip rule add dport CONSUMER_PORT table pscnet
    

    Sostituisci CONSUMER_PORT con la porta che hai configurato per il traffico verso la VM consumer.

  8. Per verificare che un pacchetto sia instradato alla VM corretta in base alla porta di destinazione, segui questi passaggi:

    1. Crea VM di test nelle reti producer e consumer che utilizzano entrambe lo stesso indirizzo IP nell'intervallo in sovrapposizione.
    2. Configurare un server HTTP su ogni VM di test. Configura la VM consumer test per l'ascolto sulla porta che hai configurato per l'applicazione consumer. Configura la VM di test del producer per l'ascolto su una porta diversa da quella che hai impostato per l'applicazione consumer.
    3. Assicurati che le regole firewall siano configurate in modo da consentire il traffico HTTP verso le VM di test.
    4. Utilizza la porta che hai configurato per l'applicazione consumer, invia una richiesta GET all'indirizzo IP di test, quindi verifica di aver raggiunto l'istanza corretta:

      curl TEST_IP_ADDRESS:CONSUMER_PORT
      

      Sostituisci quanto segue:

      • TEST_IP_ADDRESS: l'indirizzo IP delle VM di test.
      • CONSUMER_PORT: la porta della tua applicazione consumer.
    5. Utilizzando la porta che hai configurato per la VM di test di produzione, invia una richiesta GET all'indirizzo IP di test, quindi verifica di aver raggiunto l'istanza corretta:

      curl IP_ADDRESS:PRODUCER_PORT
      

      Sostituisci quanto segue:

      • IP_ADDRESS: l'indirizzo IP delle VM di test.
      • PRODUCER_PORT: la porta che hai configurato per la VM di test di produzione.