docker Use overlay networks

简介

overlay 网络驱动程序在多个Docker守护进程主机之间创建一个分布式网络.这个网络位于特定于主机的网络之上,允许连接到它的容器(包括群集服务容器)安全地通信。Docker透明地处理每个数据包与正确的Docker守护进程主机和正确的目标容器之间的路由。

当你初始化一个swarm或者将一个Docker主机加入到一个已有的swarm中时,会在这个Docker主机上创建两个新的网络:

  • 覆盖网络 [ingress] 处理与swarm service相关的控制和数据流量。 当您创建swarm service而不将其连接到用户定义的覆盖网络时,默认情况下它连接到ingress网络。
  • 桥接网络 [docker_gwbridge] 它将单个Docker守护进程连接到swarm中的其他守护进程。

你可以使用docker network create创建用户自定义的 overlay 网络,与创建用户自定义的桥接网络的方法相同。service或容器可以同时连接到多个网络。service或容器只能通过它们各自连接的网络进行通信。

尽管您可以将swarm service和独立容器连接到覆盖网络,但默认行为和配置关注点是不同的。因此,本主题的其余部分被划分为适用于所有覆盖网络的操作,适用于swarm service网络的操作,以及适用于独立容器使用的覆盖网络的操作。

覆盖网络操作

创建覆盖网络

基本条件

  • 开放以下端口
    • TCP端口2377用于集群管理通信
    • TCP和UDP端口7946用于节点之间的通信
    • UDP端口4789用于覆盖网络流量
  • 在创建覆盖网络之前,您需要使用Docker swarm init将Docker守护进程初始化为swarm manager,或者使用Docker swarm join将其连接到现有的集群。这两种方式都会创建默认的入口覆盖网络,默认情况下swarm service使用该网络.即使您从未计划使用群集服务,也需要这样做。然后,您可以创建其他用户定义的覆盖网络。

要创建一个用于swarm服务的覆盖网络,可以使用如下命令:

[root@node1 ~]# docker network create -d overlay my-overlay
bbuxnziaskceip2pr7zu48hw1

要创建一个覆盖网络,可以让swarm服务或独立容器与运行在其他Docker守护进程上的其他独立容器通信,添加--attachable

docker network create -d overlay --attachable my-attachable-overlay

您可以指定IP地址范围、子网、网关和其他选项。有关详细信息,请参见docker network create --help。

在覆盖网络上加密通信

自定义默认的ingress网络

大多数用户从来不需要配置ingress网络,但Docker 17.05及更高版本允许这样做。

自定义docker_gwbridge接口

docker_gwbridge是一个虚拟桥,它将覆盖网络(包括入口网络)连接到单个Docker守护进程的物理网络。当您初始化swarm或将Docker主机加入swarm时,Docker会自动创建它,但它不是Docker设备。它存在于Docker主机的内核中。如果您需要自定义它的设置,则必须在将Docker主机加入到swarm之前或临时将主机从swarm中移除之后进行此操作。

  1. Stop Docker.
  2. 删除现有的docker_gwbridge接口
$ sudo ip link set docker_gwbridge down

$ sudo ip link del dev docker_gwbridge
  1. start docker,不要加入或初始化swarm
  2. 使用自定义设置手动创建或重新创建docker_gwbridgebridge,使用docker network create命令。本例使用子网10.11.0.0/16。有关可定制选项的完整列表,请参见桥接驱动程序选项
$ docker network create \
--subnet 10.11.0.0/16 \
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=false \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
docker_gwbridge
  1. 初始化或加入swarm。由于bridge已经存在,Docker不使用自动设置创建桥。

swarm service 的操作

在覆盖网络上发布端口

swarm service 连接到相同的覆盖网络,有效地将所有端口相互公开.要使端口在外部可访问,该端口必须使用-p or --publish在docker service create or docker service update时发布。既支持传统的冒号分隔语法,也支持较新的逗号分隔值语法。建议使用长语法。

Flag valueDescription
-p 8080:80 or
-p published=8080,target=80将服务上的TCP端口80映射到路由网格上的端口8080。
-p 8080:80/udp or
-p published=8080,target=80,protocol=udp将服务上的UDP端口80映射到路由网格上的端口8080。
-p 8080:80/tcp -p 8080:80/udp or
-p published=8080,target=80,protocol=tcp -p published=8080,target=80,protocol=udp将服务上的TCP端口80映射到路由网格上的TCP端口8080,将服务上的UDP端口80映射到路由网格上的UDP端口8080。
Bypass the routing mesh for a swarm service

隔离控制网络和数据网络

默认情况,集群管理相关的流量与应用程序之间的通信运行在相同的网络上,通过swarm中的流量是加密的。您可以配置Docker来使用单独的网络接口来处理两种不同类型的流量。初始化或加入swarm时指定--advertise-addr and --datapath-addr。必须为加入群集的每个节点执行此操作。

独立容器的操作在覆盖网络中
将独立容器附加到覆盖网络

ingress网络是在没有--attachable的情况下创建的,这意味着只有集群服务可以使用它,而不是独立的容器。您可以将独立的容器连接到用户定义的覆盖网络,这些覆盖网络使用--attachable标志创建。这使运行在不同Docker守护进程上的独立容器能够进行通信,而不需要在单个Docker守护进程主机上设置路由。

Publish ports
Flag valueDescription
-p 8080:80将容器中的TCP端口80映射到覆盖网络上的端口8080。
-p 8080:80/udp将容器中的UDP端口80映射到覆盖网络上的端口8080。
-p 8080:80/sctp将容器中的SCTP端口80映射到覆盖网络上的端口8080。
-p 8080:80/tcp -p 8080:80/udp将容器中的TCP端口80映射到覆盖网络上的TCP端口8080,将容器中的UDP端口80映射到覆盖网络上的UDP端口8080。
容器的发现

对于大多数情况,您应该通过service name连接,该名称由支持服务的所有容器(“任务”)进行负载平衡和处理。要获取支持服务的所有任务的列表,请执行DNS查找tasks..

https://docs.docker.com/network/overlay/

转载于:https://www.cnblogs.com/mldblue/articles/11038367.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值