Este error ocurre cuando el bloque CIDR de su instancia de Elastic Compute Service (ECS) o contenedor docker se superpone con el bloque CIDR asignado a su instancia de Tair. Dado que la tabla de enrutamiento del cliente resuelve la ip de destino localmente en lugar de reenviarla a Tair, los paquetes nunca llegan a la instancia.
Síntoma
Al hacer ping al endpoint interno de una instancia de Tair from una instancia de ECS o un contenedor docker, la operación falla y muestra el siguiente resultado:
PING r-bp1****l7ein86xv6m.redis.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
Diagnóstico del conflicto
Confirme el conflicto de CIDR antes de aplicar una solución.
Haga ping al endpoint interno para obtener la dirección ip interna de la instancia de Tair. En el ejemplo anterior, la dirección ip interna es
172.17.0.31.-
Revise la tabla de enrutamiento del cliente. En un contenedor docker basado en Linux, ejecute:
route -nEl resultado es 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-350b446c181aEn este ejemplo, la tarjeta de interfaz de red (NIC)
br-350b446c181atiene asignado el bloque CIDR172.17.0.0/24. Como172.17.0.31se encuentra dentro de ese rango, docker enruta los paquetes al puente local en lugar de reenviarlos a Tair.
Soluciones
Resuelva el conflicto al cambiar la configuración de red del lado del cliente o de la instancia de Tair.
Solución 1: Cambiar el bloque CIDR predeterminado del puente de docker
Reconfigure el puente predeterminado de docker para usar un bloque CIDR que no se superponga. Este ejemplo aplica a un host docker en Linux que utiliza el puente docker0 predeterminado.
Detener docker o cambiar su bloque CIDR interrumpe los contenedores en ejecución. Realice esta operación fuera del horario de mayor actividad y compruebe que el nuevo bloque CIDR no entre en conflicto con los contenedores o aplicaciones existentes.
-
Detenga el servicio de docker.
sudo systemctl stop docker -
Abra el archivo de configuración del daemon de docker. Por lo general, el archivo se ubica en
/etc/docker/daemon.json(el nombre del archivo puede variar).sudo vim /etc/docker/daemon.jsonRealice una copia de seguridad del archivo original antes de modificarlo.
-
Agregue el parámetro
bipcon un bloque CIDR que no se superponga con172.17.0.31. Por ejemplo:{ "bip": "192.168.0.1/24" }El parámetro
bipestablece la dirección ip y la subred del puentedocker0. Todos los contenedores en el puente predeterminado reciben direcciones de esta subred. Guarde y cierre el archivo.
-
Inicie el servicio de docker para aplicar el cambio.
sudo systemctl start docker
Solución 2: Cambiar el vSwitch de la instancia de Tair
Cambie el vSwitch de su instancia de Tair por uno cuyo bloque CIDR no se superponga con el bloque CIDR del cliente.
Dado que las distintas VPC no pueden comunicarse a través de redes internas, solo puede cambiar a un vSwitch dentro de la misma VPC. El cambio de vSwitch provoca una interrupción transitoria de la conexión de aproximadamente 30 segundos. Realice esta operación fuera del horario de mayor actividad y asegúrese de que su aplicación cuente con un mecanismo de reconexión automática.