ApsaraDB RDSインスタンスに接続できず、インスタンスの内部エンドポイントにpingを送信すると、「Destination Host Unreachable」というエラーメッセージが表示されます。
問題の説明
RDSインスタンスの内部エンドポイントをElastic Compute Service (ECS) インスタンスからpingできず、「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
原因
RDSインスタンスの内部CIDRブロックが、別のサービスのCIDRブロックと競合していること。
問題分析
RDSインスタンスの内部エンドポイントにPingを実行して、インスタンスのプライベートIPアドレスを取得します。 この例では、インスタンスのプライベートIPアドレスは172.17.0.31です。
route-n
コマンドを実行して、Linuxシステムのルートを表示します。 例としてLinuxシステムが使用されています。 次の情報が返されます。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-350b446c181a
コマンド出力は、br-350b446c181a NICのCIDRブロックが172.17.0.0/24であり、RDSインスタンスのプライベートIPアドレスと競合していることを示しています。 その結果、ECSインスタンスからのトラフィックはRDSインスタンスにルーティングできません。
ほとんどの場合、コンテナサービスのCIDRブロックがRDSインスタンスのCIDRブロックと競合することが原因です。 次のセクションでは、コンテナサービスのルート競合を解決する方法について説明します。
ソリューション
解決策1: コンテナサービスのデフォルトのCIDRブロックを変更する
このソリューションは、RDS for SQL Serverインスタンスには適していません。 RDSインスタンスがSQL Serverを実行している場合は、「解決策2: RDSインスタンスのvSwitchの変更」をご参照ください。
Dockerサービスを停止するか、DockerサービスのデフォルトCIDRブロックを変更すると、サービスが中断されます。 オフピーク時に操作を実行することを推奨します。
DockerサービスのデフォルトのCIDRブロックを変更するときは、接続の問題を防ぐために、新しいCIDRブロックが既存のコンテナーおよびアプリケーションのネットワーク設定と互換性があることを確認してください。
この例では、Linuxが使用されます。
Dockerサービスを停止します。
sudo systemctl stop docker
Dockerサービスの設定ファイルを変更します。 ほとんどの場合、設定ファイルは /etc/docker/daemon.jsonまたは /etc/docker/daemon.confに保存されます。 ファイル名は異なる場合があります。
sudo vim /etc/docker/daemon.json
次のコードスニペットを使用します。
{ "bip": "New CIDR block" }
この例では、CIDRブロック192.168.0.0/16が使用されます。
設定ファイルを保存して閉じます。
変更を有効にするためにDockerサービスを起動します。
sudo systemctl start docker
解決策2: RDSインスタンスのvSwitchの変更
RDSインスタンスのvSwitchを変更して、vSwitchのCIDRブロックがコンテナサービスのCIDRブロックと競合しないようにすることができます。
デフォルトでは、異なる仮想プライベートクラウド (VPC) は、内部ネットワークを介して相互に通信することはできません。 RDSインスタンスのVPCは変更しないことを推奨します。 これにより、RDSインスタンスと他のAlibaba Cloudサービス間の内部ネットワークベースの接続は影響を受けません。