实现跨主机的docker网络环境和网络控制节点

1. 安装3台centos7 Linux虚机,

公网分别是:114.112.62.75,114.112.62.76,114.112.62.77

私网分别是:192.168.1.4,  192.168.1.5,  192.168.1.6

2. 在3台机器上安装openvswitch 2.5。

根据openvswitch文档build RPM包,然后在每台机器上yum localinstall rpm

3. 在3台机器上安装docker,yum install docker。

4. 在3台机器上yum install iptables-services。

5. 配置openvswitch环境

例如,在192.168.1.4上:

ovs-vsctl add-br br-int

ovs-vsctl add-br br-tun

ip link add br-int-pair type veth peer name br-tun-pair

ip link set br-int-pair up

ip link set br-tun-pair up

ovs-vsctl add-port br-int br-int-pair

ovs-vsctl add-port br-tun br-tun-pair

ip link add vnic0 type veth peer name vnic0-br-int

ip link set vnic0 up

ip link set vnic0-br-int up

ovs-vsctl add-port br-int vnic0-br-int

ifconfig vnic0 10.0.0.1/24

ip link add vnic1 type veth peer name vnic1-br-int

ip link set vnic1 up

ip link set vnic1-br-int up

ovs-vsctl add-port br-int vnic1-br-int

ifconfig vnic1 10.0.1.1/24

ovs-vsctl set Port vnic0-br-int tag=1

ovs-vsctl set Port vnic1-br-int tag=2

ovs-vsctl add-port br-tun vxlan0 -- set Interface vxlan0 type=vxlan options:local_ip=192.168.1.4 options:in_key=flow options:remote_ip=192.168.1.5 options:out_key=flow

ovs-vsctl add-port br-tun vxlan1 -- set Interface vxlan1 type=vxlan options:local_ip=192.168.1.4 options:in_key=flow options:remote_ip=192.168.1.6 options:out_key=flow

6. 配置br-tun上的流表:

ovs-ofctl del-flows br-tun

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=1 in_port=1 actions=resubmit(,1)"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=1 in_port=2 actions=resubmit(,3)"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=1 in_port=3 actions=resubmit(,3)"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=0 actions=drop"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=1 table=1 dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,20)"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=1 table=1 dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,21)"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=0 table=2 actions=drop"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=1 table=3 tun_id=0x1 actions=mod_vlan_vid:1,resubmit(,10)"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=1 table=3 tun_id=0x2 actions=mod_vlan_vid:2,resubmit(,10)"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=0 table=3 actions=drop"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=1 table=10  actions=learn(table=20,priority=1,hard_timeout=300,NXM_OF_VLAN_TCI[0..11],NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:0->NXM_OF_VLAN_TCI[],load:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[],output:NXM_OF_IN_PORT[]),output:1"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=0 table=20 actions=resubmit(,21)"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=1 table=21 dl_vlan=1 actions=strip_vlan,set_tunnel:0x1,output:2,output:3"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=1 table=21 dl_vlan=2 actions=strip_vlan,set_tunnel:0x2,output:2,output:3"

ovs-ofctl add-flow br-tun "hard_timeout=0 idle_timeout=0 priority=0 table=21 actions=drop"

ovs-ofctl dump-flows br-tun

7. 在114.112.62.75,114.112.62.76上分别启动两个docker:container1,container2

docker pull centos

docker run -itd --name=container1 --net=none centos /bin/bash

docker run -itd --name=container2 --net=none centos /bin/bash

查询两个container的PID:

docker inspect --format "{{.State.Pid}}" container1

62323

docker inspect --format "{{.State.Pid}}" container2

62390

把vnic0,vnic1分别挪到两个docker里:

ip link set vnic0 netns 62323

ip link set vnic1 netns 62390

ip link set vnic0-br-int up

ip link set vnic1-br-int up

nsenter -t 62323 -n ip addr add 10.0.0.1/24 dev vnic0

nsenter -t 62323 -n ip link set vnic0 up

nsenter -t 62390 -n ip addr add 10.0.1.1/24 dev vnic1

nsenter -t 62390 -n ip link set vnic1 up

8.修改3台机器的iptables,/etc/sysconfig/iptables,重启iptables。

9. 在114.112.62.75上,建立虚拟路由器。

在其他机器的docker里设置一下网关

例如:到机器76上,

docker attach container1

ip route add default via 10.0.0.1

到机器77上,

docker attach container1

ip route add default via 10.0.0.1

测试一下路由通不通,ping一下,两个网段的路由全都通了。

在ens256上增加一个IP:

ip addr add 172.10.0.101/24 dev ens256

在iptables增加三条规则:

iptables -t nat -A OUTPUT -d 172.10.0.101/32 -j DNAT --to-destination 10.0.0.2

iptables -t nat -A PREROUTING -d 172.10.0.101/32 -j DNAT --to-destination 10.0.0.2

iptables -t nat -A POSTROUTING -s 10.0.0.2/32 -j SNAT --to-source 172.10.0.101

时间: 2024-10-14 12:31:01

实现跨主机的docker网络环境和网络控制节点的相关文章

如何实现跨主机之间docker容器通信问题

这里采用最原始的桥接模式来实现跨主机直接docker容器通信问题 一些常用命令 brctl show br0 brctl addbr br0 brctl addif br0 eth0 ifconfig br0 down 1.先安装brctl工具包 apt-get install bridge-utils 2.创建一个docker的桥接网络类型(ip填写和同主机网段的ip) docker network create --subnet=192.168.17.100/16 br0 这里我的宿主机ip

Weave跨主机实现docker互通,固定ip及dns使用介绍

一.weave介绍Weave是由weaveworks公司开发的解决Docker跨主机网络的解决方案,现在就采用它来实现Docker多宿主机互联的目的,它能够创建一个虚拟网络,用于连接部署在多台主机上的Docker容器,这样容器就像被接入了同一个网络交换机,那些使用网络的应用程序不必去配置端口映射和链接等信息. 外部设备能够访问Weave网络上的应用程序容器所提供的服务,同时已有的内部系统也能够暴露到应用程序容器上.Weave能够穿透防火墙并运行在部分连接的网络上,另外,Weave的通信支持加密,

8.CentOS7下Openstack-Train版本安装--网络服务neutron(控制节点)

1.创建neutron数据库 [[email protected] ~]# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 918 Server version: 10.3.10-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, Maria

使用weave实现跨主机docker容器互联

关于weave的原理不做细致的说明,如果想了解weave可以登陆官网:https://www.weave.works/ In this post,使用阿里云3台ECS服务器进行weave搭建,并测试搭建weave后,跨主机docker容器的连通性. 场景:10.162.204.252 node110.171.31.181 node210.171.19.139 node3 一.在所有需要跨主机互通的docker宿主机安装weave.1.在node1上安装weave,并启动weave.wget -O

医疗行业多层级复杂网络环境下的消息传输(远程会诊)架构与实现

近期接手一个针对医疗系统远程会诊平台的技术改造工作,这项工作中的一些技术问题颇具代表性,我会在此记录这一工作的过程和技术细节,如果条件允许,会在 GitHub 上开源部分业务无关的纯技术实现,敬请关注.(https://github.com/iccb1013). 远程会诊平台的应用场景指的是乡镇或县卫生所,在接诊过程中,对疑难问题上报上级医疗机构,由上级医疗机构进行网络诊断并回复诊疗意见,但是这一过程,并不是简单的点对点的关系.主要特点:1)  包含多级机构:乡镇.县.区.市.省.由任意一级向上

Openstack 网络服务Neutron介绍和控制节点部署 (九)

Neutron介绍 neutron是openstack重要组件之一,在以前是时候没有neutron项目. 早期的时候是没有neutron,早期所使用的网络的nova-network,经过版本改变才有个neutron. OpenStack Networking 网络:在实际的物理环境下,我们使用交换机或者集线器把多个计算机连接起来形成了网络.在Neutron的世界里,网络也是将多个不同的云主机连接起来. 子网:在实际的物理环境下,在一个网络中.我们可以将网络划分成多为逻辑子网.在Neutron的世

Openstack 问题总结之:控制节点上网络访问慢的解决方法

问题 在一个采用双节点模式的环境下,"控制节点+计算节点"上的实例访问网络都比较正常,但是计算节点上的实例从别的机器上拷贝文件时速度很慢,只有几十K 解决方法 通过网上一些资料的查询,此原因可能是MTU导致的,于是把计算机点上的实例都重新配置了MTU,结果速度果然回复正常了,实例采用的是Windows2008的系统,配置步骤如下: 1.开始-运行-输入regedit打开注册表. 2.在注册表中按以下地址依次打开文件夹HKEY_LOCAL_MACHINE\\SYSTEM\\Current

(八)Docker网络跨主机通讯vxlan和vlan

基于OpenvSwitch实现跨主机通信: 环境描述: 计算机名称 IP Docker01 eth0:192.168.124.150/24 eth1:172.16.100.20/24 docker0:172.17.0.1/24(默认) Docker02 eth0:192.168.124.15124 eth1:172.16.100.30/24 docker0:172.17.0.1/24(默认) dockerothsrv eth0:192.168.124.152/24 eth1:172.16.100

跨主机网络概述 - 每天5分钟玩转 Docker 容器技术(48)

前面已经学习了 Docker 的几种网络方案:none.host.bridge 和 joined 容器,它们解决了单个 Docker Host 内容器通信的问题.本章的重点则是讨论跨主机容器间通信的方案. 跨主机网络方案包括: docker 原生的 overlay 和 macvlan. 第三方方案:常用的包括 flannel.weave 和 calico. docker 网络是一个非常活跃的技术领域,不断有新的方案开发出来,那么要问个非常重要的问题了: 如此众多的方案是如何与 docker 集成