overlay跨主机容器通信

优点:

  • 可以自动分配IP地址不需要手动指定
  • 集中起来管理IP地址的数据库,不需要手动安装,起一个容器就好,集中管理IP地址分配情况,避免IP地址冲突

consul服务类似于redis里的key:value类型存储的是键值对,可以当数据库来使用

准备环境(至少需要两台台机器)这边准备三台

overlay跨主机容器通信_第1张图片
image.png

配置:

在consul服务上 先pull一个consul的镜像服务

docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

参数分解: 
-h   ### 指定容器里面主机名
 --name   ###指定容器的名字
overlay跨主机容器通信_第2张图片
image.png

docker 01 和 02 上

## docker01:
{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "insecure-registries":["10.0.0.11"],
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.13:8500",
  "cluster-advertise": "10.0.0.11:2376"

}
## docker02:
vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "insecure-registries":["10.0.0.11"],
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.13:8500",
  "cluster-advertise": "10.0.0.12:2376"
}

配置文件
hosts:监听的信息 通过sock的通信
cluster-store:集群存储信息
cluster-advertise:集群客户端信息

重启:

systemctl restart docker
  • 如果重启有报错信息


    image.png

解决办法

查看一下报错的配置文件路径
systemctl status docker

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

删掉!


image.png
systemctl daemon-reload 
systemctl start docker
overlay跨主机容器通信_第3张图片
image.png

overlay跨主机容器通信_第4张图片
image.png

看到以上信息后,创建overlay全局网络

## 只要在一个节点创建会自动同步到其他节点
docker network create -d overlay --subnet 172.16.1.0/24 --gateway 172.16.1.254 ol1

启动容器测试

### docker01
docker run -it --network ol1 --name couldman01 busybox /bin/sh

### docker02
docker run -it --network ol1 --name couldman02 busybox /bin/sh

这里测试ping的时候不需要ip地址 只需要知道容器名,自动解析成IP地址
image.png

IP地址会自动分配全局唯一不会冲突 ,IP地址也会记录到consul数据里

会自动分配两个IP地址一个是跨宿主机通信用,另一个是用来上外网用 查看网关route -n

上网通信原理

宿主机默认eth0(10.0.0.11)网卡,overlay启动之后会自动起一个网关(bw_gatevay/172.18.0.1), 容器有两个IP地址eth1和eth0,eht1会通过宿主机的网关,nat转换,内核转发在到宿主机eth0上外网,宿主机之间通信 如果两台容器 ,两台容器的eth0打通一个隧道(类似交换机),eht0实现跨宿主机之间容器通信,eth1上外网

你可能感兴趣的:(overlay跨主机容器通信)