Koneksi ke instans ApsaraDB RDS gagal, dan pesan kesalahan Destination Host Unreachable ditampilkan saat Anda melakukan ping ke titik akhir internal instans RDS.
Deskripsi masalah
Anda tidak dapat melakukan ping ke titik akhir internal instans RDS dari instans Elastic Compute Service (ECS), dan respons Destination Host Unreachable dikembalikan.
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 UnreachablePenyebab
Dalam sebagian besar kasus, blok CIDR internal instans RDS bertentangan dengan blok CIDR layanan lain.
Analisis
Jalankan perintah PING untuk melakukan ping ke titik akhir internal instans RDS guna melihat alamat IP pribadinya. Dalam contoh sebelumnya, alamat IP pribadi instans RDS adalah
172.17.0.31.Contoh ini menggunakan sistem operasi Linux. Jalankan perintah
route -nuntuk melihat entri rute. Output yang mirip dengan berikut dikembalikan: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-350b446c181aOutput tersebut menunjukkan bahwa blok CIDR antarmuka jaringan (NIC)
br-350b446c181aadalah172.17.0.0/24, yang bertentangan dengan alamat IP pribadi instans RDS. Akibatnya, instans ECS tidak dapat mengarahkan traffic ke instans RDS.Dalam sebagian besar kasus, masalah ini terjadi karena blok CIDR layanan kontainer bertentangan dengan blok CIDR ApsaraDB RDS. Contoh berikut menggunakan layanan kontainer untuk menjelaskan cara mengatasi konflik rute.
Solusi
Solusi 1: Ubah blok CIDR default layanan kontainer
Solusi ini tidak berlaku untuk instans ApsaraDB RDS for SQL Server. Jika instans RDS Anda menjalankan SQL Server, ikuti Solusi 2.
Menghentikan Docker atau mengubah blok CIDR default Docker akan mengganggu layanan Anda. Lakukan operasi ini selama jam sepi.
Saat Anda mengubah blok CIDR default Docker, pastikan blok tersebut kompatibel dengan pengaturan jaringan semua kontainer dan aplikasi yang ada untuk mencegah potensi masalah konektivitas.
Contoh ini menggunakan sistem operasi Linux. Lakukan langkah-langkah berikut:
Hentikan layanan Docker.
sudo systemctl stop dockerEdit file konfigurasi Docker. Umumnya, file konfigurasi Docker berada di
/etc/docker/daemon.jsonatau/etc/docker/daemon.conf. Nama file dapat berbeda-beda.sudo vim /etc/docker/daemon.jsonPastikan file tersebut berisi konten berikut:
{ "bip": "新的网络网段" }Sebagai contoh, atur blok CIDR baru menjadi 192.168.0.0/16.
Simpan dan tutup file konfigurasi.
Jalankan kembali layanan Docker agar perubahan diterapkan.
sudo systemctl start docker
Solusi 2: Ubah vSwitch instans RDS
Anda dapat mengubah vSwitch instans RDS sehingga blok CIDR vSwitch tidak bertentangan dengan blok CIDR layanan kontainer.
Secara default, virtual private cloud (VPC) yang berbeda tidak dapat berkomunikasi satu sama lain melalui jaringan internal. (Disarankan) Ubah hanya vSwitch dan jangan ubah VPC. Dengan demikian, koneksi jaringan internal antara layanan Alibaba Cloud lainnya dan instans RDS tidak terpengaruh.