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 ping para o endpoint interno da instância RDS falha quando executado a partir de uma instância Elastic Compute Service (ECS), e a mensagem de erro "Destination Host Unreachable" é exibida.
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 service.
Análise do problema
Execute ping no endpoint interno da instância RDS para obter o endereço IP privado da instância. 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 é um conflito entre o bloco CIDR de um service de contêiner e o bloco CIDR da instância RDS. A seção a seguir descreve como resolver conflitos de rota em um service de contêiner.
Soluções
Solução 1: Modifique o bloco CIDR padrão do service 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 Solution 2: Change the vSwitch of the RDS instance.
Parar o service docker ou alterar seu bloco CIDR padrão interrompe os services. Execute essa operação fora do horário de pico.
Ao alterar o bloco CIDR padrão do service docker, certifique-se de 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 o Linux.
-
Pare o service docker.
sudo systemctl stop docker -
Modifique o arquivo de configuração do service docker. Geralmente, o arquivo de configuração 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 service docker para aplicar a modificação.
sudo systemctl start docker
Solução 2: Alterar o vSwitch da instância RDS
Altere o vSwitch da instância RDS para garantir que o bloco CIDR do vSwitch não entre em conflito com o bloco CIDR do service 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 services da Alibaba Cloud.