前言:前面的部分一直都是单机跑docker,但实际生产环境不可能只用一台来跑。肯定会用到多台,因为他们都是内部私有ip,那么多台主机之间的容器如何通信?这个是个很头疼的问题!
目前主流几种方法如下:
1、使用路由机制打通网络
2、使用Open vSwitch(OVS)打通网络
3、使用flannel来打通网络
4、使用Quagga来实现自动学习路由
第一种:使用路由机制打通网络
使用linux的路由来打通网络
优点:
-
常规路由技术
-
使用传统网络技术
-
简单
-
高性能
缺点:
-
与现有网络融为一体
-
灵活性低
现在有两台Docker实例:
具体如图,因为Docker默认的内部ip为172.17.42网段,所以必须要修改其中一台的默认网段以免ip冲突。
#vim /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS= --bip=172.18.42.1/16 -H fd:// -H=unix:///var/run/docker.sock
#systemctl daemon-reload
#reboot
ok。现在就可以开始操作了。
其实就是执行两台route add命令
docker 130上执行 route add -net 172.18.0.0/16 gw 192.168.18.128
docker 128上执行 route add -net 172.17.0.0/16 gw 192.168.18.130
ok,现在两台宿主机里的容器就可以通信了。
第二种:使用Open vSwitch(OVS)打通网络
是一种主流的虚拟化大二层技术
优点:
-
灵活
-
对现有物理网络没要求
-
业界主流
缺点:
-
软件封装导致性能下降
-
复杂度相对较高
-
排错难度高
流程图如下:
首先安装ovs的rpm包
软件包:http://pan.baidu.com/s/1mgU6YBe
1
2
3
|
# yum install openvswitch-2.4.0-1.x86_64.rpm #安装软件包 # /etc/init.d/openvswitch restart #重启服务 # /etc/init.d/openvswitch status #查看状态 |
安装网桥管理工具
#yum -y install bridge-utils
配置网络
1
2
3
4
5
6
7
8
|
ovs-vsctl add-br br0 ovs-vsctl add-port br0 gre1 -- set interface gre1 type =gre option:remote_ip=192.168.18.128
#添加br0到本地docker0,使得容器流量通过ovs流经tunnel brctl addif docker0 br0 ip link set dev br0 up
ip link set dev docker0 up
iptables -t nat -F; iptables -F ip route add 172.17.0.0 /16 dev docker0
|
其余节点同样的配置,注意ip地址即可。
第三种:使用flannel来打通网络
新设计的Flannel,一种结合了路由机制与隧道技术
原理:每个主机配置一个ip段和子网个数。例如,可以配置一个覆盖网络使用 10.100.0.0/16段,每个主机/24个子网。因此主机a可以接受10.100.5.0/24,主机B可以接受10.100.18.0/24的包。flannel使用etcd来维护分配的子网到实际的ip地址之间的映射。对于数据路径,flannel 使用udp来封装ip数据报,转发到远程主机。选择UDP作为转发协议是因为他能穿透防火墙。例如,AWS Classic无法转发IPoIP or GRE 网络包,是因为它的安全组仅仅支持TCP/UDP/ICMP。
下图解释了数据报通过覆盖网络转发的路线:
部署也不是很复杂,仅需要etcd和flannel两项支持即可。
etcd一般部署在单独机器上,那么flannel就部署在docker节点上,每个docker节点上都需部署。
1、部署etcd,假设地址为192.168.1.121
1
2
3
4
5
6
7
|
yum -y install etcd #安装软件包
vim /etc/etcd/etcd .conf #修改配置文件
修改为如下:(默认只监听本地回环地址) systemctl restart etcd #重启服务
etcdctl set /coreos .com /network/config '{ "Network": "10.1.0.0/16" }' #添加一条网络配置记录,这个配置将用于flannel分配给每个Docker的虚拟IP地址段
|
2、部署flannel
从https://github.com/coreos/flannel/releases 下载最新稳定版本,这里以0.5.5版本为例。
1
2
|
tar zxf flannel-0.5.5-linux-amd64. tar .gz #解压文件
cp flannel-0.5.5/* /usr/bin/ #拷贝可执行文件至系统变量path
|
使用systemd来管理flannel服务
vim /usr/lib/systemd/system/flanneld.service
1
2
3
4
5
6
7
8
9
10
11
12
|
[Unit] Description=Flanneld overlay address etcd agent After=network.target Before=docker.service [Service] Type=notify EnvironmentFile= /etc/sysconfig/flanneld
EnvironmentFile=- /etc/sysconfig/docker-network
ExecStart= /usr/bin/flanneld -etcd-endpoints=${FLANNEL_ETCD} $FLANNEL_OPTIONS
[Install] RequiredBy=docker.service WantedBy=multi-user.target |
设置etcd地址
vim /etc/sysconfig/flanneld
1
|
FLANNEL_ETCD= "http://192.168.1.121:2379"
|
由于flannel将覆盖docker0网桥,所以如果Docker服务已启动,则停止Docker服务
编写flannel启动脚本,并加入自启动
vim /etc/init.d/start_flannel.sh
1
2
3
4
5
6
7
|
#!/bin/bash systemctl stop docker #停止docker服务
systemctl restart flanneld #启动flannel服务
mk-docker-opts.sh -i #生成环境变量
source /run/flannel/subnet . env #将环境变量生效
ifconfig docker0 ${FLANNEL_SUBNET} #设置docker0的网卡ip
systemctl start docker #启动docker服务
|
ok,现在跨主机容器间已经可以通信。
第四种:使用Quagga来实现自动学习路由
其实这种方式是基于第一种方式的路由技术,只不过路由信息不需要自己手动添加,而是自动学习。试想一下,如果有10台docker,那么每台docker就需要手动写9条路由信息,是不是很惨?
Linux上安装路由器的软件名为Quagga,它可以配置很多种企业级的动态路由协议。我使用的是RIPV2和OSPF同时开启,但安装Quagga的方法和配置命令,太过于繁琐。所以网上有大神将其Docker化了。
下载Quagga镜像:
1
|
docker pull index.alauda.cn /georce/router
|
备用地址:http://pan.baidu.com/s/1sj26X8T
特别需要注意的是:docker0的网段不能一样,所以需要修改docker的子网地址,参考第一种的设置办法
运行镜像:
1
|
docker run -itd --name=router --privileged --net=host index.alauda.cn /georce/router
|
执行 ip route 查看下路由表,已有别的docker0的网段信息。
http://blog.liuker.cn/index.php/docker/30.html
相关推荐
理解和熟练运用这些服务,将有助于提升云解决方案的设计能力。 此外,资料集中的国赛套卷和省先电云计算赛卷,提供了检验和提升云计算知识水平的机会。这些题库涵盖了云计算的基础理论、最佳实践以及最新技术趋势,...
在某些情况下,企业会过度热衷于采用最新的技术趋势,例如将每个对接渠道都设计成微服务,或者在只有少量业务需求时就引入大数据和Docker容器化。这种做法可能导致资源浪费和技术过度应用,而忽视了技术与实际业务...
嵌入式八股文面试题库资料知识宝典-华为的面试试题.zip
训练导控系统设计.pdf
嵌入式八股文面试题库资料知识宝典-网络编程.zip
人脸转正GAN模型的高效压缩.pdf
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
少儿编程scratch项目源代码文件案例素材-鸡蛋.zip
嵌入式系统_USB设备枚举与HID通信_CH559单片机USB主机键盘鼠标复合设备控制_基于CH559单片机的USB主机模式设备枚举与键盘鼠标数据收发系统支持复合设备识别与HID
嵌入式八股文面试题库资料知识宝典-linux常见面试题.zip
面向智慧工地的压力机在线数据的预警应用开发.pdf
基于Unity3D的鱼类运动行为可视化研究.pdf
少儿编程scratch项目源代码文件案例素材-霍格沃茨魔法学校.zip
少儿编程scratch项目源代码文件案例素材-金币冲刺.zip
内容概要:本文深入探讨了HarmonyOS编译构建子系统的作用及其技术细节。作为鸿蒙操作系统背后的关键技术之一,编译构建子系统通过GN和Ninja工具实现了高效的源代码到机器代码的转换,确保了系统的稳定性和性能优化。该系统不仅支持多系统版本构建、芯片厂商定制,还具备强大的调试与维护能力。其高效编译速度、灵活性和可扩展性使其在华为设备和其他智能终端中发挥了重要作用。文章还比较了HarmonyOS编译构建子系统与安卓和iOS编译系统的异同,并展望了其未来的发展趋势和技术演进方向。; 适合人群:对操作系统底层技术感兴趣的开发者、工程师和技术爱好者。; 使用场景及目标:①了解HarmonyOS编译构建子系统的基本概念和工作原理;②掌握其在不同设备上的应用和优化策略;③对比HarmonyOS与安卓、iOS编译系统的差异;④探索其未来发展方向和技术演进路径。; 其他说明:本文详细介绍了HarmonyOS编译构建子系统的架构设计、核心功能和实际应用案例,强调了其在万物互联时代的重要性和潜力。阅读时建议重点关注编译构建子系统的独特优势及其对鸿蒙生态系统的深远影响。
嵌入式八股文面试题库资料知识宝典-奇虎360 2015校园招聘C++研发工程师笔试题.zip
嵌入式八股文面试题库资料知识宝典-腾讯2014校园招聘C语言笔试题(附答案).zip
双种群变异策略改进RWCE算法优化换热网络.pdf
内容概要:本文详细介绍了基于瞬时无功功率理论的三电平有源电力滤波器(APF)仿真研究。主要内容涵盖并联型APF的工作原理、三相三电平NPC结构、谐波检测方法(ipiq)、双闭环控制策略(电压外环+电流内环PI控制)以及SVPWM矢量调制技术。仿真结果显示,在APF投入前后,电网电流THD从21.9%降至3.77%,显著提高了电能质量。 适用人群:从事电力系统研究、电力电子技术开发的专业人士,尤其是对有源电力滤波器及其仿真感兴趣的工程师和技术人员。 使用场景及目标:适用于需要解决电力系统中谐波污染和无功补偿问题的研究项目。目标是通过仿真验证APF的有效性和可行性,优化电力系统的电能质量。 其他说明:文中提到的仿真模型涉及多个关键模块,如三相交流电压模块、非线性负载、信号采集模块、LC滤波器模块等,这些模块的设计和协同工作对于实现良好的谐波抑制和无功补偿至关重要。
内容概要:本文探讨了在工业自动化和物联网交汇背景下,构建OPC DA转MQTT网关软件的需求及其具体实现方法。文中详细介绍了如何利用Python编程语言及相关库(如OpenOPC用于读取OPC DA数据,paho-mqtt用于MQTT消息传递),完成从OPC DA数据解析、格式转换到最终通过MQTT协议发布数据的关键步骤。此外,还讨论了针对不良网络环境下数据传输优化措施以及后续测试验证过程。 适合人群:从事工业自动化系统集成、物联网项目开发的技术人员,特别是那些希望提升跨协议数据交换能力的专业人士。 使用场景及目标:适用于需要在不同通信协议间建立高效稳定的数据通道的应用场合,比如制造业生产线监控、远程设备管理等。主要目的是克服传统有线网络限制,实现在不稳定无线网络条件下仍能保持良好性能的数据传输。 其他说明:文中提供了具体的代码片段帮助理解整个流程,并强调了实际部署过程中可能遇到的问题及解决方案。