返回资讯中心
外部精选
软件工程
#社区热议

Hetzner 详解其云网络栈的历史与技术架构

来源标题:The Hetzner Cloud network stack – history and technical overview

Hetzner 发布技术博客,回顾其云网络栈的历史与设计理念。该公司选择将防火墙、私有网络等高级网络功能运行在主机上,而非依赖复杂的物理网络,物理网络仅提供稳定的 IP 连通性。这种架构使团队和技术职责分离更清晰,多数情况下故障影响可限制在单台主机内。

Hacker Newscnkk2026/10/9 · 17 天前30 分钟阅读

以下正文由 AI 翻译自 Hacker News(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

所有云产品都需要灵活可靠的连接方案,以便我们的客户及其潜在客户能够访问运行在我们网络中的服务。在 Hetzner,我们一贯信奉自己拥有并可自主运营的解决方案,以及拥有可以在此基础上进一步构建的模块。网络,尤其是我们云产品的网络连接,也不例外。尽管多年来技术不断变化,我们始终倾向于将可变部分放在主机上,而不是构建一个智能且复杂的物理网络。因此,我们设计的方案是:物理网络为主机提供稳定的 IP 连接,主机则提供更高层的网络功能。这些功能包括防火墙、私有网络以及辅助基础设施服务。通过将这类服务和网络功能运行在主机上,我们在设计和构建产品时获得了极大的自由度和灵活性,不受硬件厂商能力的限制。这样一来,团队和技术之间的职责划分清晰,并且在(大多数)错误发生时,可以将影响范围限制在单台主机内。这也意味着我们能够且必须完全拥有该解决方案,并根据自身需求进行调整——不过这本来就是我们的基因。从历史上看,Hetzner 一直使用不同的技术为其云产品提供连接。早期,2011 年推出的 Hetzner vServer 最初使用 HDD、原生 Linux bridge 和静态路由。它提供双栈连接,每台主机带宽最高 1 Gb/s。最终,大约有 25,000 个实例运行在这套方案上。后续产品于 2015 年 9 月推出,采用基于 Ceph 的超融合架构。它转向通过 BGP 进行动态路由,并使用 Linux bridge 方案,IPv4 采用 1:1 NAT,IPv6 前缀则完全路由。这实现了更好的 IP 迁移能力,并支持在不影响客户的情况下进行主机维护。2016 年,主机链路升级为 2x 10 Gb/s。这套方案一直沿用到 2018 年,规模增长到约 50,000 个实例。2018 年 Hetzner Cloud 发布时,我们放弃了 NAT,转向直接的 IPv4 路由。2019 年 7 月,我们引入了基于 Open vSwitch 的数据平面,并增加了对基于 VXLAN 封装的私有云网络的支持。2020 年 11 月,我们开始将公共网络部分迁移到 Open vSwitch,这使我们能够在 2021 年 3 月推出基于 Open vSwitch 流和 netfilter 的有状态云防火墙。我们已经知道,网络栈的重要部分运行在 VM 主机上;那么它们需要提供什么才能让云服务器正常运行?对于大多数服务器来说,需要具备互联网可达性,这样系统和其服务才能从家中或海外访问。一些服务器使用私有网络——可以替代公共网络,也可以与公共网络并存——通过一个只有你的系统可以访问的私有虚拟网络连接服务器、Load Balancer,以及可能的专用服务器。私有网络流量使用 Virtual eXtensible LAN(VXLAN)进行封装,每个私有网络有唯一的 Virtual Network Identifier(VNI)。主机网络栈确保只有接入相应私有网络的成员才能发送或接收流量。为了控制从互联网访问你的服务,我们提供了云 Firewall 功能。它允许控制对服务器特定端口或协议的访问,也可以限制哪些流量可以从服务器发出。这应该尽可能靠近服务器执行,因此放在主机上。集中构建有状态防火墙需要额外的硬件和网络覆盖层来将“干净”的流量传输到服务器,并且会为高可用的集中连接跟踪带来大量复杂性。默认情况下,我们的云服务器镜像配置为使用 Dynamic Host Configuration Protocol(DHCP)来动态配置 IPv4 地址和路由。因此,我们必须提供 DHCP 服务器,以便服务器可以为公共和私有网络接口请求其 IPv4 网络配置。在大多数镜像中,cloud-init 用于配置系统的某些部分,例如配置 IPv6 网络、为私有网络接口触发 DHCP、挂载云 Volume 等。对于这些任务,cloud-init 必须从我们的元数据服务器查询本地系统信息或用户特定配置,该服务器地址为 http://169.254.169.254/。除 cloud-init 外,元数据服务器还被许多集成使用,包括但不限于我们的 CSI driver、hc-utils、发行版工具如 Flatcar Linux 的 Afterburn 和 Ignition,以及 Talos Linux。DHCP 和元数据服务器都运行在每台 VM 主机本地,以实现最大的弹性和可用性。除了这些面向用户的服务外,VM 主机还运行一系列内部服务,确保你的服务器正常运行、网络栈获得正确的信息来配置连接,以及我们的监控了解正在发生的情况。不过,在本文中,我们将聚焦于网络栈,深入探讨其内部工作原理。大部分网络数据路径由 Open vSwitch(简称 OVS)实现,这是一个开源的多层虚拟交换机。它的数据路径早已包含在 Linux Kernel 中,用户空间/控制平面的软件包也已在所有主流 Linux 发行版中提供。它是某些虚拟化环境的默认网络栈,许多现成解决方案都自带 OVS 支持。这包括但不限于 Proxmox VE、Open Stack 和 oVirt 等一些流行方案。但我们并不使用这些,而是通过自研工具来管理 KVM 及所有相关组件。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →