overlay跨主机容器通信

优点:

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

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

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

image.png

配置:

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

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

参数分解: 
-h   ### 指定容器里面主机名
 --name   ###指定容器的名字
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
image.png

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上外网

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容