背景说明
通过静态路由的方式可以实现跨主机的网络通信,需要确保两个宿主机的容器网络范围不在同一个网段。
不能识别容器的主机名称进行PING
解决方案
检查环境
确保宿主机开启了路由转发配置
[root@vm1 ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@vm1 ~]#
如果不是这样则使用命令: echo ‘net.ipv4.ip_forward = 1’ >> /etc/sysctl.conf
网段划分
主机 | 容器网段 |
---|---|
192.168.184.143 vm1 | 192.168.100.1/24 |
192.168.184.144 vm2 | 192.168.200.1/24 |
通过修改bip配置参数对容器网络进行划分
192.168.184.143 vm1
[root@vm1 docker]# ip addr show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:30:d3:8b:ce brd ff:ff:ff:ff:ff:ff
inet 192.168.100.1/24 brd 192.168.100.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:30ff:fed3:8bce/64 scope link
valid_lft forever preferred_lft forever
[root@vm1 docker]#
192.168.184.144 vm2
[root@vm2 docker]# ip addr show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:67:f3:66:71 brd ff:ff:ff:ff:ff:ff
inet 192.168.200.1/24 brd 192.168.200.255 scope global docker0
valid_lft forever preferred_lft forever
[root@vm2 docker]#
路由配置
192.168.184.143 vm1
[root@vm1 ~]# ip route add 192.168.200.0/24 via 192.168.184.144
[root@vm1 ~]# ip route
default via 192.168.184.2 dev ens33 proto dhcp metric 100
192.168.100.0/24 dev docker0 proto kernel scope link src 192.168.100.1
192.168.184.0/24 dev ens33 proto kernel scope link src 192.168.184.143 metric 100
192.168.200.0/24 via 192.168.184.144 dev ens33
[root@vm1 ~]#
192.168.184.144 vm2
[root@vm2 ~]# ip route add 192.168.100.0/24 via 192.168.184.143
[root@vm2 ~]# ip route
default via 192.168.184.2 dev ens33 proto dhcp metric 100
192.168.100.0/24 via 192.168.184.143 dev ens33
192.168.184.0/24 dev ens33 proto kernel scope link src 192.168.184.144 metric 100
192.168.200.0/24 dev docker0 proto kernel scope link src 192.168.200.1
[root@vm2 ~]#
一定要先创建路由规则,后创建容器,否则可能网络不通。
容器创建
192.168.184.143 vm1
[root@vm1 docker]# docker run -it centos /bin/bash
[root@a92743aa8cf2 /]#
[root@a92743aa8cf2 /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:c0:a8:64:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.100.2/24 brd 192.168.100.255 scope global eth0
valid_lft forever preferred_lft forever
[root@a92743aa8cf2 /]#
192.168.184.144 vm2
[root@vm2 docker]# docker run -it centos /bin/bash
[root@45baac99c6ce /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:c0:a8:c8:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.200.2/24 brd 192.168.200.255 scope global eth0
valid_lft forever preferred_lft forever
[root@45baac99c6ce /]#
网络测试
192.168.184.143 vm1
[root@vm1 ~]# ping 192.168.200.1
PING 192.168.200.1 (192.168.200.1) 56(84) bytes of data.
64 bytes from 192.168.200.1: icmp_seq=1 ttl=64 time=0.555 ms
64 bytes from 192.168.200.1: icmp_seq=2 ttl=64 time=0.478 ms
[root@88330f2865ad /]# ping 192.168.200.1
PING 192.168.200.1 (192.168.200.1) 56(84) bytes of data.
64 bytes from 192.168.200.1: icmp_seq=1 ttl=63 time=0.305 ms
64 bytes from 192.168.200.1: icmp_seq=2 ttl=63 time=0.521 ms
192.168.184.144 vm2
[root@vm2 ~]# ping 192.168.100.2
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
64 bytes from 192.168.100.2: icmp_seq=1 ttl=63 time=0.475 ms
64 bytes from 192.168.100.2: icmp_seq=2 ttl=63 time=0.463 ms
64 bytes from 192.168.100.2: icmp_seq=3 ttl=63 time=0.515 ms
64 bytes from 192.168.100.2: icmp_seq=4 ttl=63 time=0.460 ms
64 bytes from 192.168.100.2: icmp_seq=5 ttl=63 time=0.283 ms
64 bytes from 192.168.100.2: icmp_seq=6 ttl=63 time=0.390 ms
64 bytes from 192.168.100.2: icmp_seq=7 ttl=63 time=0.720 ms
64 bytes from 192.168.100.2: icmp_seq=8 ttl=63 time=0.371 ms
^C
--- 192.168.100.2 ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7002ms
rtt min/avg/max/mdev = 0.283/0.459/0.720/0.122 ms
[root@vm2 ~]#
[root@33e15cf4b0af /]# ping 192.168.100.2
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
64 bytes from 192.168.100.2: icmp_seq=1 ttl=62 time=0.329 ms
64 bytes from 192.168.100.2: icmp_seq=2 ttl=62 time=0.995 ms
64 bytes from 192.168.100.2: icmp_seq=3 ttl=62 time=0.404 ms
64 bytes from 192.168.100.2: icmp_seq=4 ttl=62 time=0.841 ms
^C
--- 192.168.100.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 0.329/0.642/0.995/0.282 ms
[root@33e15cf4b0af /]#