背景说明
通过静态路由的方式可以实现跨主机的网络通信,需要确保两个宿主机的容器网络范围不在同一个网段。
不能识别容器的主机名称进行PING
解决方案
检查环境
确保宿主机开启了路由转发配置
[root@vm1 ~]# cat /etc/sysctl.confnet.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 docker03: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 02:42:30:d3:8b:ce brd ff:ff:ff:ff:ff:ffinet 192.168.100.1/24 brd 192.168.100.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:30ff:fed3:8bce/64 scope linkvalid_lft forever preferred_lft forever[root@vm1 docker]#
192.168.184.144 vm2
[root@vm2 docker]# ip addr show docker03: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 02:42:67:f3:66:71 brd ff:ff:ff:ff:ff:ffinet 192.168.200.1/24 brd 192.168.200.255 scope global docker0valid_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 routedefault via 192.168.184.2 dev ens33 proto dhcp metric 100192.168.100.0/24 dev docker0 proto kernel scope link src 192.168.100.1192.168.184.0/24 dev ens33 proto kernel scope link src 192.168.184.143 metric 100192.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 routedefault via 192.168.184.2 dev ens33 proto dhcp metric 100192.168.100.0/24 via 192.168.184.143 dev ens33192.168.184.0/24 dev ens33 proto kernel scope link src 192.168.184.144 metric 100192.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 addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 02:42:c0:a8:64:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 192.168.100.2/24 brd 192.168.100.255 scope global eth0valid_lft forever preferred_lft forever[root@a92743aa8cf2 /]#
192.168.184.144 vm2
[root@vm2 docker]# docker run -it centos /bin/bash[root@45baac99c6ce /]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 02:42:c0:a8:c8:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 192.168.200.2/24 brd 192.168.200.255 scope global eth0valid_lft forever preferred_lft forever[root@45baac99c6ce /]#
网络测试
192.168.184.143 vm1
[root@vm1 ~]# ping 192.168.200.1PING 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 ms64 bytes from 192.168.200.1: icmp_seq=2 ttl=64 time=0.478 ms[root@88330f2865ad /]# ping 192.168.200.1PING 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 ms64 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.2PING 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 ms64 bytes from 192.168.100.2: icmp_seq=2 ttl=63 time=0.463 ms64 bytes from 192.168.100.2: icmp_seq=3 ttl=63 time=0.515 ms64 bytes from 192.168.100.2: icmp_seq=4 ttl=63 time=0.460 ms64 bytes from 192.168.100.2: icmp_seq=5 ttl=63 time=0.283 ms64 bytes from 192.168.100.2: icmp_seq=6 ttl=63 time=0.390 ms64 bytes from 192.168.100.2: icmp_seq=7 ttl=63 time=0.720 ms64 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 7002msrtt min/avg/max/mdev = 0.283/0.459/0.720/0.122 ms[root@vm2 ~]#[root@33e15cf4b0af /]# ping 192.168.100.2PING 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 ms64 bytes from 192.168.100.2: icmp_seq=2 ttl=62 time=0.995 ms64 bytes from 192.168.100.2: icmp_seq=3 ttl=62 time=0.404 ms64 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 3004msrtt min/avg/max/mdev = 0.329/0.642/0.995/0.282 ms[root@33e15cf4b0af /]#
