La conexión a una instancia de ApsaraDB RDS falla y se muestra el mensaje de error Destination Host Unreachable al hacer ping al endpoint interno de la instancia de RDS.
Descripción del problema
No es posible hacer ping al endpoint interno de la instancia de RDS desde una instancia de Elastic Compute Service (ECS). El sistema devuelve 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
Causas
En la mayoría de los casos, el bloque CIDR interno de la instancia de RDS entra en conflicto con el bloque CIDR de otro servicio.
Análisis
Ejecute el comando PING para hacer ping al endpoint interno de la instancia de RDS y consultar su dirección IP privada. En el ejemplo anterior, la dirección IP privada de la instancia de RDS es
172.17.0.31.-
Este ejemplo utiliza un sistema operativo Linux. Ejecute el comando
route-npara consultar las rutas. Se devuelve un resultado similar al siguiente: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-350b446c181aEl resultado muestra que el bloque CIDR de la tarjeta de interfaz de red (NIC)
br-350b446c181aes172.17.0.0/24, lo cual entra en conflicto con la dirección IP privada de la instancia de RDS. Por esta razón, la instancia de ECS no puede enrutar el tráfico hacia la instancia de RDS.En la mayoría de los casos, este problema ocurre porque el bloque CIDR del servicio de contenedores entra en conflicto con el bloque CIDR de ApsaraDB RDS. A continuación se utiliza un servicio de contenedores como ejemplo para explicar cómo resolver un conflicto de rutas.
Soluciones
Solución 1: Modifique el bloque CIDR predeterminado del servicio de contenedores
Esta solución no aplica a las instancias de ApsaraDB RDS for SQL Server. Si su instancia de RDS ejecuta SQL Server, siga la Solución 2.
Detener Docker o modificar el bloque CIDR predeterminado de Docker interrumpe sus servicios. Realice esta operación fuera del horario de mayor demanda.
Cuando modifique el bloque CIDR predeterminado de Docker, asegúrese de que sea compatible con la configuración de red de todos los contenedores y aplicaciones existentes para evitar posibles problemas de conectividad.
Este ejemplo utiliza un sistema operativo Linux. Siga estos pasos:
-
Detenga el servicio de Docker.
sudo systemctl stop docker -
Edite el archivo de configuración de Docker. En la mayoría de los casos, este archivo se encuentra en
/etc/docker/daemon.jsono/etc/docker/daemon.conf. El nombre del archivo puede variar.sudo vim /etc/docker/daemon.jsonAsegúrese de que el archivo contenga lo siguiente:
{ "bip": "New CIDR block" }Por ejemplo, establezca el nuevo bloque CIDR en 192.168.0.0/16.
Guarde y cierre el archivo de configuración.
-
Inicie el servicio de Docker para que los cambios surtan efecto.
sudo systemctl start docker
Solución 2: Cambie el vSwitch de la instancia de RDS
Puede cambiar el vSwitch de la instancia de RDS para que su bloque CIDR no entre en conflicto con el bloque CIDR del servicio de contenedores.
De forma predeterminada, distintas redes privadas virtuales (VPC) no pueden comunicarse entre sí a través de una red interna. (Recomendado) Cambie únicamente el vSwitch y no modifique la VPC. De esta manera, no se afectan las conexiones de red interna entre otros servicios de Alibaba Cloud y la instancia de RDS.