Gérer le chevauchement de destination
Cette page décrit comment les administrateurs de réseau producteur peuvent gérer le chevauchement de la destination dans un réseau cloud privé virtuel (VPC) utilisant une interface Private Service Connect.
Google Cloud garantit que les plages d'adresses IP des sous-réseaux attribuées aux interfaces réseau sur la même instance de machine virtuelle (VM) ne peuvent pas chevaucher des plages d'adresses IP. Toutefois, les sous-réseaux des réseaux VPC utilisateur et producteur peuvent se chevaucher, comme illustré à la figure 1. Lorsque vous utilisez une interface Private Service Connect avec des plages d'adresses IP de destination qui se chevauchent, une configuration supplémentaire est nécessaire pour vous assurer que le trafic atteint la bonne destination dans le réseau prévu.
Les commandes décrites sur cette page montrent comment mettre à jour temporairement le routage pour une VM qui utilise le système d'exploitation Debian. Pour mettre à jour la VM de manière permanente ou pour configurer une VM dotée d'un système d'exploitation différent, consultez la documentation publique du système d'exploitation.
Vous pouvez gérer le chevauchement des plages d'adresses IP de destination de différentes manières, décrites en détail sur cette page :
- Utilisez des espaces de noms réseau pour créer des tables de routage distinctes pour chaque application.
- Appliquez le routage basé sur des règles à la VM de votre interface pour diriger le trafic en fonction des ports cibles.
Les approches suivantes peuvent également être utilisées pour gérer le chevauchement des destinations, mais elles ne sont pas décrites sur cette page :
- Utilisez une bibliothèque de sockets et
bind()
pour contrôler le routage. - Utilisez un espace d'adresses IP qui ne se chevauche pas pour le réseau producteur.
- Si les adresses IP qui se chevauchent côté producteur ne concernent que les points de terminaison d'API propriétaires, vous pouvez configurer l'accès privé à Google pour les hôtes sur site.
- Utilisez le routage et le transfert virtuels (VRF) pour isoler les espaces d'adresses IP qui se chevauchent. Attribuez une instance VRF à chaque interface Private Service Connect. Configurez des routes par défaut pour chaque instance VRF pour vous assurer que le trafic atteint la destination prévue.
- Utilisez eBPF pour personnaliser les règles de routage avancées en fonction de critères autres que l'adresse IP. Cette approche est recommandée lorsque les options précédentes ne sont pas réalisables.
Gérer le chevauchement des adresses de destination à l'aide des espaces de noms réseau
Vous pouvez gérer le chevauchement des adresses de destination à l'aide d'espaces de noms réseau. Cette approche fonctionne bien lorsque certaines applications d'une VM de producteur n'ont besoin d'accéder qu'aux charges de travail des consommateurs, et que d'autres applications sur la VM du producteur n'ont besoin d'accéder qu'aux charges de travail du producteur.
Pour gérer le chevauchement des adresses de destination à l'aide d'espaces de noms réseau, procédez comme suit :
Connectez-vous à la VM qui contient votre interface Private Service Connect.
Exécutez la commande ci-dessous.
ip address
Dans la liste des interfaces réseau, recherchez et notez le nom du système d'exploitation invité de votre interface Private Service Connect, par exemple
ens5
. Ce nom est associé à l'adresse IP de votre interface Private Service Connect.Créez un espace de noms réseau pour le trafic lié au client :
sudo ip netns add consumer-ns
Déplacez l'interface Private Service Connect vers l'espace de noms du réseau utilisateur. Exécutez les commandes suivantes individuellement :
sudo ip link set OS_INTERFACE_NAME netns consumer-ns
sudo ip netns exec consumer-ns ip link set OS_INTERFACE_NAME up
Remplacez
OS_INTERFACE_NAME
par le nom du système d'exploitation invité de votre interface Private Service Connect, que vous avez trouvé à l'étape 2, par exempleens5
.Restaurez l'adresse IP de l'interface Private Service Connect :
sudo ip netns exec consumer-ns ip addr add INTERFACE_IP/32 dev OS_INTERFACE_NAME
Remplacez
INTERFACE_IP
par l'adresse IP de votre interface Private Service Connect.Validez les modifications apportées à votre interface Private Service Connect :
sudo ip netns exec consumer-ns ip a
Assurez-vous que le nom du système d'exploitation invité de votre interface Private Service Connect est répertorié dans le résultat de la commande. Vérifiez que l'interface a la bonne adresse IP.
Ajoutez une route à l'adresse IP de la passerelle :
sudo ip netns exec consumer-ns ip route add GATEWAY_IP dev OS_INTERFACE_NAME scope link
Remplacez
GATEWAY_IP
par l'adresse IP de la passerelle par défaut pour le sous-réseau de votre interface Private Service Connect.Ajoutez une route par défaut pour votre interface Private Service Connect :
sudo ip netns exec consumer-ns ip route add default via GATEWAY_IP dev OS_INTERFACE_NAME
Validez la table de routage pour l'espace de noms
consumer-ns
:sudo ip netns exec consumer-ns ip route
Assurez-vous que la table de routage contient une entrée au format suivant :
default via GATEWAY_IP dev OS_INTERFACE_NAME
Pour vérifier que votre interface peut atteindre les VM depuis chaque partie de la plage d'adresses IP qui se chevauche, procédez comme suit:
Assurez-vous que les règles de pare-feu sont configurées pour autoriser le trafic
ICMP
entrant vers vos VM cibles.Envoyez un ping
ICMP
à partir de la VM de votre interface vers une VM utilisateur située dans la plage d'adresses IP en chevauchement. Utilisez votre espace de noms de consommateur :sudo ip netns exec consumer-ns ping CONSUMER_IP_ADDRESS
Remplacez
CONSUMER_IP_ADDRESS
par l'adresse IP d'une VM utilisateur de la plage d'adresses IP en chevauchement.Envoyez un ping
ICMP
depuis la VM de votre interface vers une VM de producteur qui se trouve dans la plage d'adresses IP en chevauchement. Utilisez l'espace de noms par défaut :ping PRODUCER_IP_ADDRESS
Remplacez
PRODUCER_IP_ADDRESS
par l'adresse IP d'une VM productrice de la plage d'adresses IP en chevauchement.
Gérer le chevauchement des adresses de destination à l'aide du routage basé sur des règles
Vous pouvez gérer le chevauchement des adresses de destination en configurant le routage basé sur des règles sur le système d'exploitation de la VM de votre interface. Cette approche fonctionne bien lorsque la même application doit accéder aux charges de travail des réseaux VPC consommateur et producteur, mais vous devez répéter la procédure pour chaque port que vous souhaitez atteindre dans le cadre du chevauchement de la plage d'adresses IP.
Lorsque vous configurez le routage basé sur des règles pour gérer le chevauchement de destination, vous choisissez les ports cibles à utiliser pour les applications utilisateur. Le trafic lié à l'un de ces ports transite par votre interface Private Service Connect vers le sous-réseau utilisateur, tandis que l'autre trafic transite par l'interface par défaut vers le sous-réseau producteur.
Connectez-vous à la VM de votre interface Private Service Connect.
Si la commande
iproute2
n'est pas disponible, installez-la.Assurez-vous de pouvoir écrire dans le fichier suivant :
/etc/iproute2/rt_tables
Créez une table de routage. Ajoutez une route par défaut pour votre interface Private Service Connect :
echo "200 pscnet" >> /etc/iproute2/rt_tables \ sudo ip route add default dev OS_INTERFACE_NAME table pscnet
Remplacez
OS_INTERFACE_NAME
par le nom du système d'exploitation invité de votre interface Private Service Connect, par exempleens5
.Ajoutez une route à la plage de sous-réseau utilisateur en chevauchement via votre passerelle par défaut:
sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME table pscnet
Remplacez les éléments suivants :
CONSUMER_SUBNET_RANGE
: plage d'adresses IP de votre sous-réseau utilisateur.GATEWAY_IP
: adresse IP de la passerelle par défaut pour le sous-réseau de votre interface Private Service Connect.
Mettez à jour la table de routage de sorte que les paquets de sortie de cette VM utilisent l'adresse IP de votre interface comme adresse IP source :
sudo ip route add GATEWAY_IP src INTERFACE_IP dev OS_INTERFACE_NAME table pscnet
Remplacez
INTERFACE_IP
par l'adresse IP de votre interface Private Service Connect.Ajoutez une règle IP qui s'applique à tout le trafic destiné au port cible de votre application utilisateur :
sudo ip rule add dport CONSUMER_PORT table pscnet
Remplacez
CONSUMER_PORT
par le port que vous avez configuré pour le trafic vers votre VM utilisateur.Pour vérifier qu'un paquet est acheminé vers la VM appropriée en fonction de son port de destination, procédez comme suit :
- Créez des VM de test dans les réseaux producteur et utilisateur qui utilisent tous les deux la même adresse IP de la plage de chevauchement.
- Configurez un serveur HTTP sur chaque VM de test. Configurez la VM utilisateur de test pour écouter le port que vous avez configuré pour l'application utilisateur. Configurez la VM de test du producteur pour écouter sur un port différent de celui que vous avez configuré pour l'application utilisateur.
- Assurez-vous que des règles de pare-feu sont configurées pour autoriser le trafic HTTP vers vos VM de test.
À l'aide du port que vous avez configuré pour votre application utilisateur, envoyez une requête
GET
à l'adresse IP de test, puis vérifiez que vous avez atteint l'instance appropriée:curl TEST_IP_ADDRESS:CONSUMER_PORT
Remplacez les éléments suivants :
TEST_IP_ADDRESS
: adresse IP de vos VM de test.CONSUMER_PORT
: port de votre application utilisateur.
À l'aide du port que vous avez configuré pour votre VM de production test, envoyez une requête
GET
à l'adresse IP de test, puis vérifiez que vous avez atteint la bonne instance:curl IP_ADDRESS:PRODUCER_PORT
Remplacez les éléments suivants :
IP_ADDRESS
: adresse IP de vos VM de test.PRODUCER_PORT
: port que vous avez configuré pour votre VM de production test.