overlay实现容器跨主机通信

  • A+
所属分类:Docker

使用默认docker0的网桥功能,可以实现在同一个主机上的各个容器之间的通信。但是,很多场景会需要容器间跨主机通讯,这里介绍下overlay实现容器跨主机通信。

跨主机容器通讯解决方案

  • 使用docker的swarm集群

  • 使用docker的overlay网络

  • 使用openvswitch 搭建 xvlan协议隧道

  • 创建网桥br0,docker默认网桥绑定到br0,比如前文介绍的pipework

搭建环境

(1)host1物理主机 IP=192.168.1.3  运行docker容器 

(2)host2物理主机 IP=192.168.1.4  运行docker容器 

安装并配置consul

Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源. Consul 支持健康检查,并允许 HTTP 和 DNS 协议调用 API 存储键值对。

overlay一般需要一个全局的KV存储(sdn controller、etcd、consul)来存储各个主机节点在overlay网络中的配置信息。

直接从官网下载,并解压,将二进制文件拷贝到 /usr/local/bin 目录下即安装完成,同时创建新文件夹 /opt/consul 用于存放consul运行时产生的文件

wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip
unzip -oq consul_0.6.4_linux_amd64.zip
mv consul /usr/local/bin/

启动consul

将host-1作为server节点

[root@host-1 ~]# nohup consul agent -server -bootstrap -data-dir /tmp/consul -bind=192.168.1.3 &

将host-2作为client节点

[root@host-2 ~]# nohup consul agent -data-dir /tmp/consul -bind=192.168.1.4 &

host-2加入集群

[root@host-2~]# consul join 192.168.1.3
Successfully joined cluster by contacting 1 nodes.

分别在host-1和host-2上执行,consul members来查看集群中是否有两个主机。

[root@host-2 tools]# consul members
Node  Address           Status  Type    Build  Protocol  DC
host-1   192.168.1.3:8301  alive   server  0.6.4  2         dc1
host-2   192.168.1.4:8301  alive   client  0.6.4  2         dc1

修改docker启动参数

cp /usr/lib/systemd/system/docker.service /etc/systemd/system/
vim /etc/systemd/system/docker.service

在ExecStart那行加上如下的选项,其中ens32是网卡名字:

--cluster-store=consul://localhost:8500 --cluster-advertise=ens32:2376

其中 cluster-store 的主机指定为localhost即可,cluster-advertise的ip可以指定为本机的网卡名ens32。

重启Docker

systemctl restart docker.service

开机自启动

systemctl enable docker.service
#ps -ef|grep docker
root 4114 1 10 16:58 ? 00:00:00 /usr/bin/dockerd --cluster-store=consul://localhost:8500 --cluster-advertise=br0:2376

创建overlay网络

默认情况下,docker启动后初始化3种网络,这3种都是不能删除的。

#docker network ls
NETWORK ID NAME DRIVER SCOPE
cb6e828e6135 bridge bridge local
0b3000a2130d host host local
43ffc5f76df5 none null local

在host1主机上创建overlay network:

docker network create -d overlay --subnet=10.0.0.0/24 net1

在其他主机上执行docker network ls,也会看到新建的这个名字叫net1的overlay网络。

下载centos镜像

docker pull hub.c.163.com/public/centos:7.2.1511

host1创建容器

docker run -itd --net=net1 --name=test1 --hostname=test1 --ip=10.0.0.11 hub.c.163.com/public/centos:7.2.1511

host2创建容器

docker run -itd --net=net1 --name=test2 --hostname=test2 --ip=10.0.0.12 hub.c.163.com/public/centos:7.2.1511

测试两台容器可以ping通

参考:

http://jkzhao.github.io/2017/09/05/overlay%E5%AE%9E%E7%8E%B0%E5%AE%B9%E5%99%A8%E8%B7%A8%E4%B8%BB%E6%9C%BA%E9%80%9A%E4%BF%A1/

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: