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

LoadBalancer 类型的 Service工作期间,kube-proxy做了什么?

kube-proxy 是 Kubernetes 集群中一个重要的组件,负责实现服务的网络代理和负载均衡功能。当创建一个 LoadBalancer 类型的 Service 时,kube-proxy 在整个过程中扮演了关键角色。以下是 kube-proxy 在 LoadBalancer 类型 Service 创建和使用过程中所做的工作:

1. 监听 Service 和 Endpoint 变更

kube-proxy 运行在每个节点上,并持续监听 Kubernetes API 服务器上的 Service 和 Endpoint 对象的变更。

  • 当创建一个 LoadBalancer 类型的 Service 时,kube-proxy 会收到关于这个新 Service 的通知。
  • 当 Service 的 Endpoint 发生变化(例如,匹配的 Pod 增加或减少)时,kube-proxy 也会收到相应的通知。

2. 更新 iptables 或 IPVS 规则

kube-proxy 使用两种主要的方式来处理网络代理和负载均衡:iptables 和 IPVS(IP Virtual Server)。默认情况下,kube-proxy 可能使用 iptables,但可以通过配置切换到 IPVS

a. 使用 iptables
  • kube-proxy 会在每个节点上更新 iptables 规则,将流量从 Service 的 ClusterIP 和端口转发到匹配的 Pod 的 IP 地址和端口。
  • 对于 LoadBalancer 类型的 Servicekube-proxy 还会配置 iptables 规则,将外部流量从负载均衡器的外部 IP 地址和端口转发到 Service 的 ClusterIP 和端口。
b. 使用 IPVS
  • kube-proxy 会在每个节点上维护一个 IPVS 表,将流量从 Service 的 ClusterIP 和端口转发到匹配的 Pod 的 IP 地址和端口。
  • 对于 LoadBalancer 类型的 Servicekube-proxy 还会配置 IPVS 规则,将外部流量从负载均衡器的外部 IP 地址和端口转发到 Service 的 ClusterIP 和端口。

3. 处理外部流量

当外部客户端通过负载均衡器的外部 IP 地址和端口访问服务时,kube-proxy 会根据配置的 iptables 或 IPVS 规则将流量转发到 Service 的 ClusterIP。

a. 内部转发
  • kube-proxy 会将接收到的流量从 Service 的 ClusterIP 转发到匹配的 Pod 的 IP 地址和端口。
  • 这个过程对于外部客户端是透明的,外部客户端只需要知道负载均衡器的外部 IP 地址和端口即可访问服务。

4. 处理内部流量

当集群内部的 Pod 访问 LoadBalancer 类型的 Service 时,kube-proxy 也会根据配置的 iptables 或 IPVS 规则将流量转发到匹配的 Pod。

5. 更新和删除规则

当 Service 或 Endpoint 发生变化时,kube-proxy 会及时更新或删除相应的 iptables 或 IPVS 规则,以确保流量正确地转发到最新的 Pod。

总结

  • 监听变更kube-proxy 持续监听 Service 和 Endpoint 对象的变更。
  • 更新规则kube-proxy 根据变更更新节点上的 iptables 或 IPVS 规则。
  • 处理流量kube-proxy 将外部流量从负载均衡器的外部 IP 地址和端口转发到 Service 的 ClusterIP,并进一步转发到匹配的 Pod。
  • 内部转发kube-proxy 也将集群内部的流量从 Service 的 ClusterIP 转发到匹配的 Pod。
  • 更新和删除kube-proxy 及时更新或删除规则,以应对 Service 或 Endpoint 的变化。

通过这些操作,kube-proxy 确保了 LoadBalancer 类型的 Service 能够正确地处理和转发流量,提供了可靠的网络代理和负载均衡功能。


http://www.kler.cn/news/365292.html

相关文章:

  • 淘宝API的实战应用:数据驱动增长,实时监控商品信息是关键
  • AUTOSAR CP 中 BswM 模块功能与使用介绍(2/2)
  • python-PyQt项目实战案例:制作一个视频播放器
  • 【NPM】工程化依赖包/库开发 之 常见开发结构/模式及特点
  • 公司章程拟定,定制公司章程
  • 数据结构:堆的应用
  • ctfshow(262,264)--反序列化漏洞--字符串逃逸
  • LeetCode Hot 100:图论
  • 昇思MindSpore进阶教程--三方硬件对接
  • Windchill性能优化篇之分页查询
  • 操作系统笔记(二)进程,系统调用,I/O设备
  • 使用LangGraph构建多Agent系统架构!
  • C++20中头文件syncstream的使用
  • JavaScript 有哪些学习资源
  • Rust使用config加载Toml配置文件
  • leetcode-75-颜色分类
  • 为Windows Terminal 配置zsh + Oh-My-Zsh!
  • 探索 SVG 创作新维度:svgwrite 库揭秘
  • 力扣80:删除有序数组中重复项
  • vue2+elementui日期选择器
  • UI 提供的 progress-step 要怎么实现?
  • 如何使用gitlab切换分支
  • 材质变体 PSO学习笔记
  • Excel重新踩坑3:条件格式;基本公式运算符;公式中的单元格引用方式;公式菜单栏其他有用的功能说明;
  • SSH 的 N 大黑科技玩法
  • 力扣 困难 52.N皇后II