docker openvswitch网络方案
1. 测试环境
75机(10.11.150.75):Red Hat Enterprise Linux Server 7.0,无外网访问权限,已安装Docker Server
74机(10.11.150.74):Red Hat Enterprise Linux Server 7.0,无外网访问权限,已安装Docker Server
73机(10.11.150.73):Red Hat Enterprise Linux Server 7.0,无外网访问权限,已安装Docker Server
183机:OS X Yosemite 10.10.4,完全外网访问,用于下载安装包
2. 默认Docker网络情况
在73机和75机上通过下面命令启动docker服务:
sudo docker -d &
启动几个容器后,通过 brctl 工具和 ip a 查看网桥的配置情况,可以看到docker启动后默认创建了一个名为docker0的网桥,且分配了了172.17.42.1的内部IP:
可通过如下命令安装 brctl ,后面许多关于网桥的操作需要用到:
sudo yum install bridge-utils
在73机和75机之间的网络ping情况如下图所示,可以看出73机和75机容器之间的是不能ping通的:
下面将介绍利用Openvswitch对网络进行配置实现不同物理机间容器互连的方法。
3. 安装Openvswitch
以73机上的安装为例,先通过183机下载安装包并scp到73机上:
wget http://openvswitch.org/releases/openvswitch-2.3.0.tar.gz
scp openvswitch-2.3.0.tar.gz scs@10.11.150.73:/opt/scs/openxxs
在73机上安装必要的依赖环境,大部分依赖项Linux系统都自带了:
sudo yum -y install openssl-devel gcc make python-devel openssl-devel kernel-devel graphviz kernel-debug-devel autoconf automake rpm-build redhat-rpm-config libtool
创建系统用户ovs,并将安装包复制到ovs的主目录下:
sudo adduser ovs
sudo cp /opt/scs/openxxs/openvswitch-2.3.0.tar.gz /home/ovswitch/
切换至ovs用户,进行yum安装Openvswitch的必要准备,然后退回到原scs用户:
sudo su - ovs tar -zxvpf openvswitch-2.3.0.tar.gz mkdir -p ~/rpmbuild/SOURCES sed ‘s/openvswitch-kmod, //g‘ openvswitch-2.3.0/rhel/openvswitch.spec > openvswitch-2.3.0/rhel/openvswitch_no_kmod.spec cp openvswitch-2.3.0.tar.gz rpmbuild/SOURCES/ rpmbuild -bb --without check ~/openvswitch-2.3.0/rhel/openvswitch_no_kmod.spec exit
安装Openvswitch:
sudo yum localinstall /home/ovs/rpmbuild/RPMS/x86_64/openvswitch-2.3.0-1.x86_64.rpm
安装完之后就可以启动openswitch服务了:
sudo mkdir /etc/openvswitch setenforce 0 sudo systemctl start openvswitch.service sudo systemctl status openvswitch.service -l
以相同方式在74机上安装并启动Openvswitch。
4. 网桥配置
1)73机上配置:
首先开启ip_forward(sudo编辑 /proc/sys/net/ipv4/ip_forward 将内容改为 1 );
然后通过ovs-vsctl创建ob0网桥并绑定IP:
sudo ovs-vsctl add-br ob0 sudo ovs-vsctl add-port ob0 gre0 -- set Interface gre0 type=gre options:remote_ip=10.11.150.73
通过brctl创建kbr0网桥和ob0关联,并删除docker0网桥的关联:
sudo brctl addbr kbr0 sudo brctl addif kbr0 ob0 sudo ip link set dev kbr0 up sudo ip link set dev docker0 down sudo ip link del dev docker0
创建 /etc/sysconfig/network-scripts/ifcfg-kbr0 文件,内容如下:
DEVICE=kbr0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.17.2.1
NETMASK=255.255.255.0
GATEWAY=172.17.2.0
USERCTL=no
TYPE=Bridge
IPV6INIT=no
创建 /etc/sysconfig/network-scripts/route-em1 文件(em1为实际网卡),内容如下:
172.17.1.0/24 via 10.11.150.74 dev em1
配置完成后,重启网络服务:
sudo systemctl restart network.service
2)74机上配置:
与73机的配置类似,首先开启ip_forward(sudo编辑 /proc/sys/net/ipv4/ip_forward 将内容改为 1 );
然后通过ovs-vsctl创建obr0网桥并绑定IP:
sudo ovs-vsctl add-br obr0 sudo ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=10.11.150.74
通过brctl创建kbr0网桥和obr0关联,并删除docker0网桥的关联:
sudo brctl addbr kbr0 sudo brctl addif kbr0 obr0 sudo ip link set dev docker0 down sudo ip link del dev docker0
创建 /etc/sysconfig/network-scripts/ifcfg-kbr0 文件,内容如下:
DEVICE=kbr0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.17.1.1
NETMASK=255.255.255.0
GATEWAY=172.17.1.0
USERCTL=no
TYPE=Bridge
IPV6INIT=no
创建 /etc/sysconfig/network-scripts/route-em1 文件(em1为实际网卡),内容如下:
172.17.2.0/24 via 10.11.150.73 dev em1
配置完成后,重启网络服务:
sudo systemctl restart network.service
5. 配置后网络情况
重启73机和74机的docker服务,启动时指定网桥为我们创建的kbr0:
sudo killall docker sudo docker -d -b=kbr0 &
启动几个docker容器后我们可以查看两台机子的网络环境如下:
进行各个设备间的ping操作之后得出下图的网络情况,可以看到两个物理机下的容器间已经可以通过IP互联了:
docker openvswitch网络方案的更多相关文章
- Kubernetes & Docker 容器网络终极之战(十四)
目录 一.单主机 Docker 网络通信 1.1.host 模式 1.2 Bridge 模式 1.3 Container 模式 1.4.None 模式 二.跨主机 Docker 网络通信分类 2.1 ...
- 理解Docker(6):若干企业生产环境中的容器网络方案
本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- docker多主机网络方案
本文探讨Docker多主机网络的性能. 在过去的博文里,我测试过 Docker的网络 . MySQL服务器团队 提供了他们自己的结果,和我的观察是一致的. 本文里一系列的测试,想更多关注使用多主机的D ...
- Docker 跨主机网络方案分析
PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...
- k8s 各种网络方案 - 每天5分钟玩转 Docker 容器技术(170)
网络模型有了,如何实现呢? 为了保证网络方案的标准化.扩展性和灵活性,Kubernetes 采用了 Container Networking Interface(CNI)规范. CNI 是由 Core ...
- Docker系列04—跨主机网络方案(overlay/weave)
在前面详细讲解了几种网络模式:none,host,bridge,container.他们解决了单个主机间的容器的通信问题,并不能实现多个主机容器之间的通信. 跨主机网络方案包括两大类: 1,docke ...
- Docker 多主机方案
利用OpenVSwitch构建多主机Docker网络 [编者的话]当你在一台主机上成功运行Docker容器后,信心满满地打算将其扩展到多台主机时,却发现前面的尝试只相当于写了个Hello World的 ...
- Docker(四):Docker基本网络配置
1.Libnetwork Libnetwork提出了新的容器网络模型简称为CNM,定义了标准的API用于为容器配置网络. CNM三个重要概念: 沙盒:一个隔离的网络运行环境,保存了容器网络栈的配置,包 ...
- docker单机网络类型
docker单机网络类型概述 Docker 安装时会自动在 host 上创建三种网络 分别为 bridge host none . 可用 docker network ls 命令查看 ...
随机推荐
- PostgreSQL9.1 with PostGIS 2.1.4 for mapping coordinates on linux/ubuntu 已经打包成deb 可下载
For location based service, I try to use postgresql with postgis. You can download postgis from here ...
- RSA算法优化
RSA算法优化 大数乘法 模乗优化 剩余定理(孙子定理) RSA加解密 python的RSA计算优化 #-*- coding: utf-8 -*- ''' /********************* ...
- LAMP编译安装遇到的问题
apache安装 1, no SSL-C headers found configure: error: ...No recognized SSL/TLS toolkit detected 解决办法: ...
- AxeSlide软件项目梳理
先介绍一下我负责的软件项目 AxeSlide斧子演示,估计大部分人没有听说过,但国外有一款叫Prezi的软件,应该有一部分人使用过. 这是我们产品的官网http://www.axeslide.com/ ...
- Dubbo源码学习--服务是如何发布的
相关文章: Dubbo源码学习--服务是如何发布的 Dubbo源码学习--服务是如何引用的 ServiceBean ServiceBean 实现ApplicationListener接口监听Conte ...
- SpringMVC第一天(其他)
SpringMVC第一天 框架课程 课程计划 参数绑定 SpringMVC默认支持的类型 简单数据类型 Pojo类型 Pojo包装类型 自定义参数绑定 SpringMVC和Struts2的区别 高级参 ...
- [HMLY]11.iOS函数式编程的实现&&响应式编程概念
简介 本篇主要回顾一下--iOS函数式编程 && 响应式编程概念 ,如何一步步实现函数式编程的过程,对阅读Masonry && SnapKit源码有一定的帮助. 作为一 ...
- DW,DM,ODS的区别
数据仓库的重要应用是将不同来源的数据和异构数据通过ETL整合在一起,为决策分析提供支撑,若在同一个数据库中分不同用户,此意义不大:假设所有有用户都在一个数据库里,如果因为某个原因数据库重启,那么会影响 ...
- IOS之frame和bounds区别
用最简单的语言来解释就是:setFrame和setBounds都是为了把子view加载到父view上去,但设置的参数坐标系不同,setFrame是该view在父view坐标系统中的位置和大小,setB ...
- jquery通过attr取html里自定义属性原来这么方便啊
<script type="text/javascript"> function fangGouWuChe(obj) { //放入购物车 var sMat = $(o ...