Ao executar ping no endpoint interno de uma instância ApsaraDB RDS a partir de uma instância Elastic Compute Service (ECS), você recebe Destination Host Unreachable em vez de uma resposta normal. Esse erro indica um conflito de roteamento na instância ECS: o bloco CIDR de uma interface de rede local se sobrepõe ao endereço IP privado da instância RDS, impedindo que o tráfego chegue ao RDS. O problema não é causado pelo bloqueio de ICMP pelo RDS.
A causa mais comum desse conflito é uma rede bridge do Docker. As seções a seguir explicam como diagnosticar e resolver essa situação.
Diagnosticar o conflito
-
Execute ping no endpoint interno para obter o endereço IP privado da instância RDS.
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 UnreachableNeste exemplo, o endereço IP privado é
172.17.0.31. -
Execute
route -nna instância ECS para visualizar a tabela de roteamento.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 a interface de rede
br-350b446c181apossui o bloco CIDR172.17.0.0/24, que se sobrepõe ao endereço IP privado da instância RDS172.17.0.31. O tráfego destinado ao RDS corresponde incorretamente a essa rota local e nunca chega à instância RDS.
Resolver o conflito
Escolha uma das soluções a seguir.
Solução 1: Alterar o bloco CIDR da bridge do Docker
Altere o bloco CIDR da bridge padrão do Docker para um que não se sobreponha ao endereço IP privado da instância RDS.
Parar o serviço Docker interrompe contêineres e aplicativos em execução. Realize essa operação fora do horário de pico. Verifique se o novo bloco CIDR é compatível com seus contêineres e aplicativos existentes antes de aplicar a alteração.
-
Pare o serviço Docker.
sudo systemctl stop docker -
Edite o arquivo de configuração do daemon do Docker. Geralmente, o arquivo é
/etc/docker/daemon.jsonou/etc/docker/daemon.conf.sudo vim /etc/docker/daemon.json -
Defina o campo
bipcom um novo bloco CIDR que não entre em conflito com sua instância RDS. Por exemplo:{ "bip": "192.168.0.0/16" } Salve e feche o arquivo.
-
Inicie o serviço Docker.
sudo systemctl start docker Execute ping novamente no endpoint interno do RDS. Se
Destination Host Unreachablenão aparecer mais, o conflito de roteamento foi resolvido. Para verificar a conectividade completa, consulte Próximos passos.
Solução 2: Alterar o vSwitch da instância RDS
Mude a instância RDS para um vSwitch cujo bloco CIDR não se sobreponha à rede bridge do Docker.
Não altere a virtual private cloud (VPC) da instância RDS. Por padrão, VPCs diferentes não se comunicam pela rede interna, e alterar a VPC interrompe as conexões internas existentes entre o RDS e outros serviços Alibaba Cloud.
Selecione o guia correspondente ao seu mecanismo de banco de dados:
Próximos passos
Após resolver o conflito, verifique a conectividade conectando-se à instância RDS a partir da instância ECS: