本文主要介绍了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_gwbridge5.初始化或加入群集。由于桥已经存在,docker不会再用默认配置创建它。
群集服务中的 *** 作
覆盖网络上的发布端口
连接到同一个覆盖网络的集群服务将向彼此公开所有端口。如果要从服务外部访问某个端口,必须在docker服务创建或docker服务更新中使用-p或-publish发布该端口。
支持传统的冒号分段语法和新的逗号分段语法。
较长的语法更好,因为它在某种意义上是不言自明的。
绕过群集服务的路由网络
默认情况下,群集服务通过路由网络发布端口。当您连接到任何群集节点上的已发布端口时(无论它是否运行该端口所代表的服务),您都可以被重定向到运行指定服务的节点。Docker是集群服务的有效负载平衡器。使用路由网络的服务以虚拟IP模式(VIP)运行。即使服务运行在一个节点上(标记为-global),也会使用路由网络。当使用路由网络时,不能保证哪个节点将处理客户端的请求。
要绕过路由网络,您可以在DNS循环(DNSRR)模式下启动该服务。将-endpoint-mode标志设置为dnsrr。您必须在服务的前端运行自己的负载平衡器。docker主机上服务名称的DNS查询将返回运行指定服务的节点的IP地址集。将负载平衡器配置为使用此列表并平衡节点之间的通信。
将控制流与数据流分开
默认情况下,控制流联系集群管理员,并在同一网络上运行的应用程序之间传输,尽管控制流是加密的。您可以配置docker来处理不同网络接口的不同流。当初始化或加入集群时,分别指定-advertise-addr和-datapath-addr。您必须在要加入群集的每个节点上执行此 *** 作。
重叠网络上独立集装箱可用的 *** 作
将独立容器连接到覆盖网络
入口网络是在没有指定-attachable标记的情况下创建的,这意味着只有群集服务可以使用它,而独立容器不能。您可以将独立容器连接到用户定义的网络,该网络是在创建时指定的-attachablebiaojidoverlaynetwork。这使得运行在不同Docker上的独立容器能够进行通信,而无需在特定的Docker主机上设置路由。
发布端口
以上docker对叠加网的详细解释,就是边肖分享的全部内容。希望给大家一个参考,支持我们。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)