來一張本身畫的圖,mark:2016年6月27日17:09:14python
本身理解,若有錯誤 多謝指教。linux
centos7, 部署OVS和docker、以及基於centos6.8的ssh images 命令。docker
#!/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
2、配置OVSvim
HOST1centos
#!/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
HOST2bash
#!/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 只須要在外面將路由指向容器便可。session
ps:ssh
一、在docker run 的時候的cmd 是會覆蓋dockerfile的cmd 即,若是須要覆蓋可在容器/usr/sbin/sshd -D 啓動sshd。ui
二、本博文中OVS爲2.5 以前的bug 修復,因此不須要修改spec 文件。url
三、centos7 或者說 是docker 1.11 版本的docker 綁定網卡 路徑爲/etc/systemd/system/docker.service.d/docker.conf。爲system文件夾 說明是隨系統啓動。而裏面的execstart能夠看官方文檔規定,必需要空定義一個。
四、這裏的網關 (使用ip route 查看) 默認網關爲kbr0 定義的網關,這裏須要刪除掉 更換網關,否則 宿主機和容器都沒法通外網。
五、brctl addif 講ovsbr0 加入到kbr0 這個網橋。重啓network 服務會消失,因此不要重啓服務,或者重啓系統,這裏咱們添加到rc.local centos7的rc.local 本是沒有執行權限 so 須要chmod +x 。
六、這裏爲gre0模式 ,若是想轉換爲vxlan 修改對應的type 便可,具體區別請百度。
七、以上腳本只適合centos7,可是過程是同樣。
若有問題 請留言!