同一VPC网络中容器无法连通RDS实例

问题描述

在RDS实例中已经把容器的IP地址都设置了白名单,且EDAS中的容器IP网段是固定的,但是EDAS中的容器无法连通RDS实例。

问题原因

路由异常。

解决方案

  1. 登录容器服务节点,执行如下命令,测试RDS实例地址。

    ping xxxxx.mysql.rds.aliyuncs.com

    系统显示类似如下,RDS实例地址为172.x.x.34,但是返回的RDS实例地址为172.x.x.1。

    PING xxxxx.mysql.rds.aliyuncs.com (172.x.x.34) 56(84) bytes of data.
    From izbpxxxxxxxz (172.x.x.1) icmp_seq=1 Destination Host Unreachable
  2. 登录容器,能Ping通公网地址,但是无法Ping通内网地址,如下图所示。

  3. 其中RDS实例解析的172.x.x.34和容器服务的IP段192.19.x.x类似,问题和路由有关,执行route -n命令,查看路由表,系统显示类似如下,172.x.x.0连接的是Docker中的一个接口,不是eth0。

  4. EDAS中的容器网段是固定的,无法变更。执行如下命令,做一个优先级更高的路由,将RDS实例所在的网段指向eth0,并将该命令添加到/etc/rc.local文件中,重启容器后也会生效。

    route add -net 172.x.x.0 netmask 255.255.255.0 gw 172.x.x.253
  5. 执行route -n命令,查看路由表,系统显示类似如下,确认恢复正常。

适用于

  • 专有网络VPC