前言:今天写了一篇关于 Azure Database 私有网络接入 Private Endpoint
的博客,本来是专注于云数据库的内网访问问题。但过程中让我想起了很多底层网络实现的细节 —— 比如 子网委派、虚拟设备 (TUN)、IPIP 隧道、BGP/OSPF 路由
等。
随后又和朋友讨论到一个实际问题:
“没有 BGP 的情况下,K8s 的 Pod 怎么注册到外部的 Nacos 上?”
这让我联想到云原生场景下,K8s 网络配置不仅仅是 Service/Ingress 的层面,而是和底层网络协议、虚拟设备、乃至传统网络的动态路由息息相关。于是有感而发,写下本文。
第一章 云上私有接入与 Private Endpoint
核心概念
- VNet 隔离:Azure 中的 PaaS 服务并不会自动暴露在虚拟网络里,必须通过子网委派打通。
- Private Endpoint:在目标 VNet 中生成一个私有 IP,作为访问数据库的入口。
- Private DNS Zone:把数据库的域名指向这个私有 IP,实现应用无感知的内网访问。
举例说明
想象你在一座公司大楼里(VNet),大楼外有个餐馆(Azure Database)。
普通人要走大街上的大门(公网 IP)才能进入,但如果你办了员工卡(Private Endpoint),餐馆会在大楼内部给你开一扇小门。并且,公司通讯录(Private DNS Zone)里直接写上了这扇小门的地址。
不同条件下的配置
- 条件不足:只能走公网白名单。依赖安全组规则、SSL 加密,安全性有限。
- 条件允许:启用 Private Endpoint + Private DNS,做到“看似在云外,其实走的是内网”。
客观条件因素:
- 小团队/初创公司可能没权限创建 DNS Zone,或者没有网络专岗去做子网委派。
- 大型企业通常有专门的网络团队、预算允许购买 Premium SKU,可以直接采用内网方案。
第二章 TUN 与 IPIP:虚拟设备的本质
理论背景
- TUN 设备:虚拟网络层接口,可以收发 IP 包,相当于虚拟网卡。
- IPIP 隧道:在一个 IP 包外再套一层 IP 包,实现“隧道传输”。
举例说明
把 TUN 想象成 虚拟邮局窗口:
- 你交给窗口的信件(IP 包),它会再打一个快递袋(外层 IP)。
- 对方窗口拆开袋子,还原出原始信件。
没有 TUN,IPIP 隧道就失去了落脚点。
条件对比
- 条件不足:裸机内核没开启 TUN 模块,隧道协议不可用,只能靠静态路由。
- 条件允许:支持 TUN 的系统下,可以灵活使用 IPIP、VXLAN、GRE 等封装打通跨节点 Pod。
客观条件因素:
- 小型自建集群常见问题:运维团队人手有限,没人会调内核参数。
- 企业团队条件允许时,甚至会部署 DPDK 或专用 CNI 插件,性能更优。
第三章 K8s Pod 外部注册的挑战
外部服务注册(例如 Nacos)场景下,Pod 没有独立可寻址的公网身份。
方案 1:NodeIP + NodePort
- 实际注册的是 NodeIP:NodePort,由 Node 来中转 Pod 的流量。
- 缺点:节点下线或 IP 改变时,外部注册信息会失效。
就像宿舍楼的每个房间(Pod)不能直接收快递,只能寄到大门(NodePort)。
方案 2:Ingress/Gateway 注册
- 使用 Ingress Controller 或 API Gateway,对外提供统一入口。
- 再由网关注册到 Nacos,更稳定、更企业化。
条件对比
- 条件不足:NodeIP+NodePort,适合测试/低规模集群。
- 条件允许:Ingress + DNS + 动态注册,支持水平扩展。
客观条件因素:
- 小型自建集群:可能没有 Ingress 经验,部署成本高。
- 大企业运维团队:通常有网关(如 Istio、APISIX、Kong),注册统一收口。
第四章 MetalLB 与 BGP
MetalLB 的作用
K8s 自带的 LoadBalancer 类型在公有云可用,但裸机/自建集群里缺失。MetalLB 用来补齐:
- Layer2 模式:通过 ARP/NDP 通告,把 VIP 指派到某个 Node。
- BGP 模式:直接对接物理路由器,把 VIP 注入上游网络。
举例说明
- Layer2:就像小区门口的保安,告诉大家“这栋楼的快递今天交给某个业主收”。
- BGP:像物业直接把业主信息登记到市政系统,谁查都能找到。
条件对比
- 条件不足:只能用 Layer2,小范围实验可行。
- 条件允许:使用 BGP,与运营商/IDC 打通,全局可达。
客观条件因素:
- 小团队:没路由器权限,无法跑 BGP。
- 大团队:有专职网络工程师,可以与上游交换机做 peering。
第五章 OSPF 在容器网络中的类比
理论背景
- OSPF 是内部网关协议,通过 LSA 广播路由状态,自动算出最短路径。
- 优点:动态、快速收敛,适合自治系统内部。
举例说明
OSPF 就像一个全城的导航 APP:
- 每个路口(路由器)定期上报路况(LSA)。
- APP 根据地图算出最佳路线。
在 K8s 网络里,OSPF 的思想对应“服务发现 + 动态更新”。
第六章 MetalLB 与 BGP、OSPF 的关系
MetalLB(BGP 模式):把 K8s Service IP 注入外部路由表,作用是“出口宣告”。
OSPF:更多用于内部网络,负责“自治系统内部最优路径选择”。
关系:
- BGP 像“跨城电话簿”,负责对外沟通。
- OSPF 像“本地导航 APP”,负责内部调度。
- MetalLB 借助 BGP,把容器世界的 IP 公布给传统网络,形成“桥梁”。
第七章 条件不足与条件允许下的配置对比
场景 | 条件不足方案 | 条件允许方案 | 可能的客观原因 |
---|---|---|---|
数据库接入 | 公网 + 白名单 | Private Endpoint + Private DNS | 小团队无 DNS 管理权限 / 无预算 |
跨节点 Pod 网络 | 静态路由手工配置 | TUN + IPIP/VXLAN 封装 | 缺乏内核经验 / 无运维团队 |
Pod 外部注册 | NodeIP+NodePort | Ingress + 动态服务发现 | 无网关组件 / 无专人管理 |
Service 暴露 | MetalLB Layer2 | MetalLB BGP | 无路由器权限 / 人员缺少 BGP 经验 |
路由选择 | 静态路由 | OSPF 动态路由 | 公司无专职网络工程师 |
总结
本文从 Azure Private Endpoint 出发,回顾了 TUN/IPIP 的内核原理,分析了 K8s Pod 对外注册的挑战,探讨了 MetalLB 与 BGP 的角色,以及 OSPF 在容器网络中的类比,最后梳理了它们的关系与条件差异。
关键启发:
- 云原生网络并非凭空而来,而是传统网络协议的延伸。
- 每个组件都有其适用场景:条件不足时选简化方案,条件允许时用企业级解法。
- 除了技术条件,团队规模、预算、权限与经验也是决定方案的重要因素。
希望这篇文章能帮你在云原生网络的迷宫里,多一份全局地图。🚀