从Docker 网络看IaC

【引子】近来,老码农又一次有机会实施IaC 了, 但是环境有了新的变化,涵盖了云环境、虚拟机、K8S 以及Docker,而网络自动化则是IaC中的重要组成,温故知新,面向Docker 的网络是怎样的呢? 

Docker 网络机制不仅构建了容器之间以及与外部服务间的高效通信桥梁,还通过灵活的配置选项满足了不同应用场景下的网络隔离与互联需求。每个Docker容器在启动时,都可以选择或指定加入到一个或多个Docker网络中,这些网络可以是Docker自动创建的默认网络(如bridge模式网络),也可以是用户根据需要自定义的网络(如overlay网络,用于支持跨主机容器通信)。

1. Docker 网络

Docker 附带了一个较为强大的网络管理系统,这个系统被设计得既直观又灵活,旨在简化容器、Docker 宿主机以及外部网络之间的复杂通信过程。该系统不仅提供了网络配置、监控和故障排除的工具,还允许用户根据具体需求选择最适合的网络类型,从而实现高效的资源利用和增强的安全性。

Docker 为核心网络功能提供了5个标准网络驱动程序:

  • Bridge

  • Host

  • Overlay

  • IPvLAN

  • Macvlan

Docker 网络管理系统通过隔离不同网络来增强容器的安全性。每个网络都可以视为一个独立的虚拟网络环境,容器之间的通信被限制在它们所加入的网络内部。此外,系统还支持网络策略(如防火墙规则)的配置,以进一步控制容器间的流量和访问权限,防止潜在的安全威胁。

网络管理系统还提供了丰富的监控和调试工具,帮助用户实时了解网络状态、流量分布和潜在问题。通过这些工具,用户可以快速定位并解决网络延迟、丢包等常见问题,确保容器化应用的稳定运行。另外。Docker 网络管理系统支持动态网络配置,允许用户在运行时修改网络设置,而无需停止或重启容器。这一特性大大提高了应用的灵活性和可扩展性。

1.1 桥接网络(Bridge Network)

桥接网络在主机系统与容器环境之间构筑起一座虚拟的联通桥梁,确保网络上的容器能够无缝地进行相互通信,同时与未加入此网络的容器保持隔离状态,维护了网络环境的清晰边界。

cbb3e563166951239d2ac6c900702c6b.png

每个容器均被赋予了一个独特的IP地址,这一设计不仅促进了容器间的独立识别与交互,还通过与主机的桥接连接,赋予了容器访问本地局域网(LAN)乃至互联网的能力。然而,值得注意的是,尽管这些容器能够参与网络交互,但它们并不以物理实体的形式直接暴露于LAN之中,确保了网络架构的灵活性与安全性。

1.2 主机网络(host network)

采用主机网络模式的容器,其网络配置完全融入了宿主机的网络环境中,实现了无隔离的网络共享。这些容器不再拥有独立的IP地址,而是直接利用宿主机的网络堆栈进行通信。因此,当容器中的进程监听于某一端口(如8888端口)时,该端口即被视为宿主机的一部分,外部用户可通过宿主机的IP地址(如192.168.1.101)及相应端口号(6666)直接访问到容器内的服务,无需进行复杂的端口映射配置。

04ebb84c5a2ced469974087a8ee90d14.png

同理,若数据库服务在容器内监听于3300端口,该服务同样能够通过宿主机的IP地址结合3300端口号被外部访问,体现了主机网络模式下容器与宿主机网络的高度融合。

值得注意的是,在主机网络模式下,容器发出的任何网络活动都将直接以宿主机的身份进行,这使得从网络层面难以区分这些活动是由宿主机还是容器发起的,进一步强调了该模式在简化网络配置的同时,也需对网络安全和隔离性进行额外考量。

1.3 覆盖网络

覆盖网络(Overlay Networks)是构建于多个Docker主机之上的虚拟网络架构,它们巧妙地跨越了物理界限,使得分布在不同Docker主机上的容器能够无缝地进行相互通信,这一过程无需依赖底层操作系统的路由管理。这种网络模式极大地提升了跨主机容器通信的灵活性与效率。

4141a4491fcb00500f1ad5219bac0bc1.png

在Docker Swarm集群环境中,覆盖网络被广泛应用于实现容器间的网络互联,但它们的用途并不局限于集群场景。即使面对两个独立运行的Docker Engine实例,且存在直接通信需求的容器间,覆盖网络同样能够大显身手,允许用户在不依赖Docker Swarm完整集群功能的前提下,自行构建出类似集群环境的网络互联能力,从而实现了网络配置的灵活定制与扩展。

尤为值得一提的是,在覆盖网络环境中,不仅容器能够获取到虚拟IP地址以实现跨主机通信,就连Docker主机本身也有机会获得同一网段内的虚拟IP地址。这一设计使得网络拓扑更加清晰,管理更为便捷,同时也为复杂的分布式应用架构提供了坚实的网络支撑。

1.4 IPvLAN 网络

IPvLAN 提供了一种高度灵活且强大的机制,允许对容器内的 IPv4 和 IPv6 地址进行精细化的配置与控制。它不仅限于地址分配,还深入处理第二层(L2)和第三层(L3)的VLAN标记与路由逻辑,确保了网络流量的高效管理与隔离。

978d5e201fc055ebe399d25556f4db19.png

在需要将容器化服务无缝集成至现有物理网络架构的场景中,IPvLAN 展现出了其独特的优势与便利性。通过为容器网络分配独立的接口,它实现了与物理网络更为紧密且高效的连接,其性能表现往往优于传统的基于桥接的网络配置,为容器化应用提供了更低的延迟和更高的吞吐量。

在 IPvLAN 的配置下,每个容器都被赋予了独立的 IP 地址,并作为网络的一个直接成员存在,这种设计既保证了容器间的相互独立性,又促进了它们与物理网络之间的无缝通信,为构建复杂、高性能的混合云环境奠定了坚实的基础。

1.5 Macvlan 网络

Macvlan 赋予容器以类似于网络中物理设备的身份进行运作的能力,其核心在于为每个容器分配一个独一无二的 MAC 地址。这一设计使得容器在网络层面上表现得如同直接连接在物理网络上的独立设备一般,极大地增强了容器间以及与外部网络交互的灵活性和效率。

54f8c8a532d923abe57606e41b0ae279.png

为了支持这种网络类型,用户需要将主机上的一个物理网络接口(如以太网接口)作为资源分配给虚拟网络,以此作为容器接入网络的桥梁。随着 Docker 主机上容器数量的增加,管理并维护大量 MAC 地址成为了一个挑战。因此,构建一个能够高效处理众多 MAC 地址的扩展性网络架构显得尤为重要,以确保网络环境的稳定性和性能。通过精心规划和管理,Macvlan 能够为大型容器化应用提供强大而灵活的网络支持。

2. 使用哪种类型的Docker网络

桥接网络因其广泛的适用性和便捷性,成为了大多数容器化部署场景下的首选。这些网络构建了一个虚拟环境,使得容器之间能够利用 IP 地址和 DNS 名称轻松实现相互通信,同时保持与互联网及本地网络的顺畅连接,满足了多样化的网络需求。

对于特定场景,如要求容器直接利用主机的网络接口,且无需额外网络隔离时,主机网络模式则显得尤为合适。此模式下,容器化应用程序仿佛成为了主机网络体系中的一部分,直接共享网络资源,简化了配置并提升了效率。

而覆盖网络则是跨越多台 Docker 主机实现容器间直接通信的关键技术。它们为构建分布式系统提供了强大的支持,通过增强系统的可靠性和扩展性,成为提升应用性能和服务质量的理想选择。

此外,当应用场景需要对容器进行更为精细化的网络控制,比如要求容器在网络中表现得如同物理设备一般(例如,用于网络流量监控),Macvlan 网络便展现出了其独特的价值。而 IPvLAN 网络则更进一步,专为满足高级网络管理需求而设计,允许用户对容器的 IP 地址、VLAN 标签及路由策略实施精确的定制化配置,以满足最为严苛的网络环境要求。

3. Docker网络的使用示例

以桥接网络为例。使用 docker network create 命令就可以创建新的Docker网络,通过设置-d 标志来指定的网络类型,例如桥接网络或主机网络。如果省略该标志,则默认创建桥接网络。

在一个终端窗口中运行以下命令:

$ docker network create kd-network -d bridge

创建网络完成后会得到网络ID ,因为没有连接任何容器,新的网络目前还没啥用。但是可以通过使用 docker run 命令设置 -- network 标志 将新容器附加到网络。

$ docker run -it --rm --name container1 --network kd-network busybox:latest

这时如果启动另一个 Ubuntu 容器,这次没有 -- network 标志:

$ docker run -it --rm --name container2  busybox:latest

这些容器还不在同一个网络中,因此它们不能直接相互通信,可以将 Container 2连接到网络:

$ docker network connect test-network container2

这些容器现在共享一个网络,能够彼此发现。Docker 允许在不重新启动容器的情况下自由地管理网络连接,还可以将容器从它们不再需要参与的网络中移除:

$ docker network disconnect test-network container2

而且,所做的任何更改都将立即生效。如果想删除一个网络,断开或停止所有使用它的 Docker 容器,也非常方便:

$ docker network rm test-network

4. 一句话小结

Docker 的网络子系统提供了多样化的策略,用以精细地管理容器间的通信方式、它们与相邻容器的互操作性,以及它们与 Docker 主机之间的交互。在同一网络域内的容器,能够灵活地通过各自的名称或分配的 IP 地址建立连接,这种设计极大地简化了网络配置,并促进了容器间的无缝协作。

尽管 Docker 容器间的网络隔离程度相较于传统虚拟机(VM)而言显得较为宽松,但 Docker 依然提供了诸如 macvlan 这样的高级网络模式,使得容器能够在网络层面表现得如同物理设备一般,直接参与网络流量的转发与处理,从而满足了特定场景下对网络深度集成与灵活控制的需求。

关于IaC的更多内容,可以参考本人参与翻译的《基础设施即代码(IaC)》一书。

a100601272c09ba8931ae5dcf0c11a3f.jpeg

【管理阅读】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++相关概念和易错语法(16)(list)

1.list易错点 (1)慎用list的sort,list的排序比vector慢得多,尽管两者时间复杂度一样,甚至不如先把list转为vector,用vector排完序后再转为list (2)splice是剪切链表,将…

指数增长远大于nlgn

在学习算法导论的时候,遇到了这么一行字把我难住了。我不理解为什么叶节点代价总和就为Ω(nlgn)了,后来经过学习之后了解了,因为n的指数严格大于1,只要指数函数的指数大于1就是指数增长,那么就远大于nlgn。

C++ | Leetcode C++题解之第22题完全二叉树的节点个数

题目&#xff1a; 题解&#xff1a; class Solution { public:int countNodes(TreeNode* root) {if (root nullptr) {return 0;}int level 0;TreeNode* node root;while (node->left ! nullptr) {level;node node->left;}int low 1 << level, high (1 <&…

【笔记】finalshell中使用nano编辑器GNU

ctrl O 保存 enter 确定 ctrl X 退出 nano编辑 能不用就不用吧 因为我真用不习惯 nano编辑的文件也可以用vim编辑的

Social to Sales全链路,数说故事专享会开启出海新视角

————瞎出海&#xff0c;必出局 TikTok&#xff0c;这个充满活力的短视频平台&#xff0c;已经成为全球范围内不可忽视的电商巨头。就在6月8日&#xff0c;TikTok美区带货直播诞生了首个“百万大场”。在此之前&#xff0c;百万GMV被视为一道难以逾越的高墙。以TikTok为首的…

224. 基本计算器

给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数&#xff0c;比如 eval() 。 示例 1&#xff1a; 输入&#xff1a;s "1 1" 输出&#xff1a;2示例 2&#xff1a; 输入…

CentOS 7遗忘了root密码怎么办?

正文共&#xff1a;666 字 12 图&#xff0c;预估阅读时间&#xff1a;1 分钟 说来也巧&#xff0c;突然发现使用KVM在部署CentOS时&#xff08;笔记本电脑安装CentOS系统&#xff09;&#xff0c;会有一个神奇的现象&#xff0c;还不是偶然出现的&#xff0c;在最近的三四次部…

4种叶轮平衡技巧 提高精度,降低故障率

在风机运作时&#xff0c;叶轮的动平衡是关键因素之一&#xff0c;不平衡的叶轮会产生振动和噪音&#xff0c;影响风机性能&#xff0c;甚至可能导致故障。 因此&#xff0c;掌握合适的平衡技术对提高设备稳定性和延长使用寿命至关重要。 本文将探讨几种有效的叶轮平衡方法及…

java中Request和Response的详细介绍

1.Request和Response的概述 # 重点 1. service方法的两个参数request和response是由tomcat创建的void service(ServletRequest var1, ServletResponse var2) 2. request 表示请求数据, tomcat将浏览器发送过来的请求数据解析并封装到request对象中servlet开发者可以通过reques…

力扣第224题“基本计算器”

在本篇文章中&#xff0c;我们将详细解读力扣第224题“基本计算器”。通过学习本篇文章&#xff0c;读者将掌握如何使用栈来解析和计算表达式&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述 力扣第224题“…

单向链表的数据存储(申请堆空间)

函数功能&#xff1a; 0.排序&#xff08;逆置和顺序排序&#xff09; 1.回显 2.头插 3.位插 4.尾插 5.尾删 6.头删 7.位删 8.查找 &#xff08;按值或按位查找&#xff09; 9.修改 &#xff08;按值或按位修改&#xff09; 10.退出 main.c …

Win11系统vscode配置C语言环境

安装Visual Studio Code&#xff1a; 如果你还没有安装VSCode&#xff0c;请从官方网站下载并安装&#xff1a;https://code.visualstudio.com/ 安装C/C扩展&#xff1a; 打开VSCode&#xff0c;进入扩展视图&#xff08;点击侧边栏的扩展图标或使用快捷键CtrlShiftX&#xff…

基于AWS Billing Conductor自定义账单计算进行【linker账单】RI/SP还原以及账单菜单栏选择性精细化限制策略设置

文章目录 一、客户需求需求① 设置策略屏蔽billing菜单选项查看需求② 账单RI和SP还原及SP和RI的共享 二、AWS Billing Conductor介绍三、IAM 精细操作映射参考四、详细步骤操作演示4.1 AWS Organization策略设置4.2 账单和成本管理设置4.3 AWS Billing Conductor设置4.3.1 创建…

allWebPlugin中间件实现ActiveX插件在谷歌、火狐、Edge浏览器使用

下载并安装allWebPlugin中间件 1、请从下面地址下载allWebPlugin中间件产品&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1xUyQDzOabh7mU7J7TYhtig?pwdz3q0 提取码&#xff1a;z3q0 如下图所示&#xff0c;下载最新allWebPlugin_x86_v2.0.0.14_stable_20240707…

Redis 管道技术

Redis 管道技术 引言 Redis&#xff0c;作为一个高性能的键值存储系统&#xff0c;被广泛应用于各种场景&#xff0c;如缓存、消息队列等。为了进一步提高Redis的处理能力和效率&#xff0c;Redis管道技术应运而生。本文将深入探讨Redis管道技术的原理、应用及其优势。 什么…

LiveNVR监控流媒体Onvif/RTSP用户手册-录像计划:批量配置、单个配置、录像保存(天)、配置时间段录像

TOC 1、录像计划 支持单个通道 或是 通道范围内配置支持快速滑选支持录像时间段配置 1.1、录像存储位置如何配置&#xff1f; 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 支持 Windows Linux 及其它CPU架构&#xff08;国产、嵌入式…&#xff09;操作系统安装包下载 、 安装…

【文件格式转换】Python转换 pdf 到 word (docx)

要使用 Python 将 PDF 转换为 Word 文档&#xff0c;可以使用库pdf2docx。操作方法如下&#xff1a; 安装必要的库&#xff1a; pip install pdf2docx使用以下 Python 代码将 PDF 文件转换为 Word 文档&#xff1a; from pdf2docx import Converterdef pdf_to_word(pdf_file…

调度pass的定制

概述 作为调度pass实现类&#xff0c;MachineScheduler 和 PostMachineScheduler 的优点之一是允许开发者在LLVM 已有调度算法和策略基础上做不同的定制化 PostMachineScheduler 类的定制相对简单&#xff0c;主要是MachineSchedStrategy 接口的定制。 MachineScheduler 类的…

【算法】Dijkstra算法

戴克斯特拉算法(Dijkstras Algorithm),由荷兰杰出计算机科学家艾兹赫尔戴克斯特拉设计,是解决非负权有向图中单源最短路径问题的经典算法。它构建了一个逐步扩展的最短路径树,从指定的源点出发,逐步探索并确定到图中所有其他顶点的最短路径。这一算法在网络路由选择、地理…

C语言旋转动画

目录 开头程序程序的流程图C语言旋转动画(程序的效果)结尾 开头 大家好&#xff0c;我叫这是我58。在这里&#xff0c;我们要来看我用C语言编译成的可以顺时针或者逆时针旋转的动画相关的一些东西和那个动画的顺时针与逆时针的版本。 程序 #define _CRT_SECURE_NO_WARNINGS …