La connexion à une instance ApsaraDB RDS échoue et le message d'erreur Destination Host Unreachable s'affiche lorsque vous exécutez la commande ping sur le point de terminaison interne de l'instance RDS.
description du problème
Vous ne parvenez pas à exécuter la commande ping sur le point de terminaison interne de l'instance RDS depuis une instance Elastic Compute Service (ECS) et le système renvoie le message Destination Host Unreachable.
PING rm-bpxxxx.mysql.rds.aliyuncs.com (172.17.0.31) 56(84) bytes of data.
From xxxx (172.17.0.1) icmp_seq=1 Destination Host Unreachable
From xxxx (172.17.0.1) icmp_seq=2 Destination Host Unreachable
From xxxx (172.17.0.1) icmp_seq=3 Destination Host Unreachable
Causes
Dans la plupart des cas, le bloc CIDR interne de l'instance RDS entre en conflit avec le bloc CIDR d'un autre service.
Analyse
Exécutez la commande PING sur le point de terminaison interne de l'instance RDS pour afficher son adresse IP privée. Dans l'exemple précédent, l'adresse IP privée de l'instance RDS est
172.17.0.31.-
Cet exemple utilise un système d'exploitation Linux. Exécutez la commande
route-npour afficher les routes. Le résultat ressemble à ce qui suit :Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.17.2.253 0.0.0.0 UG 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 172.17.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br-350b446c181aLe résultat indique que le bloc CIDR de la carte réseau (NIC)
br-350b446c181aest172.17.0.0/24, ce qui entre en conflit avec l'adresse IP privée de l'instance RDS. Par conséquent, l'instance ECS ne peut pas acheminer le trafic vers l'instance RDS.Ce problème survient généralement parce que le bloc CIDR du service de conteneur entre en conflit avec le bloc CIDR d'ApsaraDB RDS. L'exemple suivant utilise un service de conteneur pour expliquer comment résoudre un conflit de routage.
Solutions
Solution 1 : modifiez le bloc CIDR par défaut du service de conteneur
Cette solution ne s'applique pas aux instances ApsaraDB RDS for SQL Server. Si votre instance RDS exécute SQL Server, suivez la solution 2.
L'arrêt de Docker ou la modification du bloc CIDR par défaut de Docker interrompt vos services. Effectuez cette opération pendant les heures creuses.
Lorsque vous modifiez le bloc CIDR par défaut de Docker, assurez-vous qu'il est compatible avec les paramètres réseau de tous les conteneurs et applications existants afin d'éviter d'éventuels problèmes de connectivité.
Cet exemple utilise un système d'exploitation Linux. Procédez comme suit :
-
Arrêtez le service Docker.
sudo systemctl stop docker -
Modifiez le fichier de configuration Docker. En général, le fichier de configuration Docker se trouve à l'emplacement
/etc/docker/daemon.jsonou/etc/docker/daemon.conf. Le nom du fichier peut varier.sudo vim /etc/docker/daemon.jsonAssurez-vous que le fichier contient le contenu suivant :
{ "bip": "New CIDR block" }Par exemple, définissez le nouveau bloc CIDR sur 192.168.0.0/16.
Enregistrez et fermez le fichier de configuration.
-
Démarrez le service Docker pour que les modifications prennent effet.
sudo systemctl start docker
Solution 2 : changez le vSwitch de l'instance RDS
Vous pouvez changer le vSwitch de l'instance RDS afin que le bloc CIDR du vSwitch n'entre pas en conflit avec le bloc CIDR du service de conteneur.
Par défaut, les différents virtual private clouds (VPC) ne peuvent pas communiquer entre eux via un réseau interne. Il est recommandé de changer uniquement le vSwitch et non le VPC. Ainsi, les connexions au réseau interne entre les autres services Alibaba Cloud et l'instance RDS ne sont pas affectées.