参考https://www.cnblogs.com/CloudMan6/p/7305989.html
今天开始学习 overlay 网络跨主机通信的原理
 
root@host01:~# ufw allow 4789/udp
root@host01:~# ufw status numbered
Status: active
To                         Action      From
--                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere                  
[ 2] 2376                       ALLOW IN    Anywhere                  
[ 3] 4789/udp                   ALLOW IN    Anywhere  
root@host01:~# docker run -itd --name bbox1 --network ov_net1 busybox
root@host01:~# docker exec bbox1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue
link/ether 02:42:0a:00:00:02 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.2/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
11: eth1@if12: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth1
valid_lft forever preferred_lft forever
 
root@host01:~# docker exec bbox1 ping -c 2  bbox2
PING bbox2 (10.0.0.3): 56 data bytes
64 bytes from 10.0.0.3: seq=0 ttl=64 time=0.348 ms
64 bytes from 10.0.0.3: seq=1 ttl=64 time=0.440 ms
--- bbox2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.348/0.394/0.440 ms
root@host01:~# ln -s /var/run/docker/netns /var/run/netns
root@host01:~# ip netns
a8d468c12df8 (id: 1)
1-609020e03f (id: 0)
root@host01:~# ip netns exec 1-609020e03f brctl show
bridge name    bridge id        STP enabled    interfaces
br0        8000.0af427b2de24    no        veth0
vxlan0
root@host01:~# ip netns exec 1-609020e03f ip -d l show vxlan0
7: vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br0 state UNKNOWN mode DEFAULT group default
link/ether 1a:3d:67:93:45:5d brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 1
vxlan id 256 srcport 0 0 dstport 4789 proxy l2miss l3miss ageing 300
bridge_slave state forwarding priority 32 cost 100 hairpin off guard off root_block off fastleave off learning on flood on addrgenmode eui64
--------------------------------------------------------------------------------------------------------
 
root@host02:~# ufw allow 4789/udp
root@host02:~# ufw status numbered
Status: active
To                         Action      From
--                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere                  
[ 2] 2376                       ALLOW IN    Anywhere                  
[ 3] 4789/udp                   ALLOW IN    Anywhere                  
root@host02:~# docker run -itd --name bbox2 --network ov_net1 busybox
root@host02:~# docker exec bbox2 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue
link/ether 02:42:0a:00:00:03 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.3/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
11: eth1@if12: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth1
valid_lft forever preferred_lft forever
root@host02:~# docker exec bbox2 ping -c 2 bbox1
PING bbox1 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: seq=0 ttl=64 time=0.382 ms
64 bytes from 10.0.0.2: seq=1 ttl=64 time=0.353 ms
--- bbox1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.353/0.367/0.382 ms
root@host02:~# ln -s /var/run/docker/netns /var/run/netns
root@host02:~# ip netns
9e3d32ba4934 (id: 1)
1-609020e03f (id: 0)
root@host02:~# ip netns exec 1-609020e03f brctl show
bridge name    bridge id        STP enabled    interfaces
br0        8000.1ad722007738    no        veth0
vxlan0
root@host02:~# ip netns exec 1-609020e03f ip -d l show vxlan0
7: vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br0 state UNKNOWN mode DEFAULT group default
link/ether 1a:d7:22:00:77:38 brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 1
vxlan id 256 srcport 0 0 dstport 4789 proxy l2miss l3miss ageing 300
bridge_slave state forwarding priority 32 cost 100 hairpin off guard off root_block off fastleave off learning on flood on addrgenmode eui64

以上实验,可见overlay网络中的容器可以直接通信,即使两个容器不在同一台host上,且支持 docker dns
docker 会为每个 overlay 网络创建一个独立的 network namespace ,其中会有一个 linux bridge br0 ,endpoint 还是由 veth pair 实现,一端连接到容器中(即eth0),另一端连接到namespace的br0上。
br0 除了连接所有的endpoint,还会连接一个vxlan 设备,用于与其他host建立vxlan tunnel。容器之间的数据就是通过这个tunnel通信的。
要查看overlay 网络的namespace 可以在 host01 和 host02 上执行 ipnetns (需要先执行ln -s /var/run/docker/netns /var/run/netns),可以看到两个 host上有一个相同名称的namespace,这就是 ov_net1 的namespace,可以在该namespace中查看br0设备,还可以在该namespace中查看到具有相同 id 的vxlan

转载于:https://www.cnblogs.com/www1707/p/10556644.html

052、overlay如何实现跨主机通信?(2019-03-19 周二)相关推荐

  1. overlay 如何实现跨主机通信?- 每天5分钟玩转 Docker 容器技术(52)

    上一节我们在 host1 中运行了容器 bbox1,今天将详细讨论 overlay 网络跨主机通信的原理. 在 host2 中运行容器 bbox2: bbox2 IP 为 10.0.0.3,可以直接 ...

  2. Docker的网络模式和跨主机通信

    文章转载自:http://www.a-site.cn/article/169899.html Docker的四种网络模式Bridge模式 当Docker进程启动时,会在主机上创建一个名为docker0 ...

  3. 50-overlay 如何实现跨主机通信?

    上一节我们在 host1 中运行了容器 bbox1,今天将详细讨论 overlay 网络跨主机通信的原理. 在 host2 中运行容器 bbox2: bbox2 IP 为 10.0.0.3,可以直接 ...

  4. docke跨主机通信之gre隧道

    GRE简介 GRE可以对网络层的任何协议来进行封装,类似LVS的IPIP协议,在原有的数据报上增加GRE协议数据报.然后在网络上传输,到达对端后,解开GRE数据报头,得到真实的数据报.其中的mac地址 ...

  5. docker跨主机网络——overlay与macvlan

    docker的跨主机网络 前言 这篇文件分两种方式介绍docker跨主机通信,overlay和macvlan,macvlan的方式给大家做个参考,生产环境下不推荐大家使用这种方式

  6. Docker 跨主机网络方案分析

    PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...

  7. Docker 跨主机容器网络通信 -- Flannel 实现

    一.简介 Flannel 是一种基于 overlay 网络的跨主机容器网络解决方案,也就是将 TCP 数据包封装在另一种网络包里面进行路由转发和通信,Flannel 是 CoreOS 开发,专门用于 ...

  8. docker跨主机集群之flannel

    0. 环境说明 CentOS7 etcd-v3.4.3-linux-amd64.tar.gz flannel-v0.11.0-linux-amd64.tar.gz 官方文档:https://githu ...

  9. 微服务自动化.03.跨主机集群

    一.容器间内部通信 bridge模式 host模式 自定义网络 Container模式 None模式 二.跨主机通信 Docker默认的网络环境下,单台主机上的Docker容器可以通过docker0网 ...

最新文章

  1. 图解用工具对BHO做初步研究
  2. Genymotion出现unknown generic error和This may occur if you are using a proxy错误的解决方案
  3. Flex Basis与Width的区别
  4. java打开文件出错_打开文件错误太多,java.io.FileNotFoundException
  5. Windows10系统安装 .NET Framework 3.5
  6. Ride to Office(信息学奥赛一本通-T1227)
  7. 【NOIP2015】D2-T1跳石头,二分答案
  8. “三低”用户养活的互联网
  9. Kafka Consumer API示例
  10. python定义和调用函数
  11. 持久层框架的比较Hibernate与 MyBatis
  12. contiki CC2530 CC2430例子描述
  13. 魔百和CM311-1sa_ZG_S905L3A_安卓9.0_纯净线刷固件包
  14. 老师傅传授,数控车床对刀步骤
  15. vs2015已停止工作,事件名称APPCRASH 故障模块KERNELBASE.dll
  16. LWIP (chapter 2.01) pbuf数据包缓存
  17. vue中v-for写在template上,不能加key怎么办
  18. Adobe Reader 文档无法签名_Linux下的6款最好用的PDF文档阅览工具
  19. 火狐浏览器占用过多内存
  20. 成为一名月薪2万的web安全工程师需要哪些技能?

热门文章

  1. 计算机视觉结课论文,计算机视觉与图像识别结课论文
  2. 纯C写Windows程序系列---------VS2010设置纯C环境 .
  3. 发生生成错误是否继续并运行上次的成功生成_JavaScript 是如何运行的?
  4. flatform installer web 安装php_Windows server 2019 安装 IIS PHP 环境无标题笔记
  5. 学习android操作系统,学习Android手机操作系统笔记总结
  6. 算法的优缺点_机器学习算法优缺点 amp; 如何选择
  7. c swap方法在哪个库里面_swap
  8. (9) hibernate加载持久化对象的两种方式——get、load
  9. linux部署项目路径如下
  10. php跨域请求解决方案_swoft2 -跨域与中间件详解