Docker:macvlan实现容器跨主机通信 [十四]

Posted luoahong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker:macvlan实现容器跨主机通信 [十四]相关的知识,希望对你有一定的参考价值。

一、什么是macvlan

1、macvlan 本身是 linux kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,

2、即多个 interface,每个 interface 可以配置自己的 IP。

3、macvlan 本质上是一种网卡虚拟化技术

二、跨主机通信

1、创建macvlan

1、主机luoahong

[[email protected] ~]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
ffbecd2f57ce5be49b95fa05f0a4566f02d6a006d9ab664f44857997d6c0605b
[[email protected] ~]# docker network ls
NETWORK ID          NAME                  DRIVER              SCOPE
d766f2526542        bridge                bridge              local
30b37ec09ff2        host                  host                local
ffbecd2f57ce        macvlan_1             macvlan             local
ad2616372f01        mywordpress_default   bridge              local
03062097926d        none                  null                local

2、主机luoahong2

[[email protected] ~]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
6b0642df662e35293727542fea1b6d524f0f564f8162d21283d668a778a1d63f
[[email protected] ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
05d195b7d60b        bridge              bridge              local
eb998505004d        host                host                local
6b0642df662e        macvlan_1           macvlan             local
9bd801b589c5        none                null                local

2、创建测试容器

1、主机luoahong

[[email protected] ~]# docker run -it --network macvlan_1 --ip=10.0.0.111 busybox:latest /bin/sh
/ # 
[[email protected] ~]# docker run -it --network macvlan_1 --ip=10.0.0.188 busybox:latest /bin/sh

2、主机luoahong2

[[email protected] ~]# docker run -it --network macvlan_1 --ip=10.0.0.112 busybox:latest /bin/sh

3、在主机luoahong2主机上测试

[[email protected] ~]# docker run -it --network macvlan_1 --ip=10.0.0.112 busybox:latest /bin/sh
/ # ping 10.0.0.188
PING 10.0.0.188 (10.0.0.188): 56 data bytes
64 bytes from 10.0.0.188: seq=0 ttl=64 time=5.945 ms
64 bytes from 10.0.0.188: seq=1 ttl=64 time=0.699 ms
64 bytes from 10.0.0.188: seq=2 ttl=64 time=0.553 ms
64 bytes from 10.0.0.188: seq=3 ttl=64 time=0.611 ms
64 bytes from 10.0.0.188: seq=4 ttl=64 time=0.724 ms
^C
--- 10.0.0.188 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.553/1.706/5.945 ms
/ # ping 10.0.0.111
PING 10.0.0.111 (10.0.0.111): 56 data bytes
64 bytes from 10.0.0.111: seq=0 ttl=64 time=4.076 ms
64 bytes from 10.0.0.111: seq=1 ttl=64 time=0.670 ms
64 bytes from 10.0.0.111: seq=2 ttl=64 time=0.793 ms
^C
--- 10.0.0.111 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.670/1.846/4.076 ms

三、注意事项及优缺点

1、两台容器无法通信解决方案

1、主机名相同会导致此故障

解决方案:注意主机名的唯一性

2、网卡开启混杂模式

[[email protected] ~]# ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:e7:b9:46 brd ff:ff:ff:ff:ff:ff
[[email protected] ~]# ip link set eth0 promisc on
[[email protected] ~]# ip link show eth0
2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:e7:b9:46 brd ff:ff:ff:ff:ff:ff
[[email protected] ~]# ip link set eth0 promisc off
[[email protected] ~]# ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:e7:b9:46 brd ff:ff:ff:ff:ff:ff

2、优缺点总结

1、优点

  1、性能比较好,

       2、有centos可以把它当作物理机用 占的资源更少

2、缺点

  1、每次ip地址需要手动设置

        2、两台主机共同用一个ip地址不会报错,导致第三台访问有问题

以上是关于Docker:macvlan实现容器跨主机通信 [十四]的主要内容,如果未能解决你的问题,请参考以下文章

Docker 容器跨主机多网段通信解决方案

10: docker 跨主机的容器间通信(macvlan / overlay )

精讲docker跨主机通信

docker部署Macvlan实现跨主机网络通信

docker的跨主机网络Overlay,MacVlan网络的实现

centos7下安装docker(15.3跨主机网络-macvlan)