问题描述:
背景是一次生产环境变更。发现业务所在服务器连接AWS的RDS数据库服务。通过telnet测试,发现telnet是不通的。所以将问题确定为网络问题,进行排查。
排查过程:
1.是否有可能AWS EC2和RDS服务实例之间网络访问问题?
因为服务器在10.100.12段,RDS服务在172.24.24段。产生子网路由表问题怀疑。
查看子网路由表发现,相应子网路由表没有问题。
确定同10.100.12段的其他服务器是否能访问RDS数据库连接?
从其他随机10.100.12的EC2服务器测试telnet 是否能访问RDS数据库连接,发现其他服务器都是可以通的。
所以问题缩小到业务所在服务器。
2.服务器route查看
命令:route -n
查看发现,目标为172.24.0.0/16网段的ip都会走桥接模式的网卡设备。此路由配置会直接影响到服务器去连接172.24.24.0/24网段的RDS服务。
看到桥接模式网卡,第一点就想到了docker。排查服务器上docker容器网段,确认是哪个容器的路由配置。
写了个简单的命令行,遍历了一下服务器上所有docker容器的ip。查到罪魁祸首。
for i in `docker ps |awk '{print $NF}'`;do echo ---$i---;docker exec -it $i cat /etc/hosts;done
问题已经定位到了,后面要做的就是将这个容器的网络配置进行修改。让他不占用172.24.0.0/16网段。
解决方案:
修改docker-compose配置,给容器指定其他网段,并重启容器。