)
操作系统云原生容器运行时【免费下载链接】osTiny Linux distro that runs the entire OS as Docker containers项目地址https://gitcode.com/gh_mirrors/os/os点击查看免费下载本文以仓库内 vendor/github.com/docker/libnetwork/CHANGELOG.md 为骨架系统梳理 libnetwork 从 0.3.0 到 0.5.6 的关键版本演进CNMContainer Networking Model的引入、IPAM 驱动的诞生、嵌入式 DNS 对 /etc/hosts 服务发现的取代以及 libnetwork 在本仓库RancherOS中被实际消费的方式v0.5.6 版本锁定与 resolvconf 子包的应用。读完本文你将掌握 libnetwork 各版本的里程碑特性、底层调用链原理以及如何在该仓库中找到对应的真实配置与源码证据。libnetwork 是什么以驱动/插件模型抽象容器网络libnetwork 是 Docker 官方提供的、用于连接容器的原生 Go 网络库。正如其 README.md 所述它的目标是交付一个健壮的 Container Network ModelCNM为应用提供一致的编程接口与所需的网络抽象。libnetwork 采用驱动/插件模型网络实现bridge、overlay、远程插件等通过驱动注入而对外暴露统一、简单的 Network Model。其核心编程接口从 README 的示例代码中可以完整看到// 1. 创建 controller选择并配置网络驱动 networkType : bridge controller, err : libnetwork.New(config.OptionDriverConfig(networkType, genericOption)) // 2. 创建网络 network, err : controller.NewNetwork(networkType, network1) // 3. 为每个容器分配 IP 与接口创建 endpoint ep, err : network.CreateEndpoint(Endpoint1) // 4. 创建容器 sandbox sbx, err : controller.NewSandbox(container1, libnetwork.OptionHostname(test), libnetwork.OptionDomainname(docker.io)) // 5. sandbox 通过 join API 加入 endpoint err ep.Join(sbx) // 6. 通过 Info() API 查询 endpoint 运行数据如 MAC 地址 epInfo, err : ep.DriverInfo()这条调用链New → NewNetwork → CreateEndpoint → NewSandbox → Join → DriverInfo构成了 CNM 的控制器-网络-端点-沙箱四层抽象也是后续所有版本特性IPAM、别名、服务发现生长的地基。其长期目标在 ROADMAP.md 中表述为将 Docker Engine 与 libcontainer 中的网络逻辑模块化为单一可复用库支持本地与远程驱动并提供独立的dnet管理与测试工具Makefile 中build-local目标正是产出bin/dnet二进制。0.3.02015-05-27CNM 诞生Docker 网络被整体替换CHANGELOG 记录的第一个正式版本做了两件奠基性的事引入 CNMContainer Networking Model确立控制器、网络、端点、沙箱四类对象的标准模型与编程接口用 CNM Bridge 驱动替换原有 Docker 网络实现即 ROADMAP.md 中Replace the networking subsystem of Docker Engine, with libnetwork的落地。从此Docker 的网络栈从内部自研实现转向一个可独立演进、可插拔驱动的库。0.4.02015-07-24实验特性密集落地0.4.0 是一个实验功能铺路版本一次引入了四条新战线Overlay 驱动的实验版本为后续多主机组网multi-host networking做铺垫网络插件network plugins的实验版本验证驱动/插件模型的可扩展性网络与服务的实验性 UX基于 /etc/hosts 的服务发现实验性这是服务发现功能的第一代形态后来的嵌入式 DNS 正是它的替代者。工程层面同时完成两件事集成 libkv为分布式键值存储接入做准备服务于 overlay 网络的元数据同步以及修复 osl网络命名空间管理的一批问题并整体提升测试覆盖率——这与 Makefile 中run-tests目标对每个包含 Go 文件的目录并行执行带覆盖率收集的go test的做法一脉相承。0.5.02015-10-30多主机组网转正IPAM 正式登场0.5.0 是第一个里程碑式转正版本Docker 多主机网络multi-host networking退出实验通道overlay 驱动经过 0.4.0 的孵化后正式可用引入 IP Address ManagementIPAM与 IPAM 驱动IP 地址的分配/回收从具体网络驱动中剥离出来形成独立子模型——这是 0.5.1 允许用户自定 IP、0.5.2 支持 IPAM 驱动选项的前提弃用默认 bridge 网络上的服务发现服务发现职责开始从网络层向 DNS 层迁移引入新的网络 UXbridge 驱动支持多网络使用 boltdb 实现本地持久化网络/端点元数据落盘为跨重启的自我修复见 0.5.5打下基础。0.5.12015-12-07允许用户为容器指定 IP 地址0.5.1 的核心用户能力是允许用户自行分配容器 IP 地址并修复了 docker/docker#18214、#18380 两个上游问题。该能力由 0.5.0 引入的 IPAM 子模型承载用户指定的地址经 IPAM 校验并纳入分配池而不是由驱动任意分配。0.5.22015-01-08嵌入式 DNS 取代 /etc/hosts 服务发现0.5.2 是本 CHANGELOG 中功能密度最高的版本之一服务发现架构在此完成换代嵌入式 DNSEmbedded DNS取代基于 /etc/hosts 的服务发现DNS 解析能力内嵌进 libnetwork容器内通过内嵌 DNS 解析服务名与别名替代此前向 /etc/hosts 追加条目再分发的方式容器本地别名container local alias与网络级别名network-scoped alias支持同一容器可在不同网络中使用不同别名别名作用域区分容器与网络两个层级内部网络模式的后端支持对应 0.5.3 中 bridge 驱动暴露的internal网络选项内部网络不提供出站网关/端口发布用于隔离支持 IPAM 驱动选项IPAM 驱动可以接收自定义配置参数修复 overlay veth 清理问题docker/docker#18814与 docker/docker#19139禁用 IPv6 重复地址检测DAD规避 IPv6 环境下地址探测带来的延迟与冲突。0.5.3 – 0.5.62015-12 ~ 2016-01稳定化与针对性修复进入 2016 年版本节奏转为小步快跑 精准修复0.5.32016-01-12bridge 驱动支持internal网络选项将 0.5.2 的后端支持开放为 driver 可见的配置项后端实现force选项以支持强制断开网络network disconnect --force修复 etchosts 包中的一处正则问题docker/docker#19080。0.5.42016-01-12用户强制删除 endpoint 时移除 isNodeAlive 保护当用户显式强制删除端点时不再因节点活性检查而阻塞保证强删语义。0.5.52016-01-14允许网络级别名解析到匿名 endpoint此前别名解析要求端点具备名称现在匿名端点同样可被网络级别名命中自我修复损坏的 IP 数据库针对 1.9.0/1.9.1 中可能出现的 IP 分配记录损坏libnetwork 在启动时自动修复依赖 0.5.0 引入的 boltdb 持久化与 0.5.1 的 IPAM 分配校验设置--iptablesfalse时跳过 IPTables 清理修复 docker/docker#19063避免在用户显式禁用 iptables 的场景下仍执行规则清理导致异常。0.5.62016-01-14容器重启时正确重建嵌入式 DNS 服务器修复 docker/docker#19354这是嵌入式 DNS 生命周期管理的补齐——重启后的容器同样获得可用的内嵌 DNS 服务。版本时间线速览版本日期核心主题0.3.02015-05-27引入 CNM以 CNMBridge 替换 Docker 原有网络0.4.02015-07-24实验性 Overlay、网络插件、/etc/hosts 服务发现集成 libkv0.5.02015-10-30多主机网络转正IPAM 与 IPAM 驱动boltdb 持久化0.5.12015-12-07允许用户为容器指定 IP0.5.22016-01-08嵌入式 DNS 取代 /etc/hosts别名内部网络后端IPAM 驱动选项0.5.32016-01-12bridgeinternal选项强制断开网络0.5.42016-01-12强删 endpoint 时移除 isNodeAlive 保护0.5.52016-01-14匿名端点别名解析IP 数据库自修复--iptablesfalse 跳过清理0.5.62016-01-14容器重启时正确重建嵌入式 DNS本仓库中的实际落地RancherOS 锁定 v0.5.6 并消费 resolvconf 子包CHANGELOG 所记录的演进并非孤立历史——本仓库RancherOS正是 libnetwork v0.5.6 的实际使用者证据链完整1. 版本锁定。trash.conf 第 14 行记录github.com/docker/libnetwork v0.5.6即本仓库 vendor 目录恰好停留在 CHANGELOG 的最终版本上。2. resolvconf 子包的引入。虽然本仓库没有 vendor libnetwork 的主库netlink、sandbox 等但单独消费了其resolvconf子包cmd/network/network.go 第 19 行github.com/docker/libnetwork/resolvconf导入了该包并在第 85、93 行调用resolvconf.Build(/etc/resolv.conf, ...)直接生成系统 DNS 配置文件。这正是 0.5.2嵌入式 DNS 取代 /etc/hosts之外libnetwork 在 DNS 领域留下的另一条可复用能力——读写 resolv.conf 的工具集。3. resolvconf 包的实现细节。resolvconf/resolvconf.go 完整保留了该子包的设计Build(path, dns, dnsSearch, dnsOptions)按search/nameserver/options顺序生成标准 resolv.conf 内容并原子写盘Get()/GetSpecific()/GetIfChanged()/GetLastModified()读取当前或指定路径的 resolv.conf并以 SHA-256 哈希跟踪变化GetIfChanged供容器的 resolv.conf 更新器使用FilterResolvDNS()清理 localhost127.*/::1nameserverIPv6 未启用时剔除 IPv6 nameserver若清理后无可用 nameserver 则回填默认外部 DNSIPv4 默认8.8.8.8/8.8.4.4IPv6 默认2001:4860:4860::8888/2001:4860:4860::8844即 Google Public DNS配套解析函数GetNameservers/GetNameserversAsCIDR/GetSearchDomains/GetOptions使用精心构造的 IPv4/IPv6 正则解析条目。4. 在 RancherOS 网络配置中的真实调用。cmd/network/network.go 的ApplyNetworkConfig展示了 resolvconf 与云配置的协作逻辑用户未显式设置 DNS 且 DHCP 未下发 DNS 时以cfg.Rancher.Defaults.Network.DNS.Nameservers兜底调用resolvconf.Build写入/etc/resolv.confWriting default resolv.conf - no user setting, and no DHCP setting分支用户显式设置了rancher.network.dns时则以用户值为准。对应的默认值定义在 os-config.tpl.yml 第 17-20 行network.dhcp_timeout: 10、dns.nameservers: [8.8.8.8, 8.8.4.4]——与 resolvconf 包内置的 IPv4 默认解析器完全一致。小结一条从 CNM 到嵌入式 DNS 的完整演进线透过 CHANGELOG 可以看到 libnetwork 的清晰演进脉络0.3.0 用 CNM 统一编程模型 → 0.4.0 以实验特性铺路Overlay、插件、libkv→ 0.5.0 完成多主机组网转正并沉淀 IPAM 与持久化 → 0.5.2 以嵌入式 DNS 完成服务发现架构换代 → 0.5.3~0.5.6 集中补齐内部网络、强制断开、自修复与重启生命周期。而本仓库以 v0.5.6 为锚点、以 resolvconf 子包为接口恰好为这份历史提供了生产环境消费者的实证注脚。赞分享操作系统云原生容器运行时【免费下载链接】osTiny Linux distro that runs the entire OS as Docker containers项目地址https://gitcode.com/gh_mirrors/os/os点击查看免费下载相关推荐libnetwork 深入解读用 Go 构建容器网络模型CNM的驱动化网络库libnetwork 深入解读用 Go 构建容器网络模型CNM的驱动化网络库 导读 libnetwork 是 Docker 生态中负责容器网络连接的原生操作系统云原生容器运行时Moby libnetwork 容器网络模型CNM设计解析Sandbox、Endpoint、Network 与 Driver 扩展机制Moby libnetwork 容器网络模型CNM设计解析Sandbox、Endpoint、Network 与 Driver 扩展机制 本文以 Moby云原生容器运行时虚拟化容器编排RancherOS 内嵌 libnetwork 路线图全解容器网络模型、驱动架构与 dnet 工具链RancherOS 内嵌 libnetwork 路线图全解容器网络模型、驱动架构与 dnet 工具链 本篇文章围绕当前仓库 vendor/github.com操作系统云原生容器运行时上一篇PaddleHub PPLCNet_x0_75 图像分类模型实战安装、API 预测与 Serving 部署指南下一篇如何用PhotoView解决Android图片浏览的三大痛点创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考