容器网络模型回答的是:Pod如何获得地址、跨节点如何通信、服务如何被发现、流量如何被治理、访问边界如何被限制。企业理解它,不能只停留在“选哪个CNI插件”,而要把网络分成基础连通、服务通信和安全控制三个层次。
核心口径:CNI解决Pod网络底座,Service与入口解决访问抽象,Service Mesh和网络策略分别强化流量治理与访问边界。
容器网络先要避免“能通就行”的误判
在传统部署中,应用通常运行在固定服务器上,网络规划围绕主机IP、端口、防火墙和负载均衡展开。进入Kubernetes后,Pod会动态创建、销毁和迁移,单个Pod IP不适合作为长期依赖,服务副本数量也会随发布和扩缩容变化。网络模型必须适应这种动态性。
很多生产问题来自“能通就行”的早期设计。测试环境中Pod互通不代表生产网络已经合格;单集群可访问不代表多集群、跨命名空间和外部入口都可控;没有限制的默认互通也不代表安全。容器网络需要同时回答连通性、稳定入口、访问边界和排障证据。
容器网络模型的目标不是让所有东西互通,而是让该通的稳定可达、不该通的可被限制、出问题时能定位到具体层级。这个目标决定了CNI、Service Mesh和网络策略各自的边界。
CNI是Pod网络的基础,不等于完整网络治理
CNI负责把容器接入网络。它通常涉及Pod IP分配、跨节点转发、路由或隧道、网络策略承载、节点网络接口和部分可观测能力。没有稳定CNI,Pod之间通信、Service后端转发和网络策略执行都会受到影响。
企业选择CNI时,应关注的不只是安装难度,还包括:
- 跨节点通信路径是否清晰,是否符合现有机房、云网络或混合云网络约束
- 网络策略能力是否满足命名空间、租户和应用分层隔离
- 性能、故障定位和观测能力是否能支撑生产排障
- 升级、扩容和节点替换是否有明确影响范围
- 是否与Ingress、Service Mesh、可观测和安全组件存在兼容边界
CNI选型一旦进入生产,后续调整成本较高。原因在于它位于网络底座,影响Pod连通、策略、性能和故障排查方式。因此,CNI应作为平台基础能力评估,而不是由单个项目临时选择。
Service和入口层把Pod变化隐藏起来
CNI让Pod具备网络连通性,但调用方不应该直接依赖Pod IP。Service通过稳定名称和访问入口,把动态Pod集合抽象成服务;Ingress或网关进一步把外部请求按域名、路径、证书和路由规则导入集群。
这层能力解决的是“应用如何被稳定访问”。当应用滚动发布、Pod扩缩容或节点故障时,Service后端端点会变化,但调用方仍使用稳定地址。对于企业应用交付来说,这让发布验证、回滚和扩容具备自动化基础。
不过,Service存在不等于通信治理完整。它可以提供基础负载分发和发现机制,但超时、重试、熔断、灰度、证书、调用链和细粒度流量策略,通常还需要应用框架、网关或Service Mesh补充。
Service Mesh治理服务调用,但不能替代底层网络
Service Mesh关注服务之间的流量治理。常见能力包括流量拆分、灰度发布、熔断、重试、超时、mTLS、调用链观测和服务级策略。它运行在基础网络之上,通常不负责解决Pod如何获得IP、跨节点如何路由这类底层问题。
引入Service Mesh前,需要先判断团队是否真的具备相应治理需求。服务规模较小、调用链简单、发布频率低时,过早引入Mesh可能增加运维复杂度。服务数量较多、跨团队调用频繁、灰度和安全要求较强时,Mesh可以帮助把调用治理从应用代码中部分抽离出来。
关键边界是:底层CNI、DNS、Service、证书和监控如果不稳定,Mesh不会自动让网络变简单,反而可能让链路多一层。企业应先把基础网络和服务发现做稳,再评估Mesh是否用于更细粒度的服务治理。
网络策略把连通性变成可控访问
默认全通的网络在早期试点中很方便,但生产环境会带来横向访问风险。网络策略用于限制Pod、命名空间和特定流量方向之间的访问关系,让网络从“都能访问”变成“按规则访问”。
网络策略设计要结合应用分层和组织边界。例如前端可以访问后端,后端可以访问数据库,但普通业务命名空间不应访问平台组件;测试环境不应随意访问生产依赖;外部出口应有审计和限制。策略过松没有意义,策略过细又会阻碍发布和排障。
建议从高风险边界开始:核心系统、跨命名空间访问、管理接口、数据库依赖、外部出口和多租户共享集群。每条策略都应能回答“允许谁访问谁、通过什么端口、为什么需要、如何验证”。
分层设计能减少网络排障成本
容器网络故障经常被笼统描述为“网络不通”。实际上,不同层级的证据完全不同。以下分层可以作为排障和验收口径:
| 层级 | 主要对象 | 验证重点 | 常见风险 |
| CNI底座 | Pod IP、路由、跨节点通信 | Pod跨节点互通、节点网络健康 | 插件异常、路由不通、策略不生效 |
| 服务发现 | Service、DNS、Endpoint | 名称解析、后端端点、端口映射 | 选择器错误、Pod未Ready |
| 入口访问 | Ingress、网关、负载均衡 | 域名、证书、路径和外部访问 | 入口规则冲突、证书或路由错误 |
| 服务治理 | Service Mesh、应用策略 | 灰度、熔断、重试、mTLS | 策略复杂、链路观测不足 |
| 访问控制 | NetworkPolicy、安全组 | 放行和拒绝用例同时验证 | 默认全通、误拦截发布流量 |
这张分层表可以帮助团队把问题定位到具体对象。比如DNS正常但Endpoint为空,重点看Service选择器和Pod就绪;Endpoint存在但跨节点访问失败,重点看CNI和节点网络;入口访问失败但集群内访问正常,重点看Ingress、网关或外部负载均衡。
企业建设网络模型时要和发布、安全一起评审
容器网络不是底层团队的孤立事项。发布团队关心新版本何时接流量,安全团队关心访问边界和审计,应用团队关心调用是否稳定,运维团队关心故障是否可定位。网络模型如果只在集群安装时决定,后续很容易被业务变化推翻。
建议在平台建设阶段建立联合评审:
- 应用交付评审Service、Ingress、灰度和回滚路径
- 安全团队评审命名空间隔离、NetworkPolicy、外部出口和管理接口
- 运维团队评审CNI状态、DNS、Endpoint、流量观测和告警
- 架构团队评审多集群、混合云、服务网格和长期扩展边界
如果企业已经有云原生网络相关基础,可以结合 相关主题文章 继续比较云原生网络、CNI和服务治理的边界;如果仍处于平台规划阶段,可以先从 容器与Kubernetes分类 的集群和网络文章建立评估清单。
结尾建议:先画清楚三张网络图
理解容器网络模型后,建议先画三张图:Pod基础连通图、服务访问路径图、安全访问边界图。第一张说明CNI和节点网络,第二张说明Service、Ingress和调用链,第三张说明命名空间、策略和外部出口。
有了这三张图,再讨论是否引入Service Mesh、如何做网络策略、如何规划多集群互联,决策会更稳。否则团队容易在插件名称之间反复比较,却没有解决真正影响生产的连通、治理和安全问题。
常见问题
CNI、Service Mesh和NetworkPolicy应该先建设哪个?
通常应先建设CNI和基础服务发现,再逐步引入NetworkPolicy和Service Mesh。CNI是Pod网络底座,没有稳定连通和路由,后续服务访问与策略治理都缺少基础。Service、DNS和入口访问稳定后,再从核心系统、跨命名空间访问和外部出口开始做网络策略,逐步把默认互通收敛为可控访问。
Service Mesh不建议作为第一步默认引入。它适合服务规模、治理需求和团队运维能力达到一定阶段后使用。否则在基础网络、DNS、证书和可观测性尚不成熟时,Mesh会增加链路复杂度。更稳妥的建设顺序是:先保证Pod和Service稳定,再建立访问边界,最后根据灰度、mTLS、调用治理和观测需求评估Mesh。
容器网络模型和传统网络最大的差异是什么?
最大差异是网络对象变得更动态。传统网络更多围绕服务器、固定IP、静态端口和边界防火墙设计;容器网络则围绕Pod、Service、命名空间、标签、Endpoint和策略设计。Pod会被创建、销毁和迁移,Service后端也会随发布和扩缩容变化,因此网络设计必须适应动态实例和声明式状态。
这并不意味着传统网络经验失效。IP规划、路由、安全域、负载均衡和故障定位仍然重要,只是需要映射到K8s对象上。企业比较容易出问题的地方,是继续把Pod当固定主机,把Service当普通端口,把网络策略当事后补丁。正确做法是把应用架构、发布流程和安全边界一起纳入网络模型设计。
网络策略会不会影响应用发布效率?
会,如果策略设计过粗或过细都可能影响发布。过粗的策略等于没有边界,安全风险被推迟到事故或审计阶段;过细的策略如果缺少命名规范、依赖清单和验证流程,会让每次新服务、新端口或新依赖都变成发布阻塞。网络策略的目标不是制造审批负担,而是把访问关系标准化。
建议先从高价值边界做起,例如核心命名空间、数据库访问、管理接口和外部出口,并建立策略变更的验证方法。应用上线前应确认依赖服务、端口、方向和命名空间,发布后同时验证允许路径和拒绝路径。这样网络策略既能提升隔离能力,也不会让团队在每次发布时靠猜测排查访问问题。
原创声明:本文为 Alauda 原创技术内容,非商业转载须注明出处:https://www.alauda.cn/blog/822/。
文中图示和文章内容未经许可不得用于商业转载、培训课件、营销材料或二次分发。