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

K8s Service

在 Kubernetes 中,Service是一种抽象,用于定义一组逻辑上相关的 Pod 的访问策略,并为它们提供一个稳定的网络入口。由于 Pod 是动态创建和销毁的,其 IP 地址会变化,Service 解决了这个问题,让客户端能够通过固定的地址访问后端 Pod。


1. 为什么需要 Service?

  • Pod 的不稳定性:Pod 可能因故障、更新、扩缩容等原因被重建,每次重建 IP 地址都会改变。直接使用 Pod IP 会导致客户端无法可靠访问。
  • 服务发现:客户端需要知道后端 Pod 的地址,Service 提供了一种发现机制(通过环境变量或 DNS)。
  • 负载均衡:当多个 Pod 副本提供相同服务时,Service 可以将流量分发到各个 Pod,实现负载均衡。
  • 稳定的访问入口:Service 拥有自己的虚拟 IP(ClusterIP)和 DNS 名称,不会随 Pod 变化而变化。

2. Service 的核心功能

  • 稳定的 IP 和端口:每个 Service 被分配一个虚拟 IP(ClusterIP),客户端通过该 IP 和端口访问服务。
  • 内置负载均衡:Service 自动将请求轮询转发到后端的多个 Pod 上(默认基于iptablesIPVS)。
  • 服务发现:Kubernetes 支持两种服务发现方式:
    • 环境变量:Pod 创建时,集群会在其环境中注入当前命名空间下所有 Service 的 IP 和端口信息。
    • DNS:集群 DNS(如 CoreDNS)为 Service 创建内部域名,格式为<service-name>.<namespace>.svc.cluster.local,Pod 可直接通过域名访问。

3. Service 的类型

Kubernetes Service 有四种主要类型,适用于不同场景:

类型描述访问范围
ClusterIP(默认)在集群内部暴露 Service,分配一个虚拟 IP,仅集群内可访问。集群内部
NodePort在每个节点的固定端口上暴露 Service,通过NodeIP:NodePort从集群外部访问。集群外部(节点网络)
LoadBalancer在 NodePort 基础上,自动创建一个云负载均衡器(如 AWS ELB、阿里云 SLB),将流量引入集群。集群外部(通过云厂商 LB)
ExternalName将 Service 映射到外部的 DNS 名称,不创建代理,而是返回 CNAME 记录。集群内外(通过 DNS)

4. Service 的工作原理

Service 通过标签选择器(selector)确定后端 Pod 集合。例如,一个 Service 可能选择所有带有app: myapp标签的 Pod。

当 Service 创建后,Kubernetes 控制平面会创建对应的Endpoint 对象(或 EndpointSlice),记录所有匹配 Pod 的 IP 和端口。集群中每个节点上运行的kube-proxy组件负责监听 API Server 中 Service 和 Endpoint 的变化,并动态更新节点上的网络规则(如 iptables、IPVS),将发往 Service IP 的流量转发到后端 Pod。


5. 一个简单的 Service 示例

apiVersion:v1kind:Servicemetadata:name:my-servicespec:selector:app:myapp# 选择带有 app=myapp 标签的 Podports:-protocol:TCPport:80# Service 的端口targetPort:8080# Pod 上容器监听的端口type:ClusterIP# 默认类型,可省略

创建后,集群内其他 Pod 可以通过my-service.default.svc.cluster.local或 ClusterIP 访问该服务,流量会被轮询转发到后端的 Pod 上。


6. 特殊情况:Headless Service

如果设置spec.clusterIP: None,则创建一个Headless Service。它不分配 ClusterIP,也不执行负载均衡,而是直接返回后端 Pod 的 IP 列表。通常用于需要自己控制负载均衡的场景(如 StatefulSet 的有状态应用)或配合 Service Mesh。


7. Service 与 Ingress 的关系

  • Service主要提供四层(TCP/UDP)负载均衡和访问入口。
  • Ingress是七层(HTTP/HTTPS)的入口控制器,可以将外部流量路由到不同的 Service,并提供域名、TLS 终结等高级功能。Ingress 通常需要配合 Service 使用。

总结

Kubernetes Service 是连接客户端与后端 Pod 的关键抽象,它提供了稳定的网络端点、服务发现和负载均衡能力,使得微服务架构中的动态 Pod 管理成为可能。通过不同类型的 Service,你可以灵活地控制服务的内部和外部访问方式。

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

相关文章:

  • 供应链产研交付提效:后端开发提效实战
  • S款直流一体机模块问题排查指导
  • effective-Objective-C-大中枢派发
  • “十五五”具身智能新基建:虚实融合训练场与Agent协同控制平台深度解析(WORD)
  • 期货软件开发「启动加载页 / 初始化窗口」
  • Python抓取广东省各城市租房数据并存储
  • 【研报216】2026年智能驾驶产业市场趋势与用户需求分析:AI 重构汽车价值链
  • 基于springboot城市智慧养犬管理平台
  • 4-Kotlin核心语法-数据类与密封类
  • 为什么防御 DDoS 攻击的成本这么高?
  • 基于AWS CAF构建标准化云治理体系,助力企业实现安全合规与可持续优化
  • CTF保姆级教程:从零基础到参赛拿奖,2026年最全指南!
  • 花8000买的商标竟是“废标”?内行人教你3步避开90%的坑
  • Java字符串反转,统计字符串中字符类型及频次
  • 爬虫识别与防御
  • Flutter 三方库 icc_parser 的鸿蒙化适配指南 - 高效解析 ICC 颜色配置文件,精准还原跨平台色彩表现
  • 原儿茶醛市场洞察:2026 - 2032年复合增长率(CAGR)为4.6%
  • 三相电压型SVPWM整流器仿真与控制策略分析,双闭环PID控制,输出电压600V(可自行调节)...
  • 氛围编程的一些体会
  • 权威认证 + 实战教学 守嘉职业技能三大热门培训 为健康产业输送专业人才 - 品牌排行榜单
  • OpenClaw Runtime 源码级解析:从 CLI 到 Agent Execution Engine
  • P1908 逆序对
  • Oracle 故障应急处理手册-RAC 投票盘(Voting Disk)故障恢复
  • Flutter 三方库 rabbit_converter 的鸿蒙化适配指南 - 让消息转换回归“工业化标准”,打造鸿蒙应用专家级的 RabbitMQ 数据适配中台
  • OpenClaw:打开文献综述宝库的钥匙——引用方法与技巧详解
  • SLAM公式中双竖线 ||·|| 表示什么意思?一文搞懂范数的含义
  • 甘肃2026上半年软考报名时间已出!
  • 院墙上的监控成摆设?避开这三个坑,不给骗子留机会!室外监控摄像头哪个品牌好
  • Boost源码分析: Serialization
  • 国产化解决方案!鼎讯信通 射频信号源模块 DXSL系列