A conexão com uma instância ApsaraDB RDS falha e a mensagem de erro Destination Host Unreachable aparece quando você executa ping no endpoint interno da instância RDS.
Descrição do problema
Não é possível executar ping no endpoint interno da instância RDS a partir de uma instância Elastic Compute Service (ECS), e o sistema retorna 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
Na maioria dos casos, o bloco CIDR interno da instância RDS entra em conflito com o bloco CIDR de outro serviço.
Análise
Execute o comando PING no endpoint interno da instância RDS para visualizar seu endereço IP privado. No exemplo anterior, o endereço IP privado da instância RDS é
172.17.0.31.-
Este exemplo utiliza um sistema operacional Linux. Execute o comando
route-npara visualizar as rotas. Uma saída semelhante à seguinte será retornada: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-350b446c181aA saída mostra que o bloco CIDR da placa de interface de rede (NIC)
br-350b446c181aé172.17.0.0/24, o que gera conflito com o endereço IP privado da instância RDS. Como resultado, a instância ECS não consegue rotear o tráfego para a instância RDS.Geralmente, esse problema ocorre porque o bloco CIDR do serviço de contêiner entra em conflito com o bloco CIDR do ApsaraDB RDS. O exemplo a seguir usa um serviço de contêiner para descrever como resolver um conflito de rota.
Soluções
Solução 1: Modifique o bloco CIDR padrão do serviço de contêiner
Esta solução não se aplica a instâncias ApsaraDB RDS for SQL Server. Se sua instância RDS executa SQL Server, siga a Solução 2.
Parar o Docker ou modificar seu bloco CIDR padrão interrompe seus serviços. Realize essa operação fora do horário de pico.
Ao modificar o bloco CIDR padrão do Docker, garanta a compatibilidade com as configurações de rede de todos os contêineres e aplicações existentes para evitar possíveis problemas de conectividade.
Este exemplo utiliza um sistema operacional Linux. Siga estas etapas:
-
Pare o serviço Docker.
sudo systemctl stop docker -
Edite o arquivo de configuração do Docker. Normalmente, esse arquivo está localizado em
/etc/docker/daemon.jsonou/etc/docker/daemon.conf. O nome do arquivo pode variar.sudo vim /etc/docker/daemon.jsonCertifique-se de que o arquivo contenha o seguinte conteúdo:
{ "bip": "New CIDR block" }Por exemplo, defina o novo bloco CIDR como 192.168.0.0/16.
Salve e feche o arquivo de configuração.
-
Inicie o serviço Docker para que as alterações entrem em vigor.
sudo systemctl start docker
Solução 2: Altere o vSwitch da instância RDS
Altere o vSwitch da instância RDS para que o bloco CIDR do vSwitch não entre em conflito com o bloco CIDR do serviço de contêiner.
Por padrão, diferentes virtual private clouds (VPCs) não conseguem se comunicar entre si pela rede interna. (Recomendado) Altere apenas o vSwitch e mantenha a VPC. Dessa forma, as conexões de rede interna entre outros serviços Alibaba Cloud e a instância RDS permanecem inalteradas.