网站首页 > 技术文章 正文
单个主机上容器之间如果要实现网络互通比较容易实现,一种常见做法是把需要通信的容器网络接口桥接到相同的主机网络接口,这样容器就处在相同的广播域,它们的网络地址是由Docker来负责分配管理,所以会获得同一网段的IP地址,网络互通所需的条件全部满足。
当容器处在不同的主机,情况就大不相同,因为主机的网络环境隔离了容器的网络环境,此时要实现网络互通,就需要做更多的工作。本文依赖OpenvSwitch实现多主机容器间网络通信。
1,使用GRE接口
实验拓扑如下:
用比较通俗的说法解释上图,Host 1上的Container 1连接交换机docker0,docker0连接路由器ovs-br,Host 2上的Container2同理。然后两台路由器ovs-br通过GRE隧道相连。用隧道的原因是容器间的流量必须承载在Host 1和Host 2的网络之上。
配置Host 1:
docker run -d --name container1 centos /bin/bash -c "while true; do sleep 3600; done" #启动测试容器
ovs-vsctl add-br ovs-br #添加桥接设备ovs-br
ip link add veth0 type veth peer name veth1 #创建veth设备对
ovs-vsctl add-port ovs-br veth1 #veth1接入ovs-br
brctl addif docker0 veth0 #veth0接入docker0
ip link set veth1 up #启动veth1
ip link set veth0 up #启动veth0
#配置GRE隧道,接口为gre0,remote_ip为Host 2的主机IP
ovs-vsctl add-port ovs-br gre0 -- set interface gre0 type=gre options:remote_ip= 10.1.48.2
配置Host 2(为了避免和Host 1上Container 1上的IP地址冲突,可以启动两个容器,将第二个启动的容器作为Container2)
docker run -d --name container2 centos /bin/bash -c "while true; do sleep 3600; done"
ovs-vsctl add-br ovs-br
ip link add veth0 type veth peer name veth1
ovs-vsctl add-port ovs-br veth1
brctl addif docker0 veth0
ip link set veth1 up
ip link set veth0 up
ovs-vsctl add-port ovs-br gre0 -- set interface gre0 type=gre options:remote_ip= 10.1.48.3
配置完毕后,进入Container 1,ping测试Container 2发现是可以ping通的。
2,使用VxLAN接口
拓扑如下:
这次直接把docker自带的网桥docker0去掉,因为它不是必需的。
ovs-vsctl add-br ovs-br
ifconfig ovs-br 192.168.8.1/24
# 在ovs-br开一个VxLAN类型的端口vxlan,remote_ip为Host 2的eth0 IP地址
ovs-vsctl add-port ovs-br vxlan -- set interface vxlan type=vxlan options:remote_ip=10.1.48.36
#启动一个容器,不使用默认网桥设备
docker run --net=none --privileged=true -it ubuntu
# ovs-docker是一个ovs的docker辅助脚本,如果通过源码编译安装OpenvSwitch,这个脚本会一并安装
# 将ovs-br上的接口eth0与容器a8706151885d绑定
ovs-docker add-port ovs-br eth0 a8706151885d
#在Container 1内执行
ifconfig eth0 192.168.8.2/24
Host 2上的配置类似,ovs-br的IP地址设置为192.168.8.4,容器内eth0的IP地址配置为192.168.8.3
配置完毕后,在Host 1的容器里面 ping测试Host 2上的容器,发现是通的。ping测试的同时,在Host 2的网卡eth0抓下包,可以看到VxLAN的身影,如下图所示:
关于VxLAN的详情,可参考https://tools.ietf.org/html/rfc7348
猜你喜欢
- 2024-10-27 OpenStack Ocata upgrade to Rocky
- 2024-10-27 openvswitch 常用相关命令 openvswitch教程
- 2024-10-27 Open vSwitch未来可期 open音标怎么写
- 2024-10-27 开放的SDN和NFV:需要虚拟化安全来帮忙
- 2024-10-27 虚拟化-ovn入门到精通(一) 虚拟化 sriov
- 2024-10-27 Open vSwitch以及VyOS的性能测试对比报告
- 2024-10-27 qemu libvirt kvm是什么关系 qemu+kvm+android
- 2024-10-27 如何快速搭建一个open vswitch测试网络
- 2024-10-27 KVM虚拟化平台部署 kvm虚拟化集群部署方案
- 2024-10-27 25、linux命令-OpenVSwtich(OVS)网络虚拟化
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)