概念
不同主机上的Docker容器通过某些方法可实现跨主机通信,但是一般不同主机上的Docker容器内的IP地址不是处于同一个网段,但是可以通过自定义网桥的方式,将不同主机的自定义网桥设定为同一个网段,并桥接主机上的网卡,实现跨主机通信。
整个网络的拓扑结构图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yG3Q77hG-1577353005068)(D:\github\reading-notes\Docker\img\自定义网桥实现跨主机通信.png)]
地址划分
###主控:
ip地址:192.168.84.83
网卡:eth20
网关:192.168.84.1
自定义网桥名称:br1
自定义网桥地址:192.168.84.1
主控上容器ip地址池:192.168.84.224/28
线卡
ip地址:192.168.84.85
网卡:eth20
网关:192.168.84.1
自定义网桥名称:br1
自定义网桥地址:192.168.84.1
主控上容器ip地址池:192.168.84.240/28
主控设置
在设置之前,主控中没有br网桥,ip路由显示192.168.84.0/24网段路由通过网卡eth20端:
[root@jamza_vm_master_litepaas master]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:83:aa:bb:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.83.83/24 brd 192.168.83.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:83ff:feaa:bb00/64 scope link
valid_lft forever preferred_lft forever
3: eth20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:83:aa:bb:20 brd ff:ff:ff:ff:ff:ff
inet 192.168.84.83/24 brd 192.168.84.255 scope global eth20
valid_lft forever preferred_lft forever
inet6 fe80::5054:83ff:feaa:bb20/64 scope link
valid_lft forever preferred_lft forever
4: eth21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:83:aa:bb:21 brd ff:ff:ff:ff:ff:ff
inet 192.168.85.83/24 brd 192.168.85.255 scope global eth21
valid_lft forever preferred_lft forever
inet6 fe80::5054:83ff:feaa:bb21/64 scope link
valid_lft forever preferred_lft forever
5: docker_gwbridge: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:0c:8b:82:cc brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/20 scope global docker_gwbridge
valid_lft forever preferred_lft forever
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:0f:34:eb:4b brd ff:ff:ff:ff:ff:ff
inet 10.76.84.11/24 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:fff:fe34:eb4b/64 scope link
valid_lft forever preferred_lft forever
[root@jamza_vm_master_litepaas master]#
[root@jamza_vm_master_litepaas master]# ip route
default via 192.168.83.1 dev eth0
10.76.84.0/24 dev docker0 proto kernel scope link src 10.76.84.11
169.254.0.0/16 dev eth0 scope link metric 1002
169.254.0.0/16 dev eth20 scope link metric 1003
169.254.0.0/16 dev eth21 scope link metric 1004
172.18.0.0/20 dev docker_gwbridge proto kernel scope link src 172.18.0.1
192.168.83.0/24 dev eth0 proto kernel scope link src 192.168.83.83
192.168.84.0/24 dev eth20 proto kernel scope link src 192.168.84.83
192.168.85.0/24 dev eth21 proto kernel scope link src 192.168.85.83
[root@jamza_vm_master_litepaas master]#
在主控上创建一个网桥,为网桥分配ip地址,并将自定义的网桥桥接本地的网卡eth20:
[root@jamza_vm_master_litepaas master]#
[root@jamza_vm_master_litepaas master]# brctl addbr br1
[root@jamza_vm_master_litepaas master]#
[root@jamza_vm_master_litepaas master]# ifconfig br1 192.168.84.1 netmask 255.255.255.0
[root@jamza_vm_master_litepaas master]#
[root@jamza_vm_master_litepaas master]# brctl addif br1 eth20
[root@jamza_vm_master_litepaas master]#
[root@jamza_vm_master_litepaas master]#
修改docker的服务端配置,使得docker默认连接自定义的网桥br1,而不是默认的docker0网桥,并配置主控上的容器ip地址池为192.168.84.224/28,以防止主控上的容器ip地址与线卡上的容器ip地址冲突,注意,设置默认网桥与地址池的字段分别是bridge与fixed-cidr,然后重启docker服务端:
[root@jamza_vm_master_litepaas master]