对中的式网络详解

对中的式网络详解,第1张

对docker中的overlay式网络详解

本文主要介绍了docker中叠加网的详细讲解,有很好的参考价值,希望对大家有所帮助。来和边肖一起看看吧。

翻译自docker官方文档,原文:https://docs.docker.com/network/overlay/

覆盖网络将在多个docker守护程序所在的主机之间创建一个分布式网络。该网络将覆盖主机的唯一网络,并允许容器连接到它(包括集群服务中的容器)以进行安全通信。显然,docker处理docker守护进程的源容器和目标容器之间的数据报路由。

当您初始化集群(swarm)或将docker主机添加到现有集群时,将在主机上创建两个新网络:

称为入口的覆盖网络用于处理与集群服务相关的控制和数据传输。当您创建集群服务而没有将其连接到用户定义的覆盖网络时,默认情况下,它将连接到入口网络。

一个叫做docker_gwbridge的桥接网络。用于将此docker守护程序与集群中的其他守护程序连接起来。

您可以使用dockernetworkcreate命令创建用户定义的覆盖网络,就像创建用户定义的桥接网络一样。和服务容器可以同时连接到多个网络。而服务容器只能与其所在网络中的其他对象进行通信。

尽管群集服务和单个容器都可以连接到覆盖网络,但默认性能和配置是不同的。因此,本主题的以下内容将分为三个部分:适用于所有覆盖网络的内容;应用于网络中的集群服务;应用于由单个容器使用的覆盖网络。

适用于所有覆盖网络 *** 作

创建覆盖网络

先决条件

使用覆盖网络的docker守护程序所需的防火墙规则

要使覆盖网络中的docker主机能够相互通信,您需要打开以下端口:

1.TCP端口2377用于与集群管理相关的通信。

2.TCP和UDP端口7946,用于节点之间的通信。

3.UDP端口4789,用于覆盖网络上的数据传输

在创建覆盖网络之前,您应该通过dockerswarminit将docker守护进程初始化为集群管理器,或者通过dockerswarmjoin将其添加到现有集群中。

无论哪种方式,默认情况下都会创建并使用名为ingress的覆盖网络。即使您不打算使用集群服务,也要这样做。

您可以在将来创建用户定义的覆盖网络。

要为群集服务创建覆盖网络,请使用以下命令:

$dockernetworkcreate-doverlaymy-overlay

要创建一个可用于集群服务和单个容器的网络,以便与其他docker守护进程中的单个容器进行通信,请添加-attachable标记:

$dockernetworkcreate-doverlay-attachedmy-attached-overlay

您可以指定IP地址范围、子网、网关和其他选项。详见docker网络创建帮助。

覆盖网络上的加密传输

默认情况下,所有与服务管理相关的传输都在GCM模式下使用AES算法进行加密。集群中的管理节点每12小时轮换一次加密密钥。

如果您想要加密应用程序数据,请在创建网络时添加-optencrypted。此参数支持vxlan级别的IPSEC加密。此 *** 作将导致明显的性能下降,因此在将其应用于生产环境之前,应该对其进行测试。

当您打开覆盖加密时,docker将在网络中调度服务的所有节点上创建IPSEC隧道。这些隧道也会在GCM模式下用AES算法加密,加密密钥每12小时自动轮换一次。

不要将Windows节点添加到加密通信的覆盖网络中。

覆盖网络上的加密通信不支持Windows。如果Windows节点尝试使用加密通信连接到覆盖网络,它不会报告错误,但是该节点将无法与其他节点通信。

以集群模式和独立容器覆盖网络

您可以通过使用-optencrypted-attachable或向网络添加未管理的容器来使用覆盖网络功能。

$dockernetworkcreate-optencrypted-driveroverlay-attachedmy-attached-multi-host-network

修改默认入口网络

大多数用户不需要配置入口网络。但是docker17.05和更高版本允许您这样做。如果自动选择的子网段与网络中的现有网络冲突,或者如果您需要修改其他底层网络设置(如MTU),则此功能非常有用。

修改入口网络需要删除并重新创建它。这要求您在集群中创建服务之前完成修改。如果有发布端口的服务,请在删除入口网络之前删除这些服务。

当入口网络不存在时,没有发布端口的现有服务可以继续提供服务,但没有负载均衡功能。发布端口的服务,比如发布80端口的WordPress服务,会受到影响。

用dockernetworkinspectingress检查入口网络,然后删除容器中所有连接到入口的服务。这些服务是发布端口服务,例如发布80端口WordPress服务。如果不停止所有这些服务,下一步将会失败。

删除入口网络。

$docker网络rm入口

警告!在移除路由网状网络之前,确保您的群中的所有节点运行相同的docker引擎版本。否则,移除可能无效,并且新创建的入口网络的功能将受到损害。

您确定要继续吗?[是/否]

3.使用入口标签和您想要的配置创建一个新的覆盖网络。以下示例将MTU配置为1200,将子网配置为10.11.0.0/16,将网关配置为10.11.0.2。

$dockernetworkcreate\ --driveroverlay\ --ingress\ --subnet=10.11.0.0/16\ --gateway=10.11.0.2\ --optcom.docker.network.mtu=1200\ my-ingress

注意:您也可以用其他名称命名ingerss网络,但只能有一个。如果你试图创造第二个,你会失败。

4.重新启动在第一步中停止的服务。

修改docker_gwbridge接口

Docker_gwbridge是一个虚拟网桥,用于连接覆盖网络(包括入口网络)和特定Docker守护进程的物理网络。当您初始化集群或将docker主机添加到集群时,docker会自动创建它,但它不是docker设备。它存在于docker主机的内核中。如果要修改其配置,必须在将主机加入集群之前进行,或者暂时将主机从集群中分离。

停靠码头

删除docker_gwbridge接口

$sudoip链接设置docker_gwbridge关闭

$sudoIPlinkdelnamedocker_GWbridge

3.启动docker,不加入或初始化集群

4.使用dockernetworkcreate命令以及您的自定义设置,手动创建或重新创建docker_gwbridge网桥。以下示例使用10.11.0.0/16子网。

$dockernetworkcreate\ --subnet10.11.0.0/16\ --optcom.docker.network.bridge.name=docker_gwbridge\ --optcom.docker.network.bridge.enable_icc=false\ --optcom.docker.network.bridge.enable_ip_masquerade=true\ docker_gwbridge

5.初始化或加入群集。由于桥已经存在,docker不会再用默认配置创建它。

群集服务中的 *** 作

覆盖网络上的发布端口

连接到同一个覆盖网络的集群服务将向彼此公开所有端口。如果要从服务外部访问某个端口,必须在docker服务创建或docker服务更新中使用-p或-publish发布该端口。

支持传统的冒号分段语法和新的逗号分段语法。

较长的语法更好,因为它在某种意义上是不言自明的。

参数 形容 -p8080:80o或-ppublished=8080,target=80 将服务中的TCP端口80映射到路由中的端口8080 。-p8080:80/udp或-ppublished=8080,target=80,protocol=udp 将服务中的UDP端口80映射到路由中的端口8080 。-p8080:80/tcp-p8080:80/udp或-ppublished=8080,target=80,protocol=tcp-ppublished=8080,target=80,protocol=UDP 将服务中的TCP端口80映射到路由中的端口8080。

绕过群集服务的路由网络

默认情况下,群集服务通过路由网络发布端口。当您连接到任何群集节点上的已发布端口时(无论它是否运行该端口所代表的服务),您都可以被重定向到运行指定服务的节点。Docker是集群服务的有效负载平衡器。使用路由网络的服务以虚拟IP模式(VIP)运行。即使服务运行在一个节点上(标记为-global),也会使用路由网络。当使用路由网络时,不能保证哪个节点将处理客户端的请求。

要绕过路由网络,您可以在DNS循环(DNSRR)模式下启动该服务。将-endpoint-mode标志设置为dnsrr。您必须在服务的前端运行自己的负载平衡器。docker主机上服务名称的DNS查询将返回运行指定服务的节点的IP地址集。将负载平衡器配置为使用此列表并平衡节点之间的通信。

将控制流与数据流分开

默认情况下,控制流联系集群管理员,并在同一网络上运行的应用程序之间传输,尽管控制流是加密的。您可以配置docker来处理不同网络接口的不同流。当初始化或加入集群时,分别指定-advertise-addr和-datapath-addr。您必须在要加入群集的每个节点上执行此 *** 作。

重叠网络上独立集装箱可用的 *** 作

将独立容器连接到覆盖网络

入口网络是在没有指定-attachable标记的情况下创建的,这意味着只有群集服务可以使用它,而独立容器不能。您可以将独立容器连接到用户定义的网络,该网络是在创建时指定的-attachablebiaojidoverlaynetwork。这使得运行在不同Docker上的独立容器能够进行通信,而无需在特定的Docker主机上设置路由。

发布端口

参数 形容 -p8080:80 将服务中的TCP端口80映射到路由中的端口8080 -p8080:80/udp 将服务中的udp端口80映射到路由中的端口8080 -p8080:80/TCP-p8080:80/UDP 将服务中的TCP端口80映射到路由中的端口8080,将服务中的UDP端口80映射到路由中的端口8080

以上docker对叠加网的详细解释,就是边肖分享的全部内容。希望给大家一个参考,支持我们。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/774092.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存