Não consigo me conectar a uma instância ApsaraDB RDS e a mensagem de erro "Destination Host Unreachable" é exibida ao executar ping no endpoint interno da instância.
Descrição do problema
O endpoint interno da instância RDS não responde a ping a partir de uma instância Elastic Compute Service (ECS) e exibe a mensagem de erro "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
O bloco CIDR interno da instância RDS entra em conflito com o bloco CIDR de outro serviço.
Análise do problema
Execute ping no endpoint interno da instância RDS para obter o endereço IP privado. Neste exemplo, o endereço IP privado da instância é 172.17.0.31.
-
Execute o comando
route-npara visualizar a rota em um sistema Linux. Este exemplo utiliza um sistema Linux. As seguintes informações são retornadas: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 do comando mostra que o bloco CIDR da NIC br-350b446c181a é 172.17.0.0/24 e entra em conflito com o endereço IP privado da instância RDS. Consequentemente, o tráfego da instância ECS não consegue ser roteado para a instância RDS.
Geralmente, a causa é o conflito entre o bloco CIDR de um serviço de contêiner e o da instância RDS. A seção a seguir descreve como resolver conflitos de rota em um serviço de contêiner.
Soluções
Solução 1: Modifique o bloco CIDR padrão do serviço de contêiner
Esta solução não é adequada para instâncias RDS for SQL Server. Se sua instância RDS executa SQL Server, consulte Solução 2: Altere o vSwitch da instância RDS.
Interromper o serviço Docker ou alterar seu bloco CIDR padrão causa interrupção nos serviços. Execute essa operação fora do horário de pico.
Ao alterar o bloco CIDR padrão do serviço Docker, garanta que o novo bloco seja compatível com as configurações de rede dos contêineres e aplicativos existentes para evitar problemas de conectividade.
Este exemplo utiliza Linux.
-
Interrompa o serviço Docker.
sudo systemctl stop docker -
Modifique o arquivo de configuração do serviço Docker. Geralmente, esse arquivo está salvo em /etc/docker/daemon.json ou /etc/docker/daemon.conf. O nome do arquivo pode variar.
sudo vim /etc/docker/daemon.jsonUse o seguinte trecho de código:
{ "bip": "New CIDR block" }Neste exemplo, utiliza-se o bloco CIDR 192.168.0.0/16.
Salve e feche o arquivo de configuração.
-
Inicie o serviço Docker para aplicar a modificação.
sudo systemctl start docker
Solução 2: Altere o vSwitch da instância RDS
Altere o vSwitch da instância RDS para garantir que seu bloco CIDR não entre em conflito com o do serviço de contêiner.
Por padrão, diferentes virtual private clouds (VPCs) não se comunicam pela rede interna. Não altere a VPC da instância RDS para preservar as conexões de rede interna entre a instância RDS e outros serviços Alibaba Cloud.
Solução
Alterar o vSwitch da instância RDS
Altere o vSwitch da instância RDS para assegurar que seu bloco CIDR não entre em conflito com o do serviço de contêiner. Para mais informações, consulte Trocar um vSwitch.
Por padrão, diferentes virtual private clouds (VPCs) não se comunicam pela rede interna. Não altere a VPC da instância RDS para preservar as conexões de rede interna entre a instância RDS e outros serviços Alibaba Cloud.
Para obter mais informações sobre como alterar o vSwitch de instâncias RDS que executam outros mecanismos, consulte a seguinte documentação: