Esse erro ocorre quando o bloco CIDR da sua instância do Elastic Compute Service (ECS) ou do contêiner docker se sobrepõe ao bloco CIDR atribuído à instância Tair. Como a tabela de roteamento do cliente resolve o IP de destino localmente em vez de encaminhá-lo ao Tair, os pacotes nunca chegam à instância.
Sintoma
O ping para o endpoint interno de uma instância Tair a partir de uma instância ECS ou contêiner docker falha com a seguinte saída:
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
Diagnosticar o conflito
Confirme o conflito de CIDR antes de aplicar uma correção.
Execute ping no endpoint interno para obter o endereço IP interno da instância Tair. No exemplo acima, o endereço IP interno é
172.17.0.31.-
Verifique a tabela de roteamento do cliente. Em um contêiner docker baseado em Linux, execute:
route -nA saída será semelhante a:
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-350b446c181aNeste exemplo, a interface de rede (NIC)
br-350b446c181adetém o bloco CIDR172.17.0.0/24. Como o endereço172.17.0.31está dentro desse intervalo, o docker roteia os pacotes para a bridge local em vez de encaminhá-los ao Tair.
Soluções
Resolva o conflito alterando a configuração de rede no lado do cliente ou na instância Tair.
Solução 1: Alterar o bloco CIDR padrão da bridge do docker
Reconfigure a bridge padrão do docker para usar um bloco CIDR sem sobreposição. Este exemplo aplica-se a um host docker Linux que usa a bridge docker0 padrão.
Parar o docker ou alterar seu bloco CIDR interrompe os contêineres em execução. Execute essa operação fora do horário de pico e verifique se o novo bloco CIDR não entra em conflito com contêineres ou aplicativos existentes.
-
Pare o serviço do docker.
sudo systemctl stop docker -
Abra o arquivo de configuração do daemon do docker. Geralmente, o arquivo está localizado em
/etc/docker/daemon.json(o nome do arquivo pode variar).sudo vim /etc/docker/daemon.jsonFaça backup do arquivo original antes de fazer alterações.
-
Adicione o parâmetro
bipcom um bloco CIDR que não se sobreponha a172.17.0.31. Por exemplo:{ "bip": "192.168.0.1/24" }O parâmetro
bipdefine o endereço IP e a sub-rede da bridgedocker0. Todos os contêineres na bridge padrão recebem endereços dessa sub-rede. Salve e feche o arquivo.
-
Inicie o serviço do docker para aplicar a alteração.
sudo systemctl start docker
Solução 2: Alterar o vSwitch da instância Tair
Alterar o vSwitch da instância Tair para um cujo bloco CIDR não se sobreponha ao bloco CIDR do cliente.
Como VPCs diferentes não se comunicam por redes internas, só é possível mudar para um vSwitch dentro da mesma VPC. A alteração do vSwitch causa uma interrupção transitória de conexão de cerca de 30 segundos. Execute essa operação fora do horário de pico e certifique-se de que o aplicativo tenha um mecanismo de reconexão automática.