前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 实践之 Overlay网络

Docker 实践之 Overlay网络

原创
作者头像
懒人的小脑
修改2019-01-07 18:25:36
2.2K0
修改2019-01-07 18:25:36
举报

架构

  • 硬件
    • 操作系统:CentOS7(最小化安装,64位)
    • RAM:1Gb
    • HDD:8G
    • CPU:1核心
  • 软件
    • Docker-CE 18.09

Overlay网络配置

STEP1 安装并配置主机

使用上述软硬件架构创建3个VMs/hosts,每个host使用两个网络连接:一个桥接网络(网卡名称“enp0s3”)和一个Host-only网络(网卡名称“enp0s8”)

下面是它们的IP地址和主机名称:

  • Docker Host1
    • Host-only Adapter 静态IP地址:192.168.56.104
    • 主机名:docker1
  • Docker Host2
    • Host-only Adapter 静态IP地址:192.168.56.105
    • 主机名:docker2
  • Docker Host3
    • Host-only Adapter 静态IP地址:192.168.56.106
    • 主机名:docker3

主机名需要在集群中保持唯一命名,因为Key-value数据库需要使用主机名区分不同不同的节点,以及集群中使用主机名进行通信。确保每个节点都可以互相通信(例如在每个主机Ping其他两个Host-only IP地址)

STEP2 安装Docker ENGINE(CE)

参考文档:Docker帮助文档1 Docker帮助文档2

STEP3 配置Key-value数据库

Docker Overlay网络需要一个Key-value数据库存储网络状态的信息,如节点发现、网络、endpoints、IP地址等信息。Docker支持consul、Etcd、ZooKeeper等。

将docker3设置为多主机overlay网络的key-value数据库,运行consul容器:

代码语言:txt
复制
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

验证容器是否正常运行

代码语言:txt
复制
# docker ps
# docker port consul

最后,要设置防火墙放行TCP8500端口的流量

代码语言:txt
复制
# firewall-cmd --permanent --add-port 8500/tcp
success
# firewall-cmd --reload
success
# firewall-cmd --list-ports
8500/tcp
STEP4 配置集群中docker连接到Key-value数据库

编辑docker1和docker2的docker配置文件/usr/lib/systemd/system/docker.service

代码语言:txt
复制
ExecStart=/usr/bin/dockerd -H unix:// --cluster-store=consul://192.168.56.106:8500 --cluster-advertise=enp0s8:2376
  • --cluster-store:指定consul的地址
  • --cluter-advertise:告知consul本机的通信地址

重新启动docker,并验证:

代码语言:txt
复制
# systemctl daemon-reload;systemctl restart docker
$ docker info
...
Cluster Store: consul://192.168.56.106:8500
Cluster Advertise: 192.168.56.105:2376

另外docke3的consul的web页面(consul docker host IP:8500/ui/#/dc1/kv/docker/nodes/)也会显示docker1和2的信息

SETP6放行相关接口流量
  • 2375/tcp for cluster advertise
  • 7946/tcp for container network discovery
  • 7946/udp for container netwrok discovery
  • 4789/udp for the container overlay network
代码语言:txt
复制
# firewall-cmd --permanent --add-port 2375/tcp
success
# firewall-cmd --permanent --add-port 4789/udp
success
# firewall-cmd --permanent --add-port 7946/udp
success
# firewall-cmd --permanent --add-port 7946/tcp
success
# firewall-cmd --reload
success
# firewall-cmd --list-ports
2375/tcp 4789/udp 7946/udp 7946/tcp
STEP6创建overlay网络

创建docker网络,使用-d参数指定overlay驱动

代码语言:txt
复制
# docker network create -d overlay ov_net1
04a82c86fc9d881f5eed3ae2c95c51744eadcfe776773d07007c410f9fda67b6
# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
f2336c659345        bridge              bridge              local
db70ffad4d27        host                host                local
f95712d38794        none                null                local
04a82c86fc9d        ov_net1             overlay             global
STEP7将容器加入overlay网络
代码语言:txt
复制
docker run -itd --name bbox1 --network ov_net1 busybox

bbox1有两个网络接口eth1和eth0,eth1为连接到overlay网络的容器提供了访问外部网络的能力,通过docker创建的docker_gwbridge访问外部网络,容器的网关就是docker_gwbridge的IP地址。外部网络访问overlay网络的容器同样适用主机端口映射即可访问。

overlay网络中的容器可以互相通信,同时docker也实现了DNS服务。不同的overlay网络是互相隔离的,要想使不同overlay网络的容器互相通信,需要将容器同时连接到多个overlay的网络。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 架构
    • Overlay网络配置
      • STEP1 安装并配置主机
      • STEP2 安装Docker ENGINE(CE)
      • STEP3 配置Key-value数据库
      • STEP4 配置集群中docker连接到Key-value数据库
      • SETP6放行相关接口流量
      • STEP6创建overlay网络
      • STEP7将容器加入overlay网络
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档