Gestire la sovrapposizione delle destinazioni

Questa pagina descrive come gli amministratori di rete producer possono gestire la sovrapposizione delle 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 una configurazione aggiuntiva 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.

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 del produttore deve essere in grado di raggiungere 10.0.1.5 in entrambe le reti.

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

Per gestire la sovrapposizione delle destinazioni puoi utilizzare anche i seguenti approcci, ma non sono descritti in questa pagina:

  • Utilizza una libreria di 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 del producer sono solo per gli endpoint API proprietari, puoi configurare l'accesso privato Google per gli host on-premise.
  • Utilizza il virtual routing and forwarding (VRF) per isolare gli spazi di indirizzi IP sovrapposti. Assegna un'istanza VRF a ogni interfaccia Private Service Connect. Configura le 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 per i casi in cui le opzioni precedenti non sono fattibili.

Gestire 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 su una VM producer devono accedere solo ai carichi di lavoro consumer e altre applicazioni sulla VM producer devono accedere solo ai carichi di lavoro 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. Trova il nome del sistema operativo guest della tua interfaccia Private Service Connect.

  3. Per creare uno spazio dei nomi di rete per il traffico destinato ai consumatori, utilizza il seguente comando:

    sudo ip netns add consumer-ns
    
  4. Sposta l'interfaccia 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 guest per l'interfaccia Private Service Connect che hai trovato in un passaggio precedente.

  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 apportate all'interfaccia Private Service Connect:

    sudo ip netns exec consumer-ns ip a
    

    Verifica che il nome del sistema operativo guest dell'interfaccia Private Service Connect sia elencato nell'output del comando. Verifica che l'interfaccia abbia l'indirizzo IP 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 Private Service Connect.

  8. Aggiungi una route predefinita per l'interfaccia 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 sovrapposto, segui questi passaggi:

    1. Assicurati che le regole firewall siano configurate per consentire il traffico ICMP in entrata alle tue VM di destinazione.

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

      sudo ip netns exec consumer-ns ping CONSUMER_IP_ADDRESS
      

      Sostituisci CONSUMER_IP_ADDRESS con l'indirizzo IP di una VM consumer dall'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 sovrapposto. Utilizza lo spazio dei nomi predefinito:

      ping PRODUCER_IP_ADDRESS
      

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

Gestire la sovrapposizione degli indirizzi di destinazione con 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 sia nelle reti VPC consumer che in quelle 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 destinato a una di queste porte passa attraverso l'interfaccia Private Service Connect alla subnet consumer, mentre l'altro traffico passa attraverso l'interfaccia predefinita alla subnet producer.

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

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

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

  4. Crea una tabella di routing. Aggiungi una route predefinita per l'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 dell'interfaccia Private Service Connect, ad esempio ens5.

  5. Aggiungi una route all'intervallo di subnet consumer sovrapposto 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 Private Service Connect.
  6. Aggiorna la tabella di routing in modo che i pacchetti in uscita da questa VM utilizzino l'indirizzo IP dell'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 tua VM consumer.

  8. Per verificare che un pacchetto venga indirizzato alla VM corretta in base alla porta di destinazione:

    1. Crea VM di test nelle reti di produttori e consumatori che utilizzano lo stesso indirizzo IP dell'intervallo sovrapposto.
    2. Configura un server HTTP su ogni VM di test. Configura la VM di test consumer in modo che ascolti sulla porta che hai configurato per l'applicazione consumer. Configura la VM di test del produttore in modo che ascolti su una porta diversa da quella configurata per l'applicazione consumer.
    3. Assicurati che le regole firewall siano configurate per consentire il traffico HTTP alle VM di test.
    4. Utilizzando 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 dell'applicazione consumer.
    5. Utilizzando la porta che hai configurato per la VM di test di produzione, effettua una richiesta GET all'indirizzo IP di test e 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.