深度分析Docker集群网络之建立跨主机网络,并附完整示例
一、 缘起:容器的“相思病”与网络的“银河”
想象一下,你是一位微服务帝国的“架构师皇帝”。在你的国度里,每一个服务(比如用户服务、订单服务、商品服务)都是一位能干的大臣,被封装在轻便的Docker容器“官邸”中。在单台服务器(单主机)的“京城”里,大臣们毗邻而居,通过Docker自带的bridge网络可以轻松串门、高效议事(通信)。这日子过得那叫一个舒坦。
然而,帝国总要发展!随着业务量增长,“京城”地皮和资源紧张,你不得不考虑“迁都”或“设立陪都”——也就是引入多台服务器,组建一个Docker集群。于是,你将用户服务部署在了主机A(上海),订单服务部署在了主机B(北京)。
问题来了:上海的“用户大臣”想要请示北京的“订单大臣”,却发现眼前横着一条无法逾越的“网络银河”。它们各自的“本地bridge网络”就像官邸外的围墙,只在本地有效。默认情况下,主机A的容器根本无法直接通过主机B的IP地址找到对方,因为它们位于不同的网络命名空间和物理(或虚拟)网络环境下。
这就是容器的“相思病”,也是Docker集群网络必须要解决的核心问题:如何建立跨主机网络,让不同主机上的容器像在同一个局域网内一样自由通信?
二、 探秘:搭建“鹊桥”的几种“仙法”(技术方案)
要为容器们搭建这条“鹊桥”,业界有几种主流的“仙法”(技术方案)。我们先来快速了解一下:
- 端口大法(Port Publishing): 最简单粗暴的方式。将容器内部端口映射到宿主机的特定端口上。这样,北京的主机B可以通过访问上海主机A的IP+映射端口来调用A上的服务。这就像给上海的“用户大臣”家安装了一个“总机电话”(宿主机IP:端口)。缺点是端口管理复杂,且违背了容器对等和透明访问的初衷。
- 自定义网桥大法(Custom Bridge): 通过软件定义网络(SDN)技术,在底层网络上再构建一个虚拟的、覆盖所有主机的网络层。这就像是修建了一条“专用高铁”,所有主机都接入这个高铁网络,容器则获得这个网络内的IP,可以直接通信。这是目前最主流、最Docker Native的方式。
- 主机网络大法(Host Network): 让容器直接使用宿主机的网络命名空间,没有隔离。这相当于让“大臣”直接露天办公,共用“朝廷”的通信系统。虽然性能最好,但完全丧失了容器的网络隔离性,安全隐患大,一般不推荐。
毫无疑问,Overlay Network(覆盖网络) 是搭建这条“鹊桥”的黄金标准,也是Docker Swarm和Kub

最低0.47元/天 解锁文章
888

被折叠的 条评论
为什么被折叠?



