
docker开启包转发和内核参数
引入br_netfilter
模块
首先引入br_netfilter
模块,该模块将桥接流量转发到iptables
。
[root@openEuler ~]# modprobe br_netfilter
可以使用下面的命令验证是否成功引入br_netfilter
模块。
lsmod | grep br_netfilter
如果出现结果则说明该模块已成功导入。
重启机器后加载br_netfilter
模块
由于模块会在服务器重启后失效,所以需要写个Shell脚本实现系统启动时加载内核模块。
新建/etc/rc.sysinit
文件,然后编写Shell脚本
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules
do
[ -x $file ] && $file
done
这段脚本代码首先遍历/etc/sysconfig/modules/
目录下所有后缀为.modules
的文件,然后[ -x $file ]
是查找目录下所有的可执行文件,&& $file
是执行查找到的所有可执行文件。
然后在/etc/sysconfig/modules/
目录下新建br_netfilter.modules
文件,内容为
modporbe br_netfilter
然后给予该文件 755 权限,确保其可被执行
chmod 755 /etc/sysconfig/modules/br_netfilter.modules
验证
可以直接重启服务器后,输入lsmod | grep br_netfilter
验证是否启动时添加,也可以使用moprobe -r br_netfilter
卸载掉br_netfilter
模块,然后运行/etc/rc.sysinit
脚本,然后再使用lsmod | grep br_netfilter
验证脚本是否正常。
修改内核参数
修改内核参数开启转发,在/etc/sysctl.d/docker.conf
文件(默认没有的)中填写配置。
cat > /etc/sysctl.d/docker.conf << EOF
> net.bridge.bridge-nf-call-ip6tables =1
> net.bridge.bridge-nf-call-iptables =1
> net.ipv4.ip_forward = 1
> EOF
net.ipv4.ip_forward = 1
将系统作为路由或者VPN服务时必须要开启IP转发功能,当linux主机有多个网卡时,一个网卡收到的数据会转发到其他网卡,实现VxLAN(Virtual eXtensible LAN,虚拟可扩展局域网)功能,不开启会导致docker部署的应用无法访问。
VxLAN 是一种“在三层网络中跑二层网络”的封装协议,让不同主机的虚拟机/容器像在同一个局域网里一样通信,且可以支持大规模部署。
然后需要重新加载内核参数才是生效,使用下述命令将新配置的内核参数重新加载。
sysctl -p /etc/sysctl.d/docker.conf
然后重启docker即可生效
systemctl restart docker