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

K8s LoadBalancer服务深度解析

在 Kubernetes(k8s)中,LoadBalancer 类型的 Service 是用于将集群内的服务暴露到集群外部的核心资源,尤其适用于需要从公网或外部网络访问集群服务的场景。以下详细说明其作用工作过程

一、核心作用

LoadBalancer 类型的 Service 主要解决 **“集群服务对外暴露”** 的问题,具体作用包括:

  1. 外部访问入口:为集群内的 Pod 提供一个稳定的外部 IP 地址(通常是公网 IP),外部客户端可通过该 IP 直接访问集群内的服务,无需了解 Pod 的动态 IP(Pod 重建会导致 IP 变化)。
  2. 负载均衡:自动将外部请求分发到后端多个 Pod 上,实现请求的负载分担,提升服务可用性和并发能力。
  3. 与云厂商集成:在云环境(如 AWS、GCP、阿里云等)中,会自动调用云厂商的负载均衡器(如 AWS ELB、阿里云 SLB),无需手动配置外部负载均衡器。

二、工作过程(以云环境为例)

LoadBalancer 类型的 Service 从创建到生效,经历以下关键步骤:

1. 创建 Service 资源

用户定义 LoadBalancer 类型的 Service YAML 配置,指定后端 Pod 的标签选择器(selector)、端口映射(ports)等,示例:

apiVersion: v1
kind: Service
metadata:name: my-loadbalancer-service
spec:selector:app: my-app  # 匹配标签为 app=my-app 的 Podports:- port: 80        # Service 暴露的端口(外部访问用)targetPort: 8080 # 后端 Pod 实际监听的端口type: LoadBalancer

执行 kubectl apply -f service.yaml 后,k8s 开始创建 Service。

2. 自动关联云厂商负载均衡器
  • k8s 集群(通常是云厂商托管的集群,如 EKS、ACK)检测到 type: LoadBalancer 后,会通过云控制器管理器(Cloud Controller Manager) 调用云厂商的 API(如 AWS EC2 API、阿里云 SLB API),自动创建一个云负载均衡器(如 ELB、SLB)。
  • 云负载均衡器会被分配一个外部 IP 地址(公网 IP),用于外部客户端访问。
3. 配置负载均衡规则
  • k8s 自动将 Service 的端口映射(如外部 80 端口 → 内部 Pod 8080 端口)同步到云负载均衡器,确保外部请求通过 80 端口进入时,能正确转发到 Pod 的 8080 端口。
  • 同时,k8s 会将匹配 selector 的 Pod 节点(Node)和端口注册到云负载均衡器的后端服务器列表中。
4. 外部请求转发流程

当外部客户端(如用户浏览器)通过负载均衡器的外部 IP: 端口(如 123.45.67.89:80)发起请求时:

  1. 请求首先到达云厂商的负载均衡器(如 ELB)。
  2. 负载均衡器根据预设规则(如轮询、权重),将请求转发到集群内的某个 Node 的对应端口(由 k8s 自动配置的 NodePort,通常是 30000-32767 范围内的随机端口)。
  3. Node 上的 kube-proxy 组件接收到请求后,根据 Service 与 Pod 的关联关系,将请求转发到后端的某个 Pod(通过 iptables 或 IPVS 规则)。
  4. Pod 处理请求后,将响应按原路返回给外部客户端。
5. 动态更新(Pod 变化时)
  • 当后端 Pod 因扩缩容、故障重建等原因发生变化时(IP 或数量改变),k8s 会自动更新 Service 的 endpoints(后端 Pod 列表)。
  • 云控制器管理器会同步更新云负载均衡器的后端服务器列表,确保负载均衡规则始终指向可用的 Pod,无需人工干预。

三、关键特点与注意事项

  1. 依赖云环境LoadBalancer 类型的 Service 在自建集群(非云环境) 中通常无法自动创建负载均衡器,此时外部 IP 可能显示为 <pending>,需手动配置外部负载均衡器并关联 NodePort。
  2. 成本与资源:云厂商的负载均衡器通常是收费资源,需注意成本控制;且每个 LoadBalancer Service 会对应一个独立的负载均衡器,不适合大量创建。
  3. 会话亲和性:可通过 sessionAffinity: ClientIP 配置会话亲和性,使来自同一客户端 IP 的请求始终转发到同一个 Pod(适用于需要保持会话的场景)。
  4. 健康检查:云负载均衡器会自动对后端 Node/Pod 进行健康检查(如 TCP 端口探测),若检测到故障,会自动剔除异常节点,确保请求仅转发到健康的 Pod。

总结

LoadBalancer 类型的 Service 是云环境中暴露 k8s 服务的首选方案,其核心价值在于:自动集成云厂商负载均衡器,提供稳定的外部访问入口,实现请求负载均衡,并动态适配后端 Pod 变化,大幅简化了服务对外暴露的复杂度。

http://www.dtcms.com/a/390586.html

相关文章:

  • Windows 系统开发 iOS 与安卓应用全流程指南,附 PC 前端工具链
  • CentOS 7 系统 “cannot find a valid baseurl for repo base7x86_64” 报错完整解决方案
  • centos7通过kubeadm安装k8s1.27.1版本
  • kubesphere(k8s)如何设置存储类的默认路径
  • 在 k8s 上部署 Kafka 4.0 3节点集群
  • k8s 部署 EMQX 5.8.6 静态三节点集群
  • UVa1374/LA3621 Power Calculus
  • 以 NoETL 重塑 AI-Ready 的数据底座,Aloudata 获评 IDC 面向生成式 AI 的数据基础设施核心厂商
  • 声音转文字API平台推荐
  • Vue3: watch watchEffect
  • 梯度提升算法及其在回归与分类中的应用实战
  • 【自然语言处理与大模型】大模型应用开发四个场景
  • 深度神经网络-传播原理
  • 交通仿真术语
  • 关于Oracle主外键约束的几个SQL语句
  • Python 操作 SQLite:Peewee ORM 与传统 sqlite3.connect 的全方位对比
  • go资深之路笔记(四)中间件(Middleware)设计模式
  • MySQL分库分表迁移:ETL平台如何实现数据合并与聚合
  • [极客大挑战 2019]BabySQL
  • SQL-索引使用
  • 数据库和数据仓库有什么区别
  • SpringBoot2.7X整合Swagger、Redission3.X的bug
  • uniapp安卓原生插件实现开启ble Server[外围模式]
  • React 18.2中使用React Router 6.4
  • 人员在岗监测技术研究:基于计算机视觉的智能监管方案
  • 实测AI Ping,一个大模型服务选型的实用工具——行业实践与深度优化策略
  • 通过QuickAPI优化金融系统API:安全快捷的数据共享最佳实践
  • 第4节 添加视频字幕到剪映(Coze扣子空间剪映小助手零基础教程)
  • 算法 --- BFS 解决 FloodFill 算法
  • telnet 一个 ip+端口却无法退出 着急