问题

今天遇到一个问题,我们某个机器由于一些原因运维说要把IP换掉,机器里面的内容都还在,里面部署了docker也部署了一下compose镜像等搞完重启一下即可。

等换好IP后,我们把Docker启动起来,在启动某应用的时候报错了,提示mysql无法连接。mysql是在其他机器上部署的,按道理应该没有什么IP限制。

排查

我首先怀疑是机器上有iptables,但是我查看iptables的状态是关闭的;mysql的机器上也是关闭的,那就排除ip白名单的原因;

然后查看这台机器连接mysql的网络问题,通过本机是能ping的通,telnet也通的。进到pod里面首先是telnet不通,ping也不通。

打算让网络管理员去帮忙看了,无意间发现有一篇文章,与我的情况非常像,我尝试用文中指定的方式设置一个值,没想到成功了。于是迫不及待的分享一下!

解决方式

查看配置

[root@iZwz9a0zvcp4lh4zfiaj0cZ ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

/etc/sysctl.conf系统文件中修改或者添加值等于1的配置即可

[root@iZwz9a0zvcp4lh4zfiaj0cZ ~]# more /etc/sysctl.conf
net.ipv4.ip_forward = 1

执行命令使其生效

[root@iZwz9a0zvcp4lh4zfiaj0cZ ~]# sysctl -p
net.ipv4.ip_forward = 1

验证

现在可以进入pod里面去ping和tenlet了
发现是通了

说明

net.ipv4.ip_forward=1的作用是启用IP转发功能‌。当net.ipv4.ip_forward设置为1时,系统将启用IP转发功能,允许将网络流量从一个接口转发到另一个接口,使得不同网络之间能够进行路由通信。这在充当网络路由器或防火墙的系统中非常常见。‌

IP转发是指网络设备在接收到一个IP数据包后,根据目标IP地址对该数据包进行决策,并选择合适的网络接口将其转发出去。启用IP转发功能后,设备可以作为中间节点,帮助不同网络之间的数据传输和通信。

Docker为什么开启net.ipv4.ip_forward=1

在Docker网络配置中,net.ipv4.ip_forward的作用是开启Linux内核的IP转发功能。通过开启该功能,Docker容器可以实现对外部网络的访问,使得容器可以与其他计算机进行通信。

上一篇 下一篇