ApsaraDB RDSインスタンスに接続できず、インスタンスの内部エンドポイントにpingを送信すると、「Destination Host Unreachable」というエラーメッセージが表示されます。
問題の説明
RDSインスタンスの内部エンドポイントをElastic Compute Service (ECS) インスタンスからpingできず、「Destination Host Unreachable」というエラーメッセージが表示されます。
PIN G rm-bpxxxx.mysql.rds.aliyuncs.com (172.17.0.31) 56(84) バイトのデータ。
xxxx (172.17.0.1) からicmp_seq=1宛先ホストに到達できません
xxxx (172.17.0.1) からicmp_seq=2宛先ホストに到達できません
xxxx (172.17.0.1) からicmp_seq=3宛先ホストに到達できません
原因
RDSインスタンスの内部CIDRブロックが、別のサービスのCIDRブロックと競合していること。
問題分析
RDSインスタンスの内部エンドポイントにPingを実行して、インスタンスのプライベートIPアドレスを取得します。 この例では、インスタンスのプライベートIPアドレスは172.17.0.31です。
route-n
コマンドを実行して、Linuxシステムのルートを表示します。 例としてLinuxシステムが使用されています。 次の情報が返されます。カーネルIPルーティングテーブル 宛先ゲートウェイGenmaskフラグメトリックRef使用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 1002 0 eth0 172.17.0.0 0.0.0.0 255.255.255.0 U 0 0 br-350b446c181a
コマンド出力は、br-350b446c181a NICのCIDRブロックが172.17.0.0/24であり、RDSインスタンスのプライベートIPアドレスと競合していることを示しています。 その結果、ECSインスタンスからのトラフィックはRDSインスタンスにルーティングできません。
ほとんどの場合、コンテナサービスのCIDRブロックがRDSインスタンスのCIDRブロックと競合することが原因です。 次のセクションでは、コンテナサービスのルート競合を解決する方法について説明します。
ソリューション
解決策1: コンテナサービスのデフォルトのCIDRブロックを変更する
Dockerサービスを停止するか、DockerサービスのデフォルトCIDRブロックを変更すると、サービスが中断されます。 オフピーク時に操作を実行することを推奨します。
DockerサービスのデフォルトのCIDRブロックを変更するときは、接続の問題を防ぐために、新しいCIDRブロックが既存のコンテナーおよびアプリケーションのネットワーク設定と互換性があることを確認してください。
この例では、Linuxが使用されます。
Dockerサービスを停止します。
sudo systemctl停止ドッカー
Dockerサービスの設定ファイルを変更します。 ほとんどの場合、設定ファイルは /etc/docker/daemon.jsonまたは /etc/docker/daemon.confに保存されます。 ファイル名は異なる場合があります。
sudo vim /etc/docker/daemon.json
次のコードスニペットを使用します。
{ "bip": "新しいCIDRブロック" }
この例では、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サービス間の内部ネットワークベースの接続は影響を受けません。