当前位置: 首页 > news >正文

深入 Kubernetes Service 底层:解析 IPVS 流量转发与零中断平滑升级

深入 Kubernetes Service 底层:解析 IPVS 流量转发与零中断平滑升级

前言

"老王,我们下周要升级K8s集群,线上服务会不会断啊?"实习生小周端着咖啡杯凑过来,眼神里满是焦虑。

我放下手里的键盘,指着屏幕上的监控面板:"放心,只要把IPVS模式和就绪探针配置好,流量可以做到零中断切换。"

"IPVS?那不是kube-proxy的一种模式吗?跟service有啥关系?"

"这就是今天要聊的——Kubernetes Service在IPVS模式下是如何实现流量转发的,以及如何利用这些机制保障集群升级时服务不中断。"


一、底层原理:IPVS模式下kube-proxy的流量分发机制

1.1 IPVS架构概览

IPVS(IP Virtual Server)是Linux内核提供的四层负载均衡技术,kube-proxy在IPVS模式下会在每个节点上维护虚拟服务(Virtual Server)和真实服务器(Real Server)的映射关系。

flowchart TD A[客户端请求] --> B[Node节点] B --> C[kube-proxy IPVS规则] C --> D{负载均衡算法} D -->|rr| E1[Pod 1] D -->|wrr| E2[Pod 2] D -->|lc| E3[Pod 3] D -->|dh| E4[Pod 4]

1.2 IPVS工作模式对比

模式转发方式优点缺点
NAT地址转换后端无需公网IP单节点瓶颈
TUNIP隧道高吞吐量需要隧道支持
DR直接路由性能最优需要同一广播域

1.3 kube-proxy IPVS模式工作流程

sequenceDiagram participant Client as 客户端 participant Node as Node节点 participant KubeProxy as kube-proxy participant IPVS as IPVS内核模块 participant Pod as 后端Pod Client->>Node: 请求 Service VIP:Port Node->>KubeProxy: 检查IPVS规则 KubeProxy->>IPVS: 查询虚拟服务 IPVS->>IPVS: 执行负载均衡算法 IPVS->>Pod: 转发流量(DR模式) Pod-->>Client: 直接响应

二、快速上手:IPVS模式配置与验证

2.1 开启IPVS模式

# 检查内核模块 lsmod | grep -e ip_vs -e nf_conntrack # 如果未加载,手动加载 modprobe ip_vs modprobe ip_vs_rr modprobe ip_vs_wrr modprobe ip_vs_sh modprobe nf_conntrack # 修改kube-proxy配置 kubectl edit configmap kube-proxy -n kube-system

2.2 kube-proxy配置示例

apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: "ipvs" ipvs: scheduler: "rr" excludeCIDRs: [] minSyncPeriod: 0s maxSyncPeriod: 30s syncPeriod: 30s

2.3 使用ipvsadm查看规则

# 安装ipvsadm apt-get install ipvsadm -y # 查看IPVS虚拟服务 ipvsadm -Ln # 查看具体后端节点 ipvsadm -Ln -t 10.96.0.1:80

三、核心API与深水区:会话保持与连接迁移

3.1 IPVS会话保持机制

apiVersion: v1 kind: Service metadata: name: my-service spec: sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800 # 3小时会话保持 selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376

3.2 ExternalTrafficPolicy配置

apiVersion: v1 kind: Service metadata: name: my-service spec: externalTrafficPolicy: Local selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376

3.3 EndpointSlice的作用

apiVersion: discovery.k8s.io/v1 kind: EndpointSlice metadata: name: my-service labels: kubernetes.io/service-name: my-service addressType: IPv4 ports: - name: http protocol: TCP port: 80 endpoints: - addresses: - "10.1.0.1" conditions: ready: true hostname: pod-1 - addresses: - "10.1.0.2" conditions: ready: false hostname: pod-2

四、实战演练:集群升级流量零中断方案

4.1 升级前准备

# 检查当前集群状态 kubectl get nodes # 标记节点为不可调度 kubectl cordon node-1 # 驱逐节点上的Pod kubectl drain node-1 --ignore-daemonsets --delete-local-data

4.2 升级过程中的流量切换

flowchart LR subgraph 升级前 A[流量] -->|IPVS| B[Pod旧版本] end subgraph 升级中 C[Pod新版本就绪] D[Endpoint更新] E[IPVS规则更新] end subgraph 升级后 F[流量] -->|IPVS| G[Pod新版本] end B -->|就绪探针失败| D C -->|就绪探针成功| D D --> E E --> G

4.3 就绪探针配置示例

apiVersion: v1 kind: Pod metadata: name: my-app spec: containers: - name: my-app image: my-app:v2 ports: - containerPort: 8080 readinessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 10 periodSeconds: 5 timeoutSeconds: 3 successThreshold: 2 failureThreshold: 3

4.4 验证升级结果

# 检查Endpoint状态 kubectl get endpoints my-service # 检查IPVS规则变化 watch ipvsadm -Ln # 验证服务可用性 curl http://<service-ip>/healthz

五、避坑指南

5.1 常见问题与解决方案

问题原因解决方案
流量中断Endpoint更新延迟调整endpointSliceSyncPeriod参数
会话丢失未配置会话保持设置sessionAffinity: ClientIP
节点压力所有流量经过同一节点使用externalTrafficPolicy: Local
探针误判探针配置不合理调整initialDelaySecondssuccessThreshold

5.2 关键配置参数

# kube-controller-manager配置 apiVersion: v1 kind: ConfigMap metadata: name: kube-controller-manager data: config.yaml: | endpointSliceSyncPeriod: 5s nodeMonitorPeriod: 5s podEvictionTimeout: 5m0s

六、总结

通过深入理解IPVS模式下kube-proxy的流量转发原理,我们可以利用以下策略实现集群升级时的服务流量零中断:

  1. IPVS负载均衡:利用内核级转发提高性能
  2. 就绪探针:确保Pod真正就绪后才接收流量
  3. ExternalTrafficPolicy: Local:减少跨节点流量
  4. 会话保持:保证长连接业务的连续性
  5. EndpointSlice:实现更细粒度的端点管理

技术的本质是解决问题,而理解底层原理能让我们更从容地面对复杂场景。就像我家的Ping,只要掌握了它的习性,就能在它跳上键盘时优雅地把它抱走,既不影响工作,又能保持和谐。


作者简介:云原生技术博主,网名"云原生技术博主",云原生后端工程师,专注K8s、Go、云原生AI领域。热爱技术分享,希望用通俗易懂的方式讲解复杂的技术原理。

关注我:持续分享云原生领域的深度技术文章和实战经验。

http://www.jsqmd.com/news/952091/

相关文章:

  • 底部工具栏
  • TQVaultAE终极指南:三步掌握泰坦之旅无限仓库管理神器
  • 当数据消失时:TestDisk与PhotoRec如何成为你的数字救生员
  • 3000-4000元实况拍照手机横评:4款热门手机谁更值得买?
  • 3步搞定安卓应用安装:APK Installer让你的Windows电脑变身移动应用中心
  • 深圳办公 ai 培训机构哪家性价比高:独家 TOP5 深度解 - 13724980961
  • 2026 年 GEO 优化公司推荐名单:6 月国内 TOP10 服务商综合测评 + GEO 概念详解 - 玖叁鹿
  • CSAPP=系统硬件组成 + CPU 如何执行程序
  • [智能体-264]:Embedding 通俗发展史(四段式,大白话,从远古→现在 RAG)
  • Hello Agent 学习第一天
  • 深圳办公 ai 培训机构哪家值得信赖:五大机构最新专业测评 - 17329971652
  • 别再死记ResNet了!用PyTorch从零实现DenseNet-121,搞懂‘密集连接’到底好在哪
  • 被37所重点中小学内部传阅的《AI教学整合避坑手册》(含18个真实失败案例+可审计整改清单)
  • 2026乐清疏通马桶、下水道哪家好?4家优质商家测评信息,优选道道通! - 极速版本
  • 大优势揭秘,香港业主全屋定制为什么都选深圳RERA源木匠心 - 产品测评官
  • 利用人工智能破解中世纪密码
  • ai赋能jenkins:用快马平台智能生成与优化持续集成流水线脚本
  • 如何突破百度网盘下载限制:终极解析工具完全指南
  • 【结果+代码】2026中青杯B题第一问建立无参考图像质量评价(NR-IQA)的数学模型
  • 2026 年深圳全屋定制衣柜橱柜酒柜 10 万以内怎么选不踩坑 - 产品测评官
  • 2026年广东可靠的全屋定制工厂平台深度解析:如何选择真正省心的服务商? - 2026年企业资讯
  • 模型轻量化实战:将DenseNet-169部署到树莓派4B上做图像分类(附完整onnx转换与推理代码)
  • B站成分检测器:智能用户分析工具,让评论区身份一目了然
  • 2026年更新:特种电磁阀实力厂家宁波安利特的深度解析与选型指南 - 2026年企业资讯
  • WCH-Link Utility隐藏功能挖掘:不止烧录,还能一键读保护、读Flash和批量操作
  • 加油卡小程序开发玩法深度解析:功能架构、营销体系与落地方案
  • Python中类方法、静态方法、实例方法是否能访问类属性和实例属性
  • low-memory-server-swap-20260601
  • STC89C52电子时钟DIY避坑指南:从洞洞板飞线到Keil编程的完整心路历程
  • 驾校招生、排课、收费、考试全环节落地的SpringBoot+Vue可运行系统(含建库脚本与部署文档)