Gestire la sovrapposizione delle destinazioni

Questa pagina descrive in che modo gli amministratori di reti 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 sottoreti 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 l'interferenza delle destinazioni, si possono 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 in sovrapposizione lato 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 possibili.

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 approccio funziona bene quando alcune applicazioni su una VM di produzione devono solo accedere ai carichi di lavoro dei consumatori e altre applicazioni sulla VM di produzione devono solo accedere ai carichi di lavoro dei produttori.

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 l'interfaccia Private Service Connect, ad esempio 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 nello spazio dei nomi della 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 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 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'interfaccia abbia l'indirizzo IP corretto.

  7. Aggiungi un percorso 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 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 dell'intervallo di indirizzi IP in sovrapposizione.

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

      ping PRODUCER_IP_ADDRESS
      

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

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

Puoi gestire l'accavallamento 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 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 di consumo. Il traffico destinato a una di queste porte passa tramite l'interfaccia Private Service Connect alla subnet consumer, mentre l'altro traffico passa tramite 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 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 dei consumatori in sovrapposizione 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 del consumatore.
    • GATEWAY_IP: il indirizzo IP del gateway predefinito per la sottorete 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 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 della tua applicazione per i consumatori:

    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 venga indirizzato alla VM corretta in base alla porta di destinazione, procedi nel seguente modo:

    1. Crea VM di test nelle reti di produttori e consumatori che utilizzano entrambe lo stesso indirizzo IP dell'intervallo sovrapposto.
    2. Configura un server HTTP su ogni VM di test. Configura la VM di test del consumatore in modo che ascolti sulla porta che hai configurato 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 per consentire il traffico HTTP alle 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, effettua 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 che hai configurato per la VM di test di produzione.