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.
Puoi gestire gli intervalli di indirizzi IP di destinazione sovrapposti nei modi descritti di seguito, descritti in dettaglio in questa pagina:
- Utilizza gli spazi dei nomi di rete per creare tabelle di routing separate per ogni applicazione.
- Applica il routing basato su criteri alla VM della tua interfaccia per indirizzare il traffico in base alle porte di destinazione.
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:
Connettiti alla VM che ha la tua interfaccia Private Service Connect.
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.Crea uno spazio dei nomi di rete per il traffico legato al consumer:
sudo ip netns add consumer-ns
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 esempioens5
.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.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.
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.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
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
Per verificare che l'interfaccia possa raggiungere le VM in ogni parte dell'intervallo di indirizzi IP che si sovrappone:
Assicurati che le regole firewall siano configurate in modo da consentire il traffico
ICMP
in entrata verso le VM di destinazione.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.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.
Connettiti alla VM dell'interfaccia di Private Service Connect.
Se il comando
iproute2
non è disponibile, installalo.Assicurati di poter scrivere nel seguente file:
/etc/iproute2/rt_tables
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 esempioens5
.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.
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.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.Per verificare che un pacchetto sia instradato alla VM corretta in base alla porta di destinazione, segui questi passaggi:
- Crea VM di test nelle reti producer e consumer che utilizzano entrambe lo stesso indirizzo IP nell'intervallo in sovrapposizione.
- 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.
- Assicurati che le regole firewall siano configurate in modo da consentire il traffico HTTP verso le VM di test.
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.
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.