概述
容器比较火,单机的容器创建和使用比较容易,但是为了搭建集群,需要跨主机部署,那么跨主机的容器网络通信就需要解决了。我找到一些方案,先说下openvswitch的方案。
部署
1.环境准备
首先准备3台机器,我这边直接使用虚拟机了。ip分别为192.168.1.4,192.168.1.5,192.168.1.6系统为ubuntu 18.04
2.安装docker
curl -sSL https://get.daocloud.io/docker | sh
3.为了保证每个主机的docker网络不一样,所以需要修改docker的配置信息。信息分别为
cat /etc/docker/daemon.json
{ "bip": "172.17.4.1/24" }
{ "bip": "172.17.5.1/24" }
{ "bip": "172.17.6.1/24" }
4.重启docker使其生效
systemctl restart docker
ip a s docker0
5.安装openvswitch
apt-get install openvswitch-switch
6.创建ovs bridge
ovs-vsctl add-br br0
ifconfig
7.设置gre端口,这里显示的是192.168.1.4的。192.168.1.5的需要把对应的ip改为1.4
ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre option:remote_ip=192.168.1.5
brctl addif docker0 br0
ip link set dev br0 up
ip link set dev docker0 up
ip route add 172.17.0.0/16 dev docker0
8.启动容器测试
docker run -d -n test1 nginx
9.ping虚拟机测试
root@i-2vrkt8l5:~# docker inspect test1|grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.5.2",
"IPAddress": "172.17.5.2",
root@i-2vrkt8l5:~# docker exec -it test1 bash
root@4fa7f65caa88:/# ping 172.17.4.2
PING 172.17.4.2 (172.17.4.2): 56 data bytes
64 bytes from 172.17.4.2: icmp_seq=0 ttl=63 time=0.946 ms
发现已经可以访问了。
解释
其实这里就是通过ovs创建了gre隧道,通过gre来处理跨主机的数据包,但是你会发现如果相和第三台主机通信的话,就需要在其中一台上新搭建一个点对点的隧道,使所有机器是一个形成一个闭环。
在192.168.1.4上新创建隧道:
ovs-vsctl add-br br1
ovs-vsctl add-port br1 gre1 -- set interface gre1 type=gre option:remote_ip=192.168.1.6
brctl addif docker0 br1
ip link set dev br1 up
这样192.168.1.6去ping192.168.1.5上的容器时,需要经过192.168.1.4。
这里会有一定的问题,不仅是性能上,而且如果192.168.1.4down了,那么网络都无法正常通信了。所以这个方式可能会有一定的缺点。
网友评论