不同物理机中的Docker容器互连(Openvswitch)
本文使用vultr虚拟主机实现
邀请注册链接:http://www.vultr.com/?ref=6940267
参考:http://www.cnblogs.com/openxxs/p/4690478.html
先买两台主机,很便宜,一个月5美元的那款就够用了
安装docker和相关软件
yum upgrade -y
yum install -y docker tree git wget p7zip bridge-utils net-tools vim unzip
systemctl start docker.service
systemctl enable docker
安装openvswitch 2.5.0
具体安装办法,可参考:http://crabdave.iteye.com/blog/2363896
直接下载附件中的openvswitch
wget http://dl2.iteye.com/upload/attachment/0123/7844/8da95736-54ae-3fc7-938c-b990af0b24c9.zip
unzip 8da95736-54ae-3fc7-938c-b990af0b24c9.zip
本地安装,并启动服务
yum localinstall -y openvswitch-2.5.0-1.x86_64.rpm
systemctl start openvswitch.service
开启两台主机的ip_forward
echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
systemctl restart network
sysctl net.ipv4.ip_forward
在云主机上配置内网IP
(之前使用外网IP一直连接不上 ip route add RTNETLINK answers: Network is unreachable)
参考 www.vultr.com 页面中 Sample Network Configuration
样例:
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=IP地址
NETMASK=255.255.254.0
GATEWAY=网关
DNS1=
IPV6INIT=yes
IPV6ADDR="2001:19f0:4400:4827:5400:00ff:fe5d:302c/64"
IPV6_AUTOCONF="yes"
DNS2=2001:19f0:300:1704::6
/etc/sysconfig/network-scripts/route-eth0
169.254.0.0/16 dev eth0
配置内网网卡
/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.99.0.11(内网IP)
NETMASK=255.255.0.0
MTU=1450
先配置第一台机器10.99.0.11:
之前如果装错了可以通过 ovs-vsctl del-port ob0 gre0 命令删除之前绑定的port
ovs-vsctl创建ob0网桥并绑定IP:
ovs-vsctl add-br ob0
ovs-vsctl add-port ob0 gre0 -- set Interface gre0 type=gre options:remote_ip=10.99.0.11
brctl addbr kbr0
brctl addif kbr0 ob0
ovs-vsctl show
删除docker默认的网桥docker0
ip link set dev docker0 down
ip link del dev docker0
vi /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
使用内网网卡进行连接 eth1 配置对方IP
echo "172.17.1.0/24 via 10.99.0.10 dev eth1" > /etc/sysconfig/network-scripts/route-eth1
配置完成后,重启网络服务:
systemctl restart network.service
查看路由:
ip route show|column -t
172.17.1.0/24 via 10.99.0.10 dev eth1
172.17.2.0/24 dev kbr0 proto kernel scope link src 172.17.2.1
再配置第二台机器10.99.0.10:
ovs-vsctl add-br ob0
ovs-vsctl add-port ob0 gre0 -- set Interface gre0 type=gre options:remote_ip=10.99.0.10
brctl addbr kbr0
brctl addif kbr0 ob0
ovs-vsctl show
删除docker默认的网桥docker0
ip link set dev docker0 down
ip link del dev docker0
vi /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
使用内网网卡进行连接 eth1 配置对方IP
echo "172.17.2.0/24 via 10.99.0.11 dev eth1" > /etc/sysconfig/network-scripts/route-eth1
配置完成后,重启网络服务:
systemctl restart network.service
查看路由:
ip route show|column -t
172.17.1.0/24 dev kbr0 proto kernel scope link src 172.17.1.1
172.17.2.0/24 via 10.99.0.11 dev eth1
配置两台机器的docker
vim /etc/sysconfig/docker
OPTIONS= 中添加新增的网桥 -b=kbr0
重启docker service
systemctl restart docker.service
编写一个Dockerfile,仅安装一个net-tools
vi Dockerfile
From centos
RUN yum -y install net-tools
构建镜像
docker build -t test .
运行容器
docker run -it --rm=true test
然后查看IP
ifconfig
ping 对方IP
ping 172.17.2.2
PING 172.17.2.2 (172.17.2.2) 56(84) bytes of data.
64 bytes from 172.17.2.2: icmp_seq=1 ttl=62 time=1.18 ms
64 bytes from 172.17.2.2: icmp_seq=2 ttl=62 time=0.804 ms
ping 172.17.1.2
PING 172.17.1.2 (172.17.1.2) 56(84) bytes of data.
64 bytes from 172.17.1.2: icmp_seq=1 ttl=62 time=0.904 ms
64 bytes from 172.17.1.2: icmp_seq=2 ttl=62 time=0.802 ms
双方能拼通就成功了!
如果不愿意构建镜像文件,也可以使用如下命令,在创建centos容器后,立即安装net-tools
docker run -it --rm=true centos sh -c "yum -y install net-tools; bash"
相关推荐
从实践者的角度出发,以Docker和Kubernetes为重点,沿着“基本用法介绍”到“核心原理解读”到“高级实践技巧”的思路,一本书讲透当前主流的容器和容器云技术,有助于读者在实际场景中利用Docker容器和容器云解决...
本篇文章主要介绍了Docker如何使用OpenvSwitch网桥,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
docker容器中支持的中文字体
最近在工作时遇到一个问题,docker容器无法访问宿主机的redis,telent6379端口不通。 经排查发现,该服务器启用了防火墙,防火墙把6379的端口的访问授权给docker0网卡访问即可。 操作如下: firewall-cmd –...
本书从实践者的角度,在讲解Docker高级实践技巧的同时,深入到源代码层次,为读者梳理出Docker容器技术和基于Docker的容器云技术(如Kubernetes)的实现方法和设计思路,帮助读者理解如何在实际场景中利用Docker解决...
docker容器与容器云的文档,有助于理解docker的知识。
Docker 容器最佳安全实践白皮书
Docker 容器与容器云(第2版) PDF版本,带电子目录,结构清晰
kubectl exec进入到docker容器中进行查看时发现,文件在容器中也是中文文件名显示异常。查看docker容器编码格式:执行locale命令;可以看到当前编码格式为POSIX,而这种编码格式不支持中文 解决办法:locale -a查
docker 容器的生命周期是同容器中的前置进程相关在一起的,这也是我们平时可能会遇到一些容器只是运行几秒便自动结束的原因:因为容器中没有一个常驻的前置进程,前置进程运行结束后,容器便自动退出了。 比如 ...
每天5分钟玩转Docker容器技术.pdf 每天5分钟玩转Docker容器技术.pdf
解决Windows10下无法对docker容器进行端口访问(端口映射的问题) 在Windows10系统服务器中安装了docker和docker-compose 并尝试在其中运行Nginx服务,映射也做好 问题:在主机的浏览器中,打开localhost:port无法...
prometheus监控docker容器详细资料,带文档和相关软件包,超级详细
Docker容器与容器云第二版,高清pdf,docker容器与容器云解读,kubernetes结合
基于Docker 1.10和Kubernetes 1.2全面更新 一本书讲透Docker和Kubernetes 从源码层面深度解析Docker核心原理 Kubernetes源码完全解读 *实践 广泛涵盖Docker高级实践技巧 全面梳理主流容器云技术架构方法
gitlab环境搭建 harbor环境搭建 jenkins环境搭建、工具安装、插件安装 Docker、Docker Compose 环境搭建 gitlab、harbor、jenkins、Docker 集成
# 在容器中执行bash命令 docker exec -it id /bin/bash 3.安装openssh-server并启动 apt-get update apt-get install openssh-server # 启动之前需手动创建/var/run/sshd,不然启动sshd的时候会报错
《每天5分钟玩转Docker容器技术》是一个有关容器技术的教程,有下面两个特点: 系统讲解当前最流行的容器技术 从容器的整个生态环境到各种具体的技术,从整体到细节逐一讨论。 重实践并兼顾理论 从实际操作的角度...