ApsaraDB RDS インスタンスへの接続に失敗し、RDS インスタンスの内部エンドポイントに ping を実行すると Destination Host Unreachable というエラーメッセージが表示されます。
問題の説明
Elastic Compute Service (ECS) インスタンスから RDS インスタンスの内部エンドポイントに 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 ブロックと競合しているためです。
分析
PING コマンドを使用して、RDS インスタンスの内部エンドポイントに ping を実行し、そのプライベート IP アドレスを確認します。 上記の例では、RDS インスタンスのプライベート IP アドレスは
172.17.0.31です。この例では、Linux オペレーティングシステムを使用します。
route-nコマンドを実行してルートを表示します。 次のような出力が返されます。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出力から、ネットワークインターフェイスカード (NIC)
br-350b446c181aの CIDR ブロックが172.17.0.0/24であり、RDS インスタンスのプライベート IP アドレスと競合していることがわかります。 その結果、ECS インスタンスはトラフィックを RDS インスタンスにルーティングできません。ほとんどの場合、この問題はコンテナサービスの CIDR ブロックが ApsaraDB RDS の CIDR ブロックと競合するために発生します。 次の例では、コンテナサービスを例に、ルートの競合を解決する方法を説明します。
ソリューション
解決策 1: コンテナサービスのデフォルト CIDR ブロックの変更
Docker の停止や Docker のデフォルト CIDR ブロックの変更を行うと、サービスが中断されます。 この操作はピーク時間外に実行してください。
Docker のデフォルト CIDR ブロックを変更するときは、既存のすべてのコンテナとアプリケーションのネットワーク設定との互換性を確保し、潜在的な接続の問題を防ぐ必要があります。
この例では、Linux オペレーティングシステムを使用します。 次の手順を実行します。
Docker サービスを停止します。
sudo systemctl stop dockerDocker 設定ファイルを編集します。 ほとんどの場合、Docker 設定ファイルは
/etc/docker/daemon.jsonまたは/etc/docker/daemon.confにあります。 ファイル名が異なる場合があります。sudo vim /etc/docker/daemon.jsonファイルに次の内容が含まれていることを確認します:
{ "bip": "新的网络网段" }たとえば、新しい CIDR ブロックを 192.168.0.0/16 に設定します。
設定ファイルを保存して閉じます。
Docker サービスを開始して変更を有効にします。
sudo systemctl start docker
解決策 2: RDS インスタンスの vSwitch の変更
RDS インスタンスの vSwitch を変更して、vSwitch の CIDR ブロックがコンテナサービスの CIDR ブロックと競合しないようにすることができます。
デフォルトでは、異なる Virtual Private Cloud (VPC) は内部ネットワークを介して相互に通信できません。 (推奨) vSwitch のみを変更し、VPC は変更しないでください。 これにより、他の Alibaba Cloud サービスと RDS インスタンス間の内部ネットワーク接続が影響を受けなくなります。