来一张自己画的图,mark:2016年6月27日17:09:14

自己理解,如有错误 多谢指教。

centos7, 部署OVS和docker、以及基于centos6.8的ssh images 命令。

#!/bin/bash
#auther :V yum upgrade -y
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
systemctl stop firewalld.service && systemctl disable firewalld.service
cat>>/etc/yum.repos.d/docker.repo<< V
[docker-repo]
name= docker repo
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
V
yum install docker-engine -y
chkconfig docker on
systemctl enable docker.service
systemctl preset-all
systemctl start docker.service
systemctl enable docker.service
docker pull centos:centos6.8
mkdir ssh
cd ssh
yum -y install vim
cat>> Dockerfile<<V
#---------ssh!
FROM centos:centos6.8
MAINTAINER 'shiyiwen@anjubao.com'
ENV TERM xterm
RUN yum -y install openssh-server;yum clean all
RUN mkdir /var/run/sshd
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN /bin/echo 'root:anjubao.com'|chpasswd
RUN /bin/sed -i 's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g' /etc/pam.d/sshd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" > /etc/default/local
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
V
docker build -t='syw/ssh:centos6.8' .
if [ $? -ne 0 ];then
echo 'build error'
exit 0
fi
docker run -d --name test1 syw/ssh
yum install bridge-utils -y
cd ~
yum install wget -y
yum -y install openssl-devel kernel-devel
yum groupinstall "Development Tools"
wget http://openvswitch.org/releases/openvswitch-2.5.0.tar.gz
yum install gcc make python-devel openssl-devel kernel-devel graphviz kernel-debug-devel autoconf automake rpm-build redhat-rpm-config libtool -y
mkdir -p ~/rpmbuild/SOURCES
tar zxf openvswitch-2.5.0.tar.gz
cp openvswitch-2.5.0.tar.gz ~/rpmbuild/SOURCES/
ls /lib/modules/$(uname -r) -ln
rpmbuild -bb --without check openvswitch-2.5.0/rhel/openvswitch.spec
yum -y install tree
cd rpmbuild/RPMS/x86_64/
yum localinstall openvswitch-2.5.0-1.x86_64.rpm -y
systemctl start openvswitch.service

二、配置OVS

HOST1

#!/bin/bash
#author:V
ETHNAME=`ip addr|grep -w "2:"|awk '{print $2}'|awk -F: '{print $1}'`
IPADDR=`ip addr|grep inet|grep -v "inet6"|awk ' NR==2 { print $2 }'|awk -F"/" '{print $1}'`
echo 1 > /proc/sys/net/ipv4/ip_forward
ovs-vsctl add-br ovsbr0
ovs-vsctl add-port ovsbr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.17.129
brctl addbr kbr0
brctl addif kbr0 ovsbr0
ip link set dev docker0 down
ip link del dev docker0 #=============configure kbr0 by:v=====网上有的版本会少参数,centos7 会报错哦=====
cat >>/etc/sysconfig/network-scripts/ifcfg-kbr0 << V
DEVICE=kbr0
ONBOOT=YES
BOOTPROTO=static
IPADDR=172.17.1.1
NETMASK=255.255.255.0
GATEWAY=172.17.1.254
USERCTL=no
TYPE=Bridge
IPV6INIT=no
V cat >>/etc/sysconfig/network-scripts/route-ens32 <<V
172.17.2.0/24 via 192.168.17.129 dev eno16777736
V
systemctl restart network.service systemctl stop docker.service
#===============================configure docker network====by:v=====
cat >>/etc/systemd/system/docker.service.d/docker.conf<< V
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// -b kbr0
V
chmod +x /etc/rc.d/rc.local
cat >>/etc/rc.d/rc.local<< V
ip route del default
ip route add default via 192.168.17.2 dev $ETHNAME
brctl addif kbr0 ovsbr0
V
systemctl start docker.service

HOST2

#!/bin/bash
#author:V
ETHNAME=`ip addr|grep -w "2:"|awk '{print $2}'|awk -F: '{print $1}'`
IPADDR=`ip addr|grep inet|grep -v "inet6"|awk ' NR==2 { print $2 }'|awk -F"/" '{print $1}'`
echo 1 > /proc/sys/net/ipv4/ip_forward
ovs-vsctl add-br ovsbr0
ovs-vsctl add-port ovsbr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.17.128
brctl addbr kbr0
brctl addif kbr0 ovsbr0
ip link set dev docker0 down
ip link del dev docker0 #=============configure kbr0 by:v=====网上有的版本会少参数,centos7 会报错哦=====
cat >>/etc/sysconfig/network-scripts/ifcfg-kbr0 << V
DEVICE=kbr0
ONBOOT=YES
BOOTPROTO=static
IPADDR=172.17.2.1
NETMASK=255.255.255.0
GATEWAY=172.17.2.254
USERCTL=no
TYPE=Bridge
IPV6INIT=no
V cat >>/etc/sysconfig/network-scripts/route-ens32 <<V
172.17.2.0/24 via 192.168.17.128 dev eno16777736
V
systemctl restart network.service systemctl stop docker.service
#===============================configure docker network====by:v=====
cat >>/etc/systemd/system/docker.service.d/docker.conf<< V
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// -b kbr0
V
chmod +x /etc/rc.d/rc.local
cat >>/etc/rc.d/rc.local<< V
ip route del default
ip route add default via 192.168.17.2 dev $ETHNAME
brctl addif kbr0 ovsbr0
V
systemctl start docker.service

容器A 可以 ping通HOST2的容器A。HOST1 可以用SSH登录到 HOST2的容器中。so 只需要在外面将路由指向容器即可。

ps:

1、在docker run 的时候的cmd 是会覆盖dockerfile的cmd 即,如果需要覆盖可在容器/usr/sbin/sshd -D 启动sshd。

2、本博文中OVS为2.5 之前的bug 修复,所以不需要修改spec 文件。

3、centos7 或者说 是docker 1.11 版本的docker 绑定网卡 路径为/etc/systemd/system/docker.service.d/docker.conf。为system文件夹 说明是随系统启动。而里面的execstart可以看官方文档规定,必须要空定义一个。

4、这里的网关 (使用ip route 查看) 默认网关为kbr0 定义的网关,这里需要删除掉 更换网关,不然 宿主机和容器都无法通外网。

5、brctl addif 讲ovsbr0 加入到kbr0 这个网桥。重启network 服务会消失,所以不要重启服务,或者重启系统,这里我们添加到rc.local centos7的rc.local 本是没有执行权限 so 需要chmod +x 。

6、这里为gre0模式 ,如果想转换为vxlan 修改对应的type 即可,具体区别请百度。

7、以上脚本只适合centos7,但是过程是一样。

                                                      如有问题 请留言!

Centos7 Docker 多主机 容器互连--基于OVS的更多相关文章

  1. Docker跨主机容器之间的通信macvlan

    找两台测试机: [root@docker1 centos_zabbix]# docker network ls NETWORK ID NAME DRIVER SCOPE 19ac9a55bedb br ...

  2. Docker进阶之五:容器管理

    容器管理 一.创建容器常用选项 docker container --help 指令 描述 资源限制指令 -i, --interactive 交互式 -m,--memory 容器可以使用的最大内存量 ...

  3. Docker容器跨主机通信之:OVS+GRE

    一.概述 由于docker自身还未支持跨主机容器通信,需要借助docker网络开源解决方案 OVS OpenVSwich即开放式虚拟交换机实现,简称OVS,OVS在云计算领域应用广泛,值得我们去学习使 ...

  4. 基于Ceph分布式集群实现docker跨主机共享数据卷

    上篇文章介绍了如何使用docker部署Ceph分布式存储集群,本篇在此基础之上,介绍如何基于Ceph分布式存储集群实现docker跨主机共享数据卷. 1.环境准备 在原来的环境基础之上,新增一台cen ...

  5. Docker的单主机容器网络

    作者:杨冬 欢迎转载,也请保留这段声明.谢谢! 出处: https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/ 本篇文章主要探索Do ...

  6. 利用Openvswitch实现不同物理机中的Docker容器互连

    1. 测试环境 75机(10.11.150.75):Red Hat Enterprise Linux Server 7.0,无外网访问权限,已安装Docker Server 74机(10.11.150 ...

  7. Docker 网络管理及容器跨主机通信

    1.网络模式 docker支持四种网络模式,使用--net选项指定: host,--net=host,如果指定此模式,容器将不会获得一个独立的network namespace,而是和宿主机共用一个. ...

  8. Docker镜像管理基础与基于容器的镜像制作示例

    一.Docker镜像 Docker镜像是启动Docker容器的一个非常重要的组件.Docker各组件之间的关系如图: Docker镜像含有启动容器所需要的文件系统及其内容,因此Docker镜像用于创建 ...

  9. Swarm基于多主机容器网络 - overlay networks 梳理

    前面介绍了Docker管理工具-Swarm部署记录,下面重点说下Swarm基于多主机容器通信的覆盖网络 在Docker版本1.12之后swarm模式原生支持覆盖网络(overlay networks) ...

随机推荐

  1. java关键字extends(继承)、Supe(父类引用空间)、 This(方法调用者对象)、Instanceof(实例类型-判断对象是否属于某个类)、final(最终)、abstract(抽象) 、interface(接口)0

    java 继承使用关键字extends   继承的作用:减少代码量,优化代码 继承的使用注意点: 1子类不能继承父类的私有变量 2.子类不能继承父类的构造方法 3.子类在调用自己的构造方法时 会默认调 ...

  2. Web网站的几个并发量级

    评价一个网站的“大小”,处于视角的不同,有很多种衡量的方法,类似文章数,页面数之类的数据非常明显,也没有什么可以争议的.但对于并发来说,争议非常之多,这里就从一个技术的角度开始,谈谈几个Web网站的数 ...

  3. 【JavaScript】 Webpack安装及文件打包

    背景 最近开启一个新项目,需要对前端的各类资源文件进行打包,经过多方调研后,决定使用webpack工具.但是网上的教程多是将webpack直接作为服务器使用,而我只是想将其作为单纯的资源打包工具而已. ...

  4. 【Java EE 学习 53】【Spring学习第五天】【Spring整合Hibernate】【Spring整合Hibernate、Struts2】【问题:整合hibernate之后事务不能回滚】

    一.Spring整合Hibernate 1.如果一个DAO 类继承了HibernateDaoSupport,只需要在spring配置文件中注入SessionFactory就可以了:如果一个DAO类没有 ...

  5. 你不知道的CSS背景—css背景属性全解

    CSS背景在网页设计中使用频率非常高,然而对于这个开发人员很熟悉的CSS属性,却隐藏着许多不为初级开发人员熟知的细节,这篇文章尝试扒开这层不为人知的面纱. 首先列举一下CSS中关于元素背景的所有属性并 ...

  6. UWP学习记录8-设计和UI之控件和模式5

    UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...

  7. mysql导出excel文件的几种方法

    方法一 用mysql的命令和shell select * into outfile './bestlovesky.xls' from bestlovesky where 1 order by id d ...

  8. Beginning Scala study note(2) Basics of Scala

    1. Variables (1) Three ways to define variables: 1) val refers to define an immutable variable; scal ...

  9. 安卓智能POS开单神器-成为零售批发商亲睐的生意帮手-pda销售扫描开单 现场结算打印凭据

    pda销售开单主要有盘点.出库.入库.销售等操作. 主要功能: 出库作业(销售开单.销售退货.销售赠品).入库作业(进货开单.进货退货.进货赠品).盘点作业(能盘盈盘亏)等操作,带蓝牙打印功能 3.仓 ...

  10. Python for Infomatics 第14章 数据库和SQL应用三(译)

    14.5 SQL 总结 到目前为止,我们在Python示例程序中使用了SQL,并且涉及了许多SQL基础.在这一小节中,我们特别审视SQL语言,并对其语法进行回顾. 虽然有很多不同的数据库供应商,但因S ...