在K8S中,网络通信模式有哪些?

news/2025/9/24 11:59:19/文章来源:https://www.cnblogs.com/zjh997/p/19108904

好的,这是一个非常核心的问题。Kubernetes 的网络模型是一个复杂的体系,但我们可以将其分解为几个清晰的层次来理解。

Kubernetes 网络通信模式可以分为四大类,下图清晰地展示了这四类通信的全景:

    A[Kubernetes 网络通信] --> A1[容器间通信]A --> A2[Pod 间通信]A --> A3[Pod 与 Service 通信]A --> A4[外部流量接入]A1 --> A1_1[同一 Pod 内共享网络命名空间<br>通过 localhost 直接通信]A2 --> A2_1[跨节点 Pod 通信<br>依赖 CNI 网络插件实现]A2 --> A2_2[同一节点 Pod 通信<br>通常通过网桥]A3 --> A3_1[ClusterIP]A3 --> A3_2[NodePort]A3 --> A3_3[LoadBalancer]A3 --> A3_4[ExternalName]A4 --> A4_1[Ingress]A4 --> A4_2[Gateway API]

下面我们详细解析每一种模式。


模式一:容器间通信(同一 Pod 内)

这是最简单的一种模式。

  • 原理:Pod 是 K8S 的最小调度单元,一个 Pod 内的所有容器共享同一个网络命名空间。这意味着它们共享同一个 IP 地址、端口空间,并且可以通过 localhost 直接访问对方。
  • 通信方式直接通过 localhost 和端口号进行通信
  • 示例:一个 Pod 包含一个主应用容器(监听 8080 端口)和一个日志收集 Sidecar 容器。Sidecar 可以直接通过 localhost:8080 访问主应用。
  • 关键点:无需任何额外的网络配置,由 K8S 底层容器运行时(如 Docker、containerd)自动保证。

模式二:Pod 与 Pod 间通信

这是 K8S 网络模型的核心,也是容器网络接口(CNI) 插件主要解决的问题。K8S 本身不提供网络实现,只制定规则,具体实现由 CNI 插件完成。

  • 核心要求(K8S 网络模型)

    1. 所有 Pod 都可以在不使用网络地址转换(NAT)的情况下与所有其他 Pod 通信
    2. 每个 Pod 都有一个独立的、唯一的 IP 地址(Pod IP),这个 IP 地址本身可以被其他 Pod 直接访问。
  • 子模式 2.1:同一节点上的 Pod 间通信

    • 原理:通常由节点上的一个虚拟网桥(如 docker0cni0)实现。Pod 的虚拟网络设备(veth pair)一端在 Pod 内,另一端连接到网桥上。网桥充当一个虚拟交换机,转发同一网段内的流量。
    • 通信方式:通过网桥直接进行二层通信。
  • 子模式 2.2:不同节点上的 Pod 间通信

    • 原理:这是 CNI 插件大显身手的地方。不同插件有不同的实现方式,但目标都是建立一个覆盖网络 或利用底层云网络,使不同节点上的 Pod 看起来在同一个大网络中。
    • 常见实现技术
      • Overlay 网络(如 Flannel 的 VXLAN、Calico 的 IPIP 模式):将 Pod 的网络数据包封装在节点的网络数据包中进行传输。适用于任何底层网络环境。
      • 纯三层路由(如 Calico 的 BGP 模式):要求底层网络支持路由,每个节点作为一个路由器,通过 BGP 协议交换路由信息,告知其他节点“来我这里的 Pod 的网段,请发给我”。
      • 云提供商集成(如 AWS VPC CNI):直接为每个 Pod 分配一个云 VPC 中的真实 IP 地址,性能最好,但受限于云厂商和 IP 地址数量。

模式三:Pod 与 Service 通信

Pod 是短暂的,它们的 IP 地址会随着重启、调度而变化。Service 提供了一个稳定的网络端点(固定 IP 和 DNS 名称)来访问一组动态变化的 Pod(由 Label Selector 控制)。

  • 原理:Service 的 IP(ClusterIP)是一个虚拟 IP,它不会绑定在任何网络接口上。当 Pod 访问这个 VIP 时,工作节点上的 kube-proxy 组件会介入,负责将流量负载均衡到后端的健康 Pod。

  • kube-proxy 的三种实现模式(决定了具体的流量转发方式)

    1. userspace 模式(已废弃):流量需要从内核空间转到用户空间的 kube-proxy 进程,再由它转发,性能差。
    2. iptables 模式(长期默认):kube-proxy 直接配置 iptables 规则,实现 NAT 和负载均衡。全程在内核态完成,性能好。但当 Service 数量巨大时,iptables 规则链过长会影响性能。
    3. IPVS 模式(生产推荐):使用 Linux 内核的 IPVS(IP Virtual Server)模块,专为负载均衡设计。它使用哈希表,即使有上万个 Service,性能也几乎无损,并支持更丰富的负载均衡算法(如 rr, lc, dh等)。
  • Service 的类型

    • ClusterIP:默认类型,仅在集群内部可访问。
    • NodePort:在 ClusterIP 基础上,在每个节点上开放一个静态端口(如 30000-32767)。访问任何节点的这个端口,流量都会被转发到 Service。
    • LoadBalancer:在 NodePort 基础上,与云提供商集成,自动创建一个外部负载均衡器,将外部流量引导到 Service。
    • ExternalName:通过返回一个 CNAME 记录,将 Service 映射到外部域名。

模式四:外部流量接入集群

这是将集群内服务暴露给公网或外部网络访问的模式。

  • 方式 4.1:NodePort / LoadBalancer

    • 如上所述,这两种 Service 类型可以直接暴露服务,但通常用于暴露粗粒度的服务。
  • 方式 4.2:Ingress(最重要的方式)

    • 原理:Ingress 不是一种 Service,而是一个 API 对象,它充当集群的“智能路由入口”或“七层负载均衡器”。它基于 HTTP/HTTPS 主机名和路径规则,将外部流量路由到集群内部相应的 Service。
    • 关键:Ingress 本身需要 Ingress Controller 才能工作。Ingress Controller 是一个实际运行在集群中的 Pod(如 Nginx Ingress Controller、Traefik、HAProxy),它监听 Ingress 规则的变化,并动态配置其内部的负载均衡器。
    • 示例www.example.com/api 的流量被路由到 api-servicewww.example.com/web 的流量被路由到 web-service。它还负责处理 TLS 终止。
  • 方式 4.3:Gateway API(Ingress 的演进)

    • 这是 K8S SIG-NETWORK 社区推出的新一代官方标准,旨在弥补 Ingress 在灵活性、表达能力和角色分离方面的不足。它更强大,是未来的趋势。

总结与对比

通信模式 核心组件 关键特点
容器间通信 Pod 网络命名空间 localhost 直连,最简单
Pod 与 Pod 通信 CNI 网络插件(如 Calico, Flannel) 扁平的 Pod IP 网络,无 NAT
Pod 与 Service 通信 Service + kube-proxy 虚拟 IP(ClusterIP),负载均衡,服务发现
外部流量接入 Ingress Controller / Gateway API 七层路由、基于主机名和路径、TLS 终止

简单来说,一个外部请求的典型路径是:
Internet -> (可选)云负载均衡器 -> Ingress Controller -> Service -> Pod

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中山网站代运营python nginx做网站

Creator 版本&#xff1a; 3.8.2 目标平台&#xff1a;小游戏开发 压缩后 我不知道别人压缩几百kb是怎么做到的。不过哪个要钱。 我这个技巧不用花钱。 论坛有教程但是没有教详细怎么做。 开整&#xff01; 做一个空白的场景。然后写一个load脚本。load主场景。 从代码可…

厦门网站建设a建筑设计工资一般多少

TCP客户端数据通信 文章目录 TCP客户端数据通信1、软件准备2、硬件准备3、仿真电路原理图4、仿真代码实现5、仿真结果本文将介绍Arduino在Protues仿真环境中作为TCP客户端,如何与TCP服务器进行数据通信。 1、软件准备 1)Arduino IDE或 VSCode + PlatformIO 2)Proteus电路仿…

一文教你搞定PASS 2025:样本量计算神器安装到使用全流程

软件介绍 PASS 2025 是用于效能分析和样本量估计的统计软件包,它在前版本基础上新增了37项样本量计算程序,涵盖医学研究、社会科学调查、工程实验等多种复杂统计场景。新增的Logrank类检验样本量计算程序,能精准计算…

React 18.2中采用React Router 6.4

React 18.2中采用React Router 6.4pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

题解:AT_abc257_h [ABC257Ex] Dice Sum 2

柿子还是得写在草稿纸上手推。 题意:很简单了,不再赘述。 做法: 首先这个权值有点抽象,我们写出来稍微化简一下。 \[\frac{1}{6^n}\sum_{x_1=1}^6\sum_{x_2=1}^6\cdots\sum_{x_n=1}^6(\sum_{i=1}^na_{i,x_i})^2 - …

ClickHouse UPDATE 机制详解 - 若

ClickHouse UPDATE 机制详解 问题现象 在使用ClickHouse进行UPDATE操作时,经常会遇到这样的现象: UPDATE ethereum.block_tasks SETstatus = pending, owner = consumer-1_1758676754070328000, assigned_at = 2025-…

Jetpack Room 从入门到精通 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站建设unohacha免费北京网站建设

导言 在 Rust 中&#xff0c;互斥器&#xff08;Mutex&#xff09;是一种用于在多个线程之间共享数据的并发原语。互斥器提供了一种安全的方式&#xff0c;允许多个线程访问共享数据&#xff0c;但每次只允许一个线程进行写操作。本篇博客将详细介绍 Rust 中互斥器的使用方法&…

不干胶网站做最好的wordpress关闭

应用场景&#xff1a;一个游戏可能会衍生出其他APP或小程序之类的软件&#xff0c;例如王者营地是王者荣耀的官方APP&#xff0c;王者营地提供资讯、赛事、社区、战绩等功能。所以游戏端会和衍生出来的软件端做一些数据互通。这里把软件端称为中台系统。 Get请求和Post请求的区…

自建个网站怎么做网站建设与管理是干什么的

Windows 下本地 Docker RAGFlow 部署指南 环境要求部署步骤1. 克隆代码仓库2. 配置 Docker 镜像加速(可选)3. 修改端口配置(可选)4. 启动服务5. 验证服务状态6. 访问服务7. 登录系统8. 配置模型8.1 使用 Ollama 本地模型8.2 使用在线 API 服务9. 开始使用10. 常见问题处理端…

ClickHouse index_granularity 详解 - 若

ClickHouse index_granularity 详解 什么是 index_granularity index_granularity 是ClickHouse中一个重要的性能配置参数,它定义了索引的粒度(granularity),即每多少个数据行会创建一个索引标记(index mark)。 …

PADS笔记

PADS笔记PCB设计流程准备--功能确定、元器件选型 元件库建立-元器件符号、器件封装 绘制原理图-根据电路功能,将元器件符号进行连接 导出网络表--将元器件的连接关系,以及元器件的信息导出一个文件,以方便导入到其他…

【2025最新教程】Claude Code国内使用_保姆级新手安装使用教程_最强AI编程工具

【2025最新教程】Claude Code国内使用_保姆级新手安装使用教程_最强AI编程工具什么是 Claude Code Claude Code 是 Anthropic 推出的一个 agentic 编码工具 (agentic coding tool),可以在命令行(terminal)中运行,或…

如何计算sequence粒度的负载均衡损失 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

P13885 [蓝桥杯 2023 省 Java/Python A] 反异或 01 串

发现操作完后必定为一个回文串,并且至多消去区间一半数量的 \(1\),求最长回文串即可。

获取网站缩略图的asp代码wordpress的cms主题

防火墙在解决方案及典型项目中的应用 防火墙作为基础安全防护产品&#xff0c;在各种解决方案、业务场景中配套应用&#xff0c;本节给出各类方案资料链接方便查阅。 防火墙在华为网络解决方案中的应用 解决方案 文档 主要应用 CloudFabric云数据中心网解决方案 资料专区…

怎样的网站打开速度块北京房产网二手房出售

这一部分开始&#xff0c;我们将讲解Python中的组合数据类型&#xff0c;这里的知识十分基础而且重要&#xff0c;也已经与C语言的框架愈差愈远。 目录 序列和索引 1、概念 2、切片操作 3、序列的其他操作 列表 1、概念 2、创建与删除 3、列表的操作 4、列表生成式 …

网站开发 有哪些优化功能4p营销理论

随着电商行业的快速发展&#xff0c;个性化服务已经成为提升用户体验和增加用户粘性的关键。基于API的电商平台数据定制和推荐系统是实现这一目标的重要技术手段。 未来&#xff0c;个性化服务可能会朝以下几个方向发展&#xff1a; 更精准的用户画像&#xff1a;通过API接口…

clickhouse轻量级更新 - 若

轻量级更新(Lightweight Updates)是ClickHouse中的一个重要特性,让我详细解释一下: 什么是轻量级更新 轻量级更新是ClickHouse提供的一种高效的UPDATE机制,它允许在不重写整个数据块的情况下更新数据。 传统更新 …

西电PCB设计指南第3章学习笔记

西电PCB设计指南第3章学习笔记 三、PCB的设计与规范画图前的准备确定外轮廓(在机械层核对尺寸,安装孔位,定义PCB边界轮廓)设置layerstack(节点厚度和属性)话说我好像安装了专门算这个的软件?嘿嘿嘿:happy:那么为…