Docker修改默认Docker0的网段

1.问题

Docker安装后,默认会创建一个名为Docker0的虚拟网卡,使用的是172.17.*网段,用于为容器分配IP
可以通过ifconfig命令查看所有网络情况(如命令不存在,yum install net-tools安装)
下图为Docker0网络默认

Docker0

Route路由表

而172段有时候会被公司内网专用,这样会造成在该服务器上访问公司172网络时路由到容器网络。

2.解决方案

修改容器配置项,重新设置Docker路由,Docker版本为18.06,该方案向后兼容。
vim /etc/docker/daemon.json
添加一行 "bip": "192.168.210.1/24",该行建议放JSON第一行。
{
"bip": "192.168.210.1/24",
其他配置
}
service docker restart 重启容器
重启后再次运行ifconfig查看docker0是否变成192段,笔者测试个别机器重启容器就生效,但大部分机器不会直接生效,需要重启服务器后生效。
ifconfig返回

[root@k8s-master ~]# ifconfig
cni0: flags=4163  mtu 1450
        inet 10.244.0.1  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::d8a8:14ff:feb4:c4f2  prefixlen 64  scopeid 0x20
        ether da:a8:14:b4:c4:f2  txqueuelen 1000  (Ethernet)
        RX packets 321375  bytes 55450337 (52.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 343911  bytes 81395594 (77.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4099  mtu 1500
        inet 192.168.210.1  netmask 255.255.255.0  broadcast 192.168.210.255
        ether 02:42:e1:46:78:80  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

route命令返回:

[root@k8s-master ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 eth0
192.168.210.0     0.0.0.0         255.255.255.0   U     0      0        0 docker0
10.244.0.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.244.1.0      10.244.1.0      255.255.255.0   UG    0      0        0 flannel.1
10.244.2.0      10.244.2.0      255.255.255.0   UG    0      0        0 flannel.1
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

查看容器实际IP,如果仍为172段则重启该容器

docker inspect -f='{{.Name}} {{.NetworkSettings.IPAddress}} {{.HostConfig.PortBindings}}' $(docker ps -aq)

返回

/postgres 192.168.210.2 map[5432/tcp:[{ 5432}]]
可以看出上面的容器已自动切换到192.168.210段。

3.结语

1.较早版本的Docker是需要修改docker.service文件,自行创建网桥,比较复杂。
2.Docker安装规划时就建议规划好Docker网络,安装后就改掉网段,不然后面再改还是会影响线上环境的,而且如果没有及时发现这种问题,会导致很难排查。
3.如果是k8s生成的容器,则默认走flannel分配,flannel分配的IP段是k8s初始化及安装flannel时指定。

你可能感兴趣的:(Docker修改默认Docker0的网段)