beat·365(中国) - 官方网站-最新App Store下载beat·365(中国) - 官方网站-最新App Store下载

Docker 参考架构:打算可扩展可移植的 Docker 容器

2023-08-01| 发布者: admin| 查看: |

  Docker 容器将软件封装到一个完好的文献体例当中,这个文献体例包罗软件运转所需的全数:代码、运转时、体例器械、体例库,整个能装配正在效劳器上的东西。这确保了软件正在分歧的处境下都能有相似的运转状况。默认状况下, 容器将各个使用相互隔脱离并将软件与底层根基步骤隔脱离,同时为使用供应特地的一层回护。

  那要是使用必要和其他使用、主机或表部收集彼此通讯呢?您会怎样正在确保使用可移植性、效劳呈现、负载平衡、安笑性、高机能和可扩展性的同时,计划一个具有妥善连通性的收集呢?本文档将办理这些收集计划的题目,供应可用的器械以及通用的安顿形式。作品不会指定或引荐物理收集的计划,但会给出少少两全使用的需求与物理收集要求统造的 Docker 收集计划步骤。

  正在不绝阅读本文之前,引荐先熟练 Docker 的根基观点以及 Docker Swarm:

  微效劳的引入增加了使用的领域,这使得连通性和阻隔性正在使用中更为紧要。Docker 收集的计划形而上学是“使用驱动”,旨正在为收集运营者供应更多抉择和圆活性,同时也为使用开垦者供应更高主意的概括。

  正如其他整个计划一律,收集计划也是个量度的经过。Docker EE和 Docker 生态向收集工程师供应了多个器械,以杀青使用和处境之间的量度。分歧的器械抉择有分歧的便宜和弃取。本篇指南的余下部门将一一周密认识这些抉择,力图收集工程师们能够理会哪种最适于他们的处境。

  Docker 仍然开垦出了一种新的使用步伐交付形式,通过这种形式,容器也调换了收集接入的某些方面。以下几个话题关于容器化的使用而言,都是常见的计划题目:

  Docker 的收集架构是竖立正在一系列称为容器收集模子(Container Networking Model, CNM)的接口之上的。CNM 的计划形而上学是为了供应跨多种根基步骤的使用可移植性。这一模子正在使用可移植性和充裕愚弄根基步骤自有个性、才能之间,获得了一个均衡。

  正在 CNM 之中,有几个高主意的部件。它们一共都是操作体例和根基硬件弗成感的,以是使用能够正在任何根基步骤栈中具有划一的浮现。

  —— 一个沙箱包罗容器的收集栈筑设。这包罗容器接口的收拾、道由表和 DNS 设立。沙箱的杀青能够是 Linux Network Namespace,FreeBSD Jail 或是其他雷同的技艺。一个沙箱能够包罗来自分歧收集的多个端点。

  —— 端点掌握将沙箱与收集相连。端点部件的存正在使得本质的收集贯串能够从使用中概括出来。这有帮于维护可移植性,使效劳能够采用分歧的收集驱动,而无需顾虑怎样与收集相连。

  —— CNM 并不是用 OSI 模子中的观点来讲明“收集”。收集部件的杀青能够通过 Linux bridge,VLAN 等等。收集便是一个彼此连通的若干端点的集结。与收集不连通的端点不拥有收集连通性。

  容器收集模子 CNM 供应了两个可插拔的怒放接口,供用户、社区和供应商操纵,以更好地愚弄收集中的其他效力、可见性或可控性。

  —— Docker 收集驱动供应使收集运转的本质杀青。它们是可插拔的,以是能够操纵分歧的驱动步伐并轻松交换以声援分歧的用例。能够正在给定的 Docker Engine 或群集上同时操纵多个收集驱动步伐,但每个 Docker 收集仅通过单个收集驱动步伐举办实例化。有两品种型的 CNM 收集驱动步伐:

  —— 原生收集驱动步伐是 Docker Engine 的原生部门,由 Docker 供应。有多种驱动步伐可供抉择,声援分歧的效力,如遮盖收集或当地网桥。

  —— 长途收集驱动是社区和其他供应商创筑的收集驱动步伐。这些驱动步伐可用于和现有软硬件相集成。用户还能够正在必要用到现有收集驱动步伐不声援的特定效力的状况下创筑自身的驱动步伐。

  —— Docker 拥有本机 IP 地点收拾驱动步伐,若未另加指定,将为收集和端点供应默认子网或 IP 地点。IP 地点也能够通过收集、容器和效劳创筑号令手动分派。咱们同样具有长途 IPAM 驱动步伐,可与现有 IPAM 器械集成。

  Docker 原生收集驱动步伐是 Docker Engine 的一部门,不必要任何特地的模块。它们通过准绳 Docker 收集号令挪用和操纵。共有以下几种原生收集驱动步伐。

  如docker network ls号令结果所示,Docker 收集驱动步伐拥有周围的观点。收集周围是驱动步伐的效率域,能够是当地周围或 Swarm 集群周围。当地周围驱动步伐正在主机周围内供应贯串和收集效劳(如 DNS 或 IPAM)。Swarm 周围驱动步伐供应跨群集的贯串和收集效劳。集群周围收集正在全盘群聚积拥有相似的收集 ID,而当地周围收集正在每个主机上拥有独一的收集 ID。

  以下社区和供应商创筑的长途收集驱动步伐与 CNM 兼容,每个都为容器供应特别的效力和收集效劳。

  社区和供应商创筑的 IPAM 驱动步伐还可用于供应与现有体例或卓殊效力的集成。

  Linux 内核拥有额表成熟和高机能的 TCP/IP 收集栈杀青(不但是 DNS 和 VXLAN 等其他原生内核效力)。Docker 收集操纵内核的收集栈动作初级原语来创筑更高级其余收集驱动步伐。简而言之,Docker 收集便是Linux 收集。

  现有 Linux 内核效力的这种杀青确保了高机能和硬朗性。最紧要的是,它供应了跨很多刊行版和版本的可移植性,从而巩固了使用步伐的可移植性。

  Docker 操纵了几个 Linux 收集根基模块来杀青其原生 CNM 收集驱动步伐,包罗Linux 网桥,收集定名空间,veth和iptables。这些器械的组合(动作收集驱动步伐杀青)为丰富的收集战略供应转发轨则,收集分段和收拾器械。

  Linux 网桥是第 2 层装备,它是 Linux 内核中物理换取机的虚拟杀青。它通过检视流量动态研习 MAC 地点,并据此转发流量。Linux 网桥平凡用于很多 Docker 收集驱动步伐中。Linux 网桥不应与 Docker 收集驱动步伐 bridge 殽杂,后者是 Linux 网桥的更高级别杀青。

  Linux 收集定名空间是内核中阻隔的收集栈,拥有自身的接口,道由和防火墙轨则。它掌握容器和 Linux 的安笑方面,用于阻隔容器。正在收集术语中,它们雷同于 VRF,它将主机内的收集操纵和数据阻隔。收集定名空间确保统一主机上的两个容器无法彼此通讯,乃至无法与主机自己通讯,除非通过 Docker 收集举办筑设。平凡,CNM 收集驱动步伐为每个容器杀青孑立的定名空间。可是,容器能够共享相似的收集定名空间,乃至能够是主机收集定名空间的一部门。主机收集定名空间容纳主机接口和主机道由表。此收集定名空间称为整体收集定名空间。

  虚拟以太网装备或简称veth是 Linux 收集接口,充任两个收集定名空间之间的贯串线。veth 是一个全双工链接,每个定名空间中都有一个接口。一个接口中的流量被教导出另一个接口。Docker 收集驱动步伐愚弄 veth 正在创筑 Docker 收集时供应名称空间之间的显式贯串。当容器贯串到 Docker 收集时,veth 的一端放正在容器内(平凡被视为 ethX 接口),而另一端贯串到 Docker 收集。

  iptables是原生包过滤体例,自 2.4 版本今后平昔是 Linux 内核的一部门。它是一个效力丰盛的 L3/L4 防火墙,为数据包的符号,伪装和甩掉供应轨则链。本机 Docker 收集驱动步伐平凡操纵 iptables 来阻隔收集流量,供应主机端口照射,并符号流量以杀青负载均衡计划。

  除了撒播操纵面板数据除表,Docker 分散式收集操纵面板还收拾 Swarm 集群的 Docker 收集状况。它是 Docker Swarm 集群的内置效力,不必要任何特地的组件,如表部 KV 存储。操纵平面操纵基于SWIM的Gossip条约正在 Docker 容器集群中撒播收集状况音信和拓扑。Gossip 条约额表有用地杀青了集群内的最终划一性,同时保留了额表大领域集群中讯息巨细,打击检测功夫和收敛功夫的恒定速度。这可确保收集可以跨多个节点举办扩展,而不会引入缩放题目,比如收敛慢慢或误报节点打击。

  操纵面板额表安笑,通过加密通道供应机要性、完好性和身份验证。它也是每个收集的鸿沟,大大节减了主机收到的更新。

  它由多个组件构成,这些组件协同使命以杀青跨大领域收集的疾捷收敛。操纵平面的分散式个性可确保群集操纵器打击不会影响收集机能。

  host收集驱动关于 Docker 的新用户来说是最熟练的,由于它与 Linux 没有 Docker 的状况下所操纵的收集筑设相似。--net=host有用地封闭了 Docker 收集,容器操纵主机操作体例的 host(或默认)收集栈。

  平凡正在操纵其他收集驱动步伐时,每个容器都被放正在其自身的收集定名空间(或沙箱)中,以杀青相互间齐全的收集阻隔。操纵host驱动步伐的容器都正在统一主机收集定名空间中,并操纵主机的收集接口和 IP 客栈。主机收集中的整个容器都可以正在主机接口上彼此通讯。从收集角度来看,它们相当于正在没有操纵容器技艺的主机上运转的多个经过。由于它们操纵相似的主机接口,于是随意两个容器都弗成以绑定到统一个 TCP 端口。要是正在统一主机上部署多个容器,或者会导致端口争用。

  正在此示例中,当容器操纵host收集时,主机,C1和nginx都共享相似的eth0接口。这使得host收集不适合多租户或对安笑性央求高的使用步伐。host形式的容器能够拜望主机上的其他任一容器。这种状况下,能够操纵localhost正在容器之间举办通讯,如示例中所示,从C1实施curl nginx可得胜拜望。

  操纵host驱动步伐,Docker 不收拾容器收集栈的任何部门,比如端口照射或道由轨则。这意味着像-p和--icc如许的常见收集标识对host驱动步伐没有任何意旨,它们被马虎了。这确实使host收集成为最大略和最低延迟的收集驱动步伐。流量途径直接从容器经过流向主机接口,供应相当于非容器化经过的裸机机能。

  齐全的主机拜望权限和无主动战略收拾或者使host驱动步伐难以动作通用收集驱动步伐。可是,host确实有少少意思的性子,或者合用于超高机能使用步伐或使用步伐打击解除等场景。

  正在任何运转 Docker Engine 的主机上,默认状况下都有一个名为 bridge 确当地 Docker 收集。此收集操纵桥领受集驱动步伐创筑,该驱动步伐实例假名为 docker0 的 Linux 网桥。这听起来或者令人狐疑。

  正在独立的 Docker 主机上,要是未指定其他收集,则bridge是容器贯串的默认收集。正在以下示例中,创筑了一个没有收集参数的容器。Docker Engine 默认将其贯串到bridge收集。正在容器内部,注视由bridge驱动步伐创筑的 eth0,并由 Docker 本机 IPAM 驱动步伐给出一个地点。

  容器接口的 MAC 地点是动态天生的,并嵌入 IP 地点以避免冲突。这里ac:11:00:02对应于172.17.0.2。

  主机上的器械brctl显示主机收集定名空间中存正在的 Linux 网桥。它显示了一个名为docker0的网桥。docker0有一个接口vetha3788c4,它供应从网桥到容器c1内的eth0接口的贯串。

  正在容器c1内部,容器道由表将流量教导到容器的eth0,从而传输到docker0网桥。

  容器能够拥有零到多个接口,简直取决于它贯串的收集数目。一个 Docker 收集只可为收集中的每个容器供应一个接口。

  如主机道由表中所示,整体收集定名空间中的 IP 接口现正在包罗docker0。主机道由表供应了表部收集上docker0和eth0之间的贯串,达成了从容器内部到表部收集的途径。

  默认状况下,bridge将从以下周围分派一个子网,172.[17-31].0.0/16 或 192.168.[0-240].0/20,它与任何现有主机接口不重叠。默认的bridge收集也能够筑设为用户供应的地点周围。其余,现有的 Linux 网桥可直接用于bridge收集,而不必要 Docker 其它创筑一个。相闭自界说网桥的更多音信,请转至Docker Engine 文档。

  除了默认收集,用户还能够创筑自身的收集,称为用户自界说收集,能够是任何收集驱动类型。用户界说的bridge收集,相当于正在主机上设立新的 Linux 网桥。与默认bridge收集分歧,用户界说的收集声援手动 IP 地点和子网分派。要是未给出赋值,则 Docker 的默认 IPAM 驱动步伐将分派私有 IP 空间中可用的下一个子网。

  接下来,正在用户界说的bridge收集下面创筑了两个贯串到它的容器。指定了子网,收集名为my_bridge。一个容器未取得 IP 参数,以是 IPAM 驱动步伐会为其分派子网中的下一个可用 IP, 另一个容器已指定 IP。

  列出整体收集定名空间接口,能够看到已由 Docker Engine 实例化的 Linux 收集。每个veth和 Linux 网桥接口都显示为个中一个 Linux 网桥和容器收集定名空间之间的链接。

  默认状况下,统一个 Docker 收集上的整个容器(多主机集群周围或当地周围)正在整个端口上都能够彼此贯串。分歧 Docker 收集之间的通讯以及源自 Docker 表部的容器入站流量城市颠末防火墙。这是出于根基的安笑斟酌,能够回护容器使用步伐免受表部寰宇的影响。这正在收集安笑中有更周密的概述。

  关于群多半类型的 Docker 收集(包罗bridge和overlay),必需明了授予使用步伐的表部入站拜望权限,这是通过内部端口照射达成的。Docker 将主机接口上公然的端口颁发到内部容器接口。下图描画了到容器C2的入站(底部箭头)和出站(顶部箭头)流量。默认状况下容许出站(egress)容器流量。由容器启动的出口贯串被伪装或 SNAT 到权且端口(平凡正在 32768 到 60999 的周围内)。返回流量也可经由此链接,以是容器正在权且端口上操纵主机的最佳可道由 IP 地点。

  Ingress 拜望是通过显式端口颁发供应的。端口颁发由 Docker Engine 达成,能够通过 UCP 或 Engine CLI 举办操纵。能够将特定或随机抉择的端口筑设为公然效劳或容器。能够将端口设立为侦听特定(或整个)主机接口,并将整个流量从此端口照射到容器内的端口和接口。

  相闭正在 Docker Engine 群聚积闪现容器和效劳的音信,请阅读Swarm 效劳的表部拜望闭系作品。

  原生 Dockeroverlay收集驱动步伐从基础上简化了多主机收集中的很多题目。操纵overlay驱动步伐,多主机收集是 Docker 中的一等公民,无需表部筑设或组件。overlay操纵 Swarm 分散式操纵面板,正在额表大领域的集群中供应聚积化收拾、坚固性和安笑性。

  overlay驱动步伐操纵行业准绳的 VXLAN 数据平面,将容器收集与底层物理收集(underlay)分袂。Docker overlay 收集将容器流量封装正在 VXLAN 标头中,容许流量穿过第 2 层或第 3 层物理收集。无论底层物理拓扑构造怎样,overlay 使收集分段圆活且易于操纵。操纵准绳 IETF VXLAN 标头有帮于准绳器械检验和认识收集流量。

  自 3.7 版本今后,VXLAN 平昔是 Linux 内核的一部门,而 Docker 操纵内核的原生 VXLAN 效力来创筑遮盖收集。Docker overlay 数据链道齐全正在内核空间中。如许能够节减上下文切换,节减 CPU 开销,并正在使用步伐和物理 NIC 之间杀青低延迟、直接的数据通道。

  IETF VXLAN(RFC 7348)是一种数据层封装方式,它通过第 3 层收集遮盖第 2 层网段。VXLAN 旨正在用于准绳 IP 收集,声援共享物理收集根基架构上的大领域多租户计划。现有的内部安顿和基于云的收集能够无感知地声援 VXLAN。

  VXLAN 界说为 MAC-in-UDP 封装,将容器第 2 层的帧数据就寝正在底层 IP/UDP 头中。底层 IP/UDP 报头供应底层收集上主机之间的传输。overlay 是无状况 VXLAN 地道,其动作加入给定 overlay 收集的每个主机之间的点对多点贯串而存正在。因为遮盖层独立于底层拓扑,以是使用步伐变得更具可移植性。以是,无论是正在当地,正在开垦职员桌面上如故正在大家云中,都能够与使用步伐沿途传输收集战略和贯串。

  正在此图中,浮现了 overlay 收集上的数据包流。以下是c1正在其共享 overlay 收集上发送c2数据包时爆发的设施:

  举办 DNS 查找。因为两个容器位于统一个 overlay 收集上,以是 Docker Engine 当地 DNS 效劳器将

  该帧由 overlay 收集驱动步伐用 VXLAN 头封装。分散式 overlay 操纵面板收拾每个 VXLAN 地道端点的场所和状况,以是它大白

  封装后,数据包将被发送。物理收集掌握将 VXLAN 数据包道由或桥接到无误的主机。

  数据包来到 host-B 的 eth0 接口,并由 overlay 收集驱动步伐解封装。来自

  正在 overlay 收集创筑时期,Docker Engine 会正在每台主机上创筑 overlay 所需的收集根基架构。每个 overlay 创筑一个 Linux 网桥及其相闭的 VXLAN 接口。仅当正在主机上部署贯串到该收集的容器时,Docker Engine 才会智能地正在主机上实例化遮盖收集。这能够防卫不存正在贯串容器的 overlay 收集伸张。

  创筑 overlay 收集时,请注视正在主机内部创筑了多个接口和网桥,以及此容器内的两个接口。

  正在容器内部创筑了两个接口,这两个接口对应于主机上现正在存正在的两个网桥。正在 overlay 收集上,每个容器起码有两个接口,离别将它贯串到遮盖层和 docker_gwbridge。

  Swarm 和 UCP 声援对群集端口颁发除表的效劳拜望。效劳的入站和出站不依赖于聚积式网闭,而是依赖于运转特定效劳使命的主机上的分散式入站/出站。效劳有两种端口颁发形式,host形式和ingress形式。

  ingress形式端口颁发愚弄Swarm Routing Mesh正在效劳中的使命之间杀青负载平衡。ingress形式正在每个UCP/Swarm 节点上颁发闪现的端口。传到颁发端口的入站流量由道由网格举办负载均衡,并通过轮回负载均衡定向到效劳中康健的使命之一。尽管给定主机未运转效劳使命,端口也会正在主机上颁发,并对拥有使命的主机举办负载均衡。

  host形式端口颁发仅正在运转特定效劳使命的主机上公初步口。端口直接照射到该主机上的容器。每个主机上只可运转给定效劳的单个使命,以防卫端口冲突。

  颁发形式有良多好的用例。ingress形式合用于拥有多个副本并必要正在这些副本之间举办负载均衡的效劳。要是其他器械已供应表部效劳呈现,则host形式已能够餍足需求。host形式的另一个优秀用例是每个主机存正在一次的整体容器。这些容器或者会公然与本主坎阱系的特定音信(比如看管或日记记载),以是您不肯望正在拜望该效劳时举办负载均衡。

  macvlan驱动步伐是颠末搜检的真正收集虚拟化技艺的新杀青。Linux 上的杀青额表轻量级,由于它们不是操纵 Linux 网桥举办阻隔,而是大略地与 Linux 以太网接口或子接口闭系联,以强造杀青收集之间的分袂以及与物理收集的贯串。

  MACVLAN 供应很多特别的效力。因为拥有额表大略和轻量级的架构,它对机能提拔有所帮帮。MACVLAN 驱动步伐不是端口照射,而是供应容器和物理收集之间的直接拜望。它还容许容器领受物理收集子网上的可道由 IP 地点。

  macvlan驱动步伐操纵父接口的观点。此接口能够是物理接口,比如eth0,用于 802.1q VLAN 符号的子接口,如eth0.10(.10透露VLAN 10),或者乃至是绑定的主机适配器,它将两个以太网接口捆扎到一个逻辑接口中。

  正在 MACVLAN 收集筑设时期必要网闭地点。网闭必需位于收集根基架构供应的主机表部。MACVLAN 收集容许正在统一收集上的容器之间举办拜望。要是没有正在主机表部道由,则无法正在统一主机上的分歧 MACVLAN 收集之间举办拜望。

  此示例将 MACVLAN 收集绑定到主机上的eth0。它还将两个容器贯串到名为mvnet的 MACVLAN 收集,并浮现了它们能够彼此 ping 通。每个容器正在192.168.0.0/24物理收集子网上都有一个地点,其默认网闭是物理收集中的接口。

  正如您正在此图中所见,c1和c2通过 MACVLAN 收集贯串,该收集名为macvlan,贯串到主机上的eth0。

  关于很多运营商而言,将 802.1q 中继到 Linux 主机詈骂常难过的。它必要更改筑设文献能力正在从新启动时保留长期性。要是涉及网桥,则必要将物理网卡移入网桥,然后网桥获取 IP 地点。macvlan驱动步伐通过创筑、歼灭和主机从新启动来齐全收拾 MACVLAN 收集的子接口和其他组件。

  当操纵子接话柄例化macvlan驱动步伐时,它容许 VLAN 中继到主机并正在 L2 层阻隔容器。macvlan驱动步伐主动创筑子接口并将它们贯串到容器接口。以是,每个容器都位于分歧的 VLAN 中,除非正在物理收集中道由流量,不然它们之间无法举办通讯。

  正在上面的筑设中,咱们操纵macvlan驱动步伐创筑了两个独立的收集,这些驱动步伐筑设为操纵子接口动作其父接口。macvlan驱动步伐创筑子接口并正在主机的eth0和容器接口之间贯串它们。必需将主机接口和上游换取机设立为switchport mode trunk,以便正在接口上符号 VLAN。能够将一个或多个容器贯串到给定的 MACVLAN 收集,以创筑通过 L2 分段的丰富收集战略。

  与host收集驱动步伐雷同,none收集驱动步伐实质上是一种不经收拾的收集选项。Docker Engine 不会正在容器内创筑接口、竖立端口照射或装配贯串道由。操纵--net=none的容器与其他容器和主机齐全阻隔。收集收拾员或表部器械必需掌握供应此管道。操纵 none 的容器只要一个loopback接口而没有其他接口。

  与host驱动步伐分歧,none驱动步伐为每个容器创筑孑立的定名空间。这能够保障任何容器和主机之间的收集阻隔。

  Docker EE 和 Docker 收集旨正在运转正在通用数据核心收集根基架构和拓扑上。其聚积操纵器和容错集群可确保正在种种收集处境中兼容。供应收集效力的组件(收集筑设,MAC 研习,遮盖加密)要么是 Docker Engine 的一部门,即 UCP,要么是 Linux 内核自己。运转任何原生 Docker 收集驱动步伐都不必要特地的组件或卓殊收集效力。

  这与容器收集模子划一,该模子可正在整个处境中提拔使用步伐可移植性,同时仍杀青使用步伐所需的机能和战略。

  Docker 操纵嵌入式 DNS 为正在单个 Docker Engine 上运转的容器和正在 Docker Swarm 中运转的使命供应效劳呈现。Docker Engine 拥有内部 DNS 效劳器,可为用户界说的网桥,overlay 和 MACVLAN 收集中的主机上的整个容器供应名称解析。每个 Docker 容器(或 Swarm 形式下的使命)都有一个 DNS 解析器,它将 DNS 盘问转发给 Docker Engine,后者充任 DNS 效劳器。然后,Docker Engine 检验 DNS 盘问是否属于乞求容器所属的收集上的容器或效劳。要是是,则 Docker Engine 正在其键值存储中查找与容器、使命或效劳的名称成婚的 IP 地点,并将该 IP 或效劳虚拟 IP(VIP)返回给乞求者。

  效劳呈现是收集周围的,这意味着只要位于统一收集上的容器或使命能力操纵嵌入式 DNS 效力。不正在统一收集上的容器无法解析相互的地点。其余,只要正在特定收集上拥有容器或使命的节点才会存储该收集的 DNS 条件。这能够提升安笑性和机能。

  要是主意容器或效劳不属于与源容器相似的收集,则 Docker Engine 会将 DNS 盘问转发到筑设的默认 DNS 效劳器。

  正在这个例子中,有两个名为myservice的容器效劳。另一个效劳(client)存正在于统一收集上。client向和myservice实施两个 curl 操作。以下是由此发生的结果:

  Docker Swarm 集群拥有内置的内部和表部负载平衡效力,这些效力内置于 Engine 中。内部负载平衡供应统一 Swarm 或 UCP 集群实质器之间的负载平衡。表部负载平衡供应进入群集的入站流量的负载平衡。

  创筑 Docker 效劳时,会主动实例化内部负载平衡。正在 Docker Swarm 集群中创筑效劳时,会主动为它们分派一个虚拟 IP(VIP),该虚拟 IP 是效劳收集的一部门。解析效劳名称时返回 VIP。到该 VIP 的流量将主动发送到 overlay 收集上该效劳的整个康健使命。这种步骤避免了任何客户端负载平衡,由于只要一个 IP 返回给客户端。Docker 掌握道由并正在康健的效劳使命中均匀分派流量。

  正在创筑或更新效劳时,能够操纵--publish标识正在表部颁发效劳。正在 Docker Swarm 形式下颁发端口意味着群聚积的每个节点都正在侦听该端口。可是,要是效劳的使命不正在正正在侦听该端口的节点上,会爆发什么?

  这是道由网格发扬效率的地方。道由网格是 Docker 1.12 中的一项新效力,它连结了ipvs和iptables来创筑一个效力强盛的集群周围的传输层(L4)负载平衡器。它容许整个 Swarm 节点担当效劳颁发端口上的贯串。当任何 Swarm 节点领受到发往正正在运转的效劳的已颁发 TCP/UDP 端口的流量时,它会操纵名为ingress的预订义 overlay 收集将其转发到效劳的 VIP。ingress收集的行动雷同于其他 overlay 收集,但其独一宗旨是将网状道由流量从表部客户端传输到集群效劳。与上一节中的描绘相似,它操纵基于 VIP 的内部负载平衡。

  启动效劳后,您可认为使用步伐创筑表部 DNS 记载,并将其照射到任何或整个 Docker Swarm 节点。您无需忧郁容器的运转场所,由于群聚积的整个节点都与道由网状道由效力一律。

  UCP 通过 HTTP 道由收集供应 L7 HTTP/HTTPS 负载平衡。URL 能够对效劳举办负载平衡,并正在效劳副本之间举办负载平衡。

  转到UCP 负载平衡参考架构会意相闭 UCP L7 负载平衡计划的更多音信。

  正在操纵 Docker 计划和杀青容器化使命负载时,收集安笑性是首要斟酌身分。正在本节中,先容了安顿 Docker 收集时的闭键安笑注视事项。

  Docker 收拾分散式防火墙轨则以分开 Docker 收集并防卫恶意拜望容器资源。默认状况下,Docker 收集相互阻隔以阻断它们之间的流量。这种步骤正在第 3 层供应真正的收集阻隔。

  Docker Engine 收拾主机防火墙轨则,不准收集之间的拜望并收拾闪现容器的端口。正在 Swarm 和 UCP 群聚积,这会创筑一个分散式防火墙,正在使用步伐正在群聚积举办改变时动态回护使用步伐。

  Docker Swarm 附带集成的 PKI。Swarm 中的整个收拾器和节点都以签字证书的步地拥有加密签字的身份。整个收拾器到收拾器和收拾器到节点的操纵通讯都是通过 TLS 开箱即用的。无需正在表部天生证书或手动设立任何 CA 以取得正在 Docker Swarm 形式下已受回护的端到端操纵面板流量。个中的证书还会按期主动轮换。

  Docker 声援开箱即用的 overlay 收集的 IPSec 加密。Swarm 和 UCP 收拾的 IPSec 地道正在脱离源容器时对收集流量举办加密,并正在进入主意容器时对其举办解密。这可确保您的使用步伐流量正在传输经过中额表安笑,无论底层收集怎样。正在羼杂、多租户或多云处境中,确保数据安笑至闭紧要,由于它将经由您或者无法操纵的收集。

  此图阐发了怎样回护正在 Docker Swarm 中的分歧主机上运转的两个容器之间的通讯。

  集群中的 leader 节点会按期从新天生对称密钥,并将其安笑地分发到整个集群节点。IPsec 操纵此密钥加密妥协密数据平面流量。操纵 AES-GCM 正在主机到主机传输形式下通过 IPSec 杀青加密。

  操纵 UCP 创筑收集时,团队和标订立义对容器资源的拜望。资源许可标订立义了谁能够查看、筑设和操纵某些 Docker 收集。

  此 UCP 屏幕截图显示了操纵标签出产团队来操纵对该收集的成员的拜望。其余,能够通过 UCP 切换收集加密等选项。

  容器收集模子(CNM)供应了收拾 IP 地点的圆活性。IP 地点收拾有两种步骤:

  CNM 拥有原生 IPAM 驱动步伐,可认为集群整体大略分派 IP 地点,并防卫反复分派。要是未指定其他驱动步伐,则默认操纵本机 IPAM 驱动步伐。

  CNM 拥有操纵来自其他供应商和社区的长途 IPAM 驱动步伐的接口。这些驱动步伐能够供应与现有供应商或自筑 IPAM 器械的集成。

  能够操纵 UCP、CLI 或 Docker API 手动筑设容器 IP 地点和收集子网。地点乞求通过所选的驱动步伐,然后决心怎样解决乞求。

  子网巨细和计划正在很大水准上取决于给定的使用步伐和特定的收集驱动步伐。下一节将周密先容每种收集安顿模子的 IP 地点空间计划。端口照射,overlay 和 MACVLAN 的操纵城市影响 IP 寻址的部署。平凡,容器寻址分为两个部门。内部容器收集(bridge 和 overlay)操纵默认状况下正在物理收集上无法道由的 IP 地点的容器举办寻址。MACVLAN 收集为物理收集子网上的容器供应 IP 地点。以是,来自容器接口的流量能够正在物理收集上道由。值得注视的是,内部收集(bridge,overlay)的子网不应与物理底层收集的 IP 空间冲突。重叠的地点空间或者导致流量无法来到宗旨地。

  关于运维和收集工程师来说,Docker 收集打击排查很穷困。通过确实解析 Docker 收集的使命道理和行使适宜的器械集,您能够排查打击并办理这些棘手的收集题目。一种值得引荐的步骤是操纵netshoot容器来办理收集题目。netshoot容用具有一组强盛的收集打击排查器械,可用于办理 Docker 收集题目。

  操纵诸如netshoot的打击解除容器的上风正在于,能使收集打击排查器械变得可移植。netshoot容器能够贯串到任何收集,能够放正在主机收集定名空间中,也能够放正在另一个容器的收集定名空间中,以检验主机收集的任何方面。

  以下示例操纵名为Docker Pets的编造使用步伐来阐发收集安顿模子。它正在网页上供应宠物图像,同时计较后端数据库中页面的点击次数。

  chrch/docker-pets必要一个处境变量DB来告诉它怎样查找后端数据库效劳。

  此模子是 Docker 原生bridge收集驱动步伐的默认筑设。bridge驱动步伐正在主机内部创筑专用收集,并正在主机接口上供应表部端口照射以举办表部贯串。

  要是未指定 IP 地点,则会正在主机的整个接口上公初步口照射。正在这种状况下,容器的使用步伐正在 0.0.0.0:8000 上颁发。如要操纵特定 IP 地点,必要供应特地的标识-p IP:host_port:container_port。能够正在Docker 文档中找到更多闪现端口的选项。

  使用步伐当地颁发正在主机整个接口上的 8000 端口。还设立了DB=db,供应后端容器的名称。Docker Engine 的内置 DNS 将此容器名称解析为db的 IP 地点。因为bridge是当地驱动步伐,以是 DNS 解析的周围仅限于单个主机。

  下面的输出显示,咱们的容器仍然从petsBridge收集的172.19.0.0/24网段分派了私有 IP。要是未指定其他 IPAM 驱动步伐,Docker 将操纵内置 IPAM 驱动步伐从相应的子网供应 IP。

  这些 IP 地点用于petsBridge收集内部的通讯,始终不会闪现正在主机除表。

  因为bridge驱动步伐是当地周围驱动步伐,以是多主机收集必要多主机效劳呈现办理计划。表部 SD 注册容器或效劳的场所和状况,然后容许其他效劳呈现该场所。因为bridge驱动步伐公初步口以举办表部拜望,以是表部 SD 将 host-ip:port 存储为给定容器的场所。

  正在以下示例中,手动筑设每个效劳的场所,模仿表部效劳呈现。db效劳的场所通过DB处境变量传达给web。

  web效劳现正在应当正在host-BIP 地点的 8000 端口上供应其网页。

  当咱们正在172.31.21.237:8500筑设db的场所时,咱们正正在创筑某种步地的效劳呈现。咱们静态筑设web效劳的db效劳的场所。正在单主机示例中,这是主动达成的,由于 Docker Engine 为容器名称供应了内置的 DNS 解析。正在这个多主机示例中,咱们必要手动实施效劳呈现。

  不发起正在天生处境中将使用步伐的场所硬编码。表部效劳呈现器械能够正在集群创筑和歼灭容器时,动态地供应这些照射,比如Consul和etcd。

  下一节将先容overlay驱动步伐计划,该计划正在集群中供应整体效劳呈现动作内置效力。与操纵多个表部器械供應收集效勞比擬,這種大略性是overlay驅動步伐的閉鍵利益。

  該模子愚弄本機overlay驅動步伐供應開箱即用的多主機貫串。overlay驅動步伐的默認設立供應與表部寰宇的表部貫串以及容器使用步伐內的內部貫串和效勞呈現。Overlay 驅動架構將回想 Overlay 驅動步伐的內部構造,正在閱讀本節之前,您應當先查看它。

  下面顯示了怎樣檢驗 Swarm、創築遮蓋收集,然後正在該 overlay 收集上築設效勞。整個這些號令都正在 UCP/swarm 操縱器節點上運轉。

  與正在單主機 bridge 驅動示例中一律,咱們將DB=db動作處境變量傳達給web效勞。overlay 驅動步伐將效勞名稱db解析爲容器的 overlay IP 地點。web和db之間的通訊僅操縱 overlay IP 子網舉辦。

  web效勞閃現正在 8000 端口上,道由收集正在 Swarm 集群中的每個主機上公初步口 8000。通過正在浏覽器中轉到 :8000 或 :8000 來測試使用步伐是否平常使命。

  正在某些狀況下,使用步伐或收集處境央求容用具有可動作底層子網一部門的可道由 IP 地點。MACVLAN 驅動步伐殺青了此效力。如MACVLAN 編造構造部門所述,MACVLAN 收集將本身綁定到主機接口。這能夠是物理接口,邏輯子接口或綁定的邏輯接口。它充任虛擬換取機,並正在統一 MACVLAN 收集上的容器之間供應通訊。每個容器領受獨一的 MAC 地點和該節點所貫串的物理收集的 IP 地點。

  固然macvlan驅動步伐供應了這些特別的上風,但它舍身的是可移植性。MACVLAN 築設和安頓與底層收集親昵閉系。除了防衛重疊地點分派除表,容器尋址必需苦守容器就寢的物理場所。以是,必需注視正在 MACVLAN 收集表部庇護 IPAM。反複的 IP 地點或不無誤的子網或者導致容器貫串遺失。

  Docker 是一種疾捷發達的技藝,收集選項日益增加,每天都正在餍足越來越多的用例需求。現有的收集供應商、純粹的 SDN 供應商和 Docker 自己都是這一範圍的孝敬者。與物理收集的緊稠密成、收集監控和加密都是備受閉心和革新的範圍。

  本文檔詳述了少少可行的安頓計劃和現有的 CNM 收集驅動步伐,但並不齊全。固然有很多孑立的驅動步伐以及更多築設這些驅動步伐的步驟,但咱們願望您能夠看到,用于舊例安頓的常用模子很少。會意每種模子之間的優劣量度是獲得持久得勝的症結所正在。

返回顶部