Gestire la sovrapposizione delle destinazioni

Questa pagina descrive in che modo gli amministratori di rete del producer possono gestire che si sovrappongono in una rete Virtual Private Cloud (VPC) che utilizza un'interfaccia Private Service Connect.

Google Cloud assicura che gli intervalli di indirizzi IP delle subnet assegnate alle interfacce di rete sulla stessa istanza di macchina virtuale (VM) non può che si sovrappongono a intervalli di indirizzi IP. Tuttavia, le subnet nelle reti VPC consumer e producer possono sovrapporsi, come mostrato nella figura 1. Quando utilizzi un'interfaccia di Private Service Connect con sovrapposizioni di indirizzi IP di destinazione, è necessaria un'ulteriore configurazione per 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 oppure per per configurare una VM che ha un sistema operativo diverso, documentazione pubblica del sistema.

Subnet-a in un produttore La rete VPC si sovrappone a subnet-c in una rete VPC consumer perché entrambe le subnet utilizzano lo stesso di indirizzi IP esterni. 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:

Gli approcci riportati di seguito possono essere utilizzati anche per gestire la sovrapposizione delle destinazioni, ma non sono descritte 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 produttore.
  • Se gli indirizzi IP in sovrapposizione lato producer sono solo per gli endpoint API proprietari, puoi configurare l'accesso privato Google per gli host on-premise.
  • Utilizzare routing e forwarding virtuale (VRF) per isolare gli indirizzi IP che si sovrappongono spazi di archiviazione. Assegna un'istanza VRF a ogni interfaccia Private Service Connect. Configura route predefinite per ogni istanza VRF per garantire 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 i casi in cui le opzioni precedenti non sono attuabili.

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

Puoi gestire l'interferenza degli indirizzi di destinazione utilizzando gli spazi dei nomi di rete. Questo funziona bene quando alcune applicazioni su una VM producer devono l'accesso ai carichi di lavoro consumer e ad altre applicazioni sulla VM producer per accedere ai carichi di lavoro dei producer.

Per gestire l'accavallamento 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 prendi nota del nome del sistema operativo guest per ad esempio l'interfaccia di Private Service Connect, ens5. Questo nome è associato all'indirizzo IP dell'interfaccia Private Service Connect.

  3. Crea uno spazio dei nomi di rete per il traffico destinato ai consumatori:

    sudo ip netns add consumer-ns
    
  4. Sposta l'interfaccia Private Service Connect nell'ambito del consumer nome della rete. 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 di Private Service Connect 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 del tuo Interfaccia di Private Service Connect.

  6. Convalida le modifiche a Private Service Connect dell'interfaccia:

    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'interfaccia ha 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 del seguente tipo:

    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:

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

    2. Invia un ping ICMP dalla VM della tua interfaccia a una VM consumer che si trova in nell'intervallo di indirizzi IP sovrapposti. 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 dell'intervallo di indirizzi IP in sovrapposizione.

    3. Invia un ping ICMP dalla VM della tua interfaccia a una VM producer che si trova in 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 sovrapposti.

Gestisci 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 ai carichi di lavoro presenti sia nella rete VPC consumer sia in quella 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 e le porte di destinazione da utilizzare per le applicazioni consumer. Traffico diretto a uno di queste porte passano attraverso il tuo Private Service Connect verso la subnet consumer, mentre il resto del traffico passa attraverso alla subnet del 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. Creare una tabella di route. 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 l'intervallo predefinito gateway:

    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 del tuo nella subnet consumer.
    • GATEWAY_IP: il Indirizzo IP del gateway predefinito per la subnet dell'interfaccia 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 del tuo Interfaccia di Private Service Connect.

  7. Aggiungi una regola IP che si applichi a tutto il traffico destinato alla porta di destinazione della tua applicazione per i consumatori:

    sudo ip rule add dport CONSUMER_PORT table pscnet
    

    Sostituisci CONSUMER_PORT con la porta a tua disposizione e configurato per il traffico sulla VM consumer.

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

    1. Creare VM di test nelle reti producer e consumer che utilizzano entrambi lo stesso indirizzo IP dell'intervallo sovrapposto.
    2. Configurare un server HTTP su ogni VM di test. Configura la VM di test consumer su rimanere in ascolto sulla porta configurata per l'applicazione consumer. Configura la VM di test del produttore in modo che esegua l'ascolto su una porta diversa da quella configurata per l'applicazione consumer.
    3. Assicurati che le regole firewall siano configurate su e consentire il traffico HTTP sulle VM di test.
    4. Utilizzando la porta che hai configurato per l'applicazione consumer, effettua una richiesta GET all'indirizzo IP di test e 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. Utilizza la porta che hai configurato per la VM di test di produzione, invia una richiesta GET all'indirizzo IP di test e poi verifica di avere 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 per cui hai eseguito la configurazione la VM di test in produzione.