Kubernetes Service 是为一组 Pod 提供稳定访问入口的资源对象。因为 Pod 会随着扩缩容、发布和故障恢复不断变化,IP 不稳定,Service 通过标签选择器找到后端 Pod,并为调用方提供固定名称和访问地址。

为什么需要Service
在 Kubernetes 中,Pod 是动态的。一次滚动更新可能创建新 Pod、删除旧 Pod;节点故障后 Pod 可能被调度到其他节点。如果服务调用方直接访问 Pod IP,就会频繁失效。
Service 解决的问题是:
- 给动态 Pod 提供稳定访问名称
- 自动发现符合标签的后端 Pod
- 在多个 Pod 副本之间做基础负载均衡
- 隔离调用方和后端实例变化
Service如何找到Pod
Service 通常通过 selector 匹配 Pod 标签。例如 Service 选择 app=web 的 Pod,只要新的 Pod 带有这个标签,就会自动成为后端。这样 Deployment 扩缩容或更新时,Service 后端会自动变化。
如果标签写错,Service 可能没有任何后端,这是 Kubernetes 新手常见问题。
Service有哪些类型
| 类型 | 主要用途 | 适合场景 |
|---|---|---|
| ClusterIP | 集群内部访问 | 微服务之间调用 |
| NodePort | 通过节点端口访问 | 测试或简单外部暴露 |
| LoadBalancer | 对接外部负载均衡器 | 云环境对外服务 |
| ExternalName | 映射外部服务名称 | 访问集群外服务 |
企业生产中,内部服务通常使用 ClusterIP,对外访问通常通过 Ingress、API 网关或云负载均衡器统一管理。
Service和Ingress的关系
Service 负责把流量转发到后端 Pod,Ingress 负责 HTTP/HTTPS 的域名、路径和证书入口。可以理解为:Ingress 是外部门牌,Service 是内部服务入口,Pod 是实际处理请求的实例。

服务发现如何工作
Kubernetes 集群内通常通过 DNS 进行服务发现。应用可以使用服务名访问同命名空间服务,也可以使用完整域名访问其他命名空间服务。
这种方式让应用不需要写死 IP,而是依赖服务名称。对微服务系统来说,这是稳定调用链路的基础。
企业使用Service的注意事项
标签命名要规范
Service 依赖标签选择 Pod。企业应统一标签规范,例如 app、component、version、team、env,避免选择器混乱。
不要滥用NodePort
NodePort 简单直接,但端口管理、安全策略和负载均衡能力有限。生产环境更建议使用 Ingress 或网关统一入口。
关注后端健康
Service 本身不理解业务健康,它依赖 Pod Ready 状态。readinessProbe 配置不准确,会导致不可用 Pod 接收流量。
配合网络策略
Service 提供访问入口,不等于安全隔离。企业还需要 NetworkPolicy、服务网格或网关策略控制访问边界。
常见排查思路
如果 Service 无法访问,可以按顺序检查:
- Service selector 是否匹配 Pod 标签。
- Pod 是否处于 Ready 状态。
- targetPort 是否对应容器监听端口。
- DNS 是否能解析服务名。
- NetworkPolicy 是否限制访问。
- Ingress 或网关是否路由到正确 Service。
Service设计要和应用访问模型匹配
Service 看似简单,但它决定了应用之间如何访问。设计 Service 时,不能只关注端口能不能通,还要考虑访问范围、命名规范、后端选择器、协议类型和后续治理方式。内部服务、外部服务、状态服务和网关入口不应该使用同一种暴露方式。
建议按访问场景区分:
- 集群内服务调用:优先使用 ClusterIP,通过服务名访问。
- HTTP/HTTPS外部访问:通常通过 Ingress 或 API 网关接入。
- 云厂商负载均衡场景:可以使用 LoadBalancer,但要纳入成本和安全管理。
- 测试或临时访问:NodePort 可以临时使用,但不建议作为长期生产入口。
Service 的核心不是负载均衡本身,而是把动态 Pod 转换成稳定服务身份。只要理解这一点,就能解释为什么 Pod 重建后调用方不需要改地址。
服务发现故障如何快速定位
Service 访问失败时,不要只看 Service 对象是否存在。应按链路排查:Service selector 是否匹配 Pod 标签,Endpoint 是否生成,Pod 是否 Ready,targetPort 是否对应容器端口,DNS 是否解析正常,NetworkPolicy 是否拦截,Ingress 或网关是否转发到正确服务。
这个排查顺序可以帮助团队把问题从“网络不通”拆成可验证步骤。生产平台最好把这些状态集中展示出来,减少研发在多个命令之间来回切换。
结语
Kubernetes Service 的核心价值,是为动态变化的 Pod 提供稳定服务发现和访问入口。理解 Service 与 Pod、Deployment、Ingress 的关系,是掌握 Kubernetes 网络和应用发布的基础。
FAQ
Service会直接创建Pod吗?
不会。Service 只选择已有 Pod 并提供访问入口,Pod 通常由 Deployment、StatefulSet 等控制器创建。
ClusterIP可以被集群外访问吗?
默认不能。ClusterIP 面向集群内部访问,外部访问通常需要 Ingress、LoadBalancer 或网关。
Service负载均衡能替代网关吗?
不能完全替代。Service 提供基础四层转发,网关通常还提供认证、限流、路由、证书和观测能力。
为什么Service没有后端Endpoint?
常见原因是 selector 标签不匹配、Pod 未 Ready、命名空间不一致或工作负载没有成功创建 Pod。
转载请注明出处:https://www.cloudnative-tech.com/p/7269/