Kubernetes 中 Service 和 Ingress 的深度解析
Service 和 Ingress 是 Kubernetes 网络体系里最容易一起提到、也最容易混淆的两个对象。它们确实都和“访问服务”有关,但所处层次完全不同。理解它们之间的分工,后面做服务暴露、排障和架构设计时会轻松很多。
先说结论
Service主要解决的是“集群里怎么稳定访问一组 Pod”Ingress主要解决的是“外部流量怎么按规则进入集群里的多个服务”
所以它们不是互斥关系,而是经常一起工作。
Service 负责什么
Service 更偏四层能力,主要做三件事:
- 给一组会变化的 Pod 提供稳定访问入口
- 在后端 Pod 之间做负载分担
- 配合 DNS 提供服务发现
可以把它理解成 Pod 前面的一层稳定抽象。
graph LR Internet -->|HTTP/HTTPS| I[Ingress] I -->|基于路径路由| S1[Service A] I -->|基于域名路由| S2[Service B] I -->|TLS终止| S3[Service C]
rules:
- host: shop.example.com
http:
paths:
- path: /api
backend:
service:
name: api-service
port:
number: 8080
- path: /
backend:
service:
name: frontend-service
port:
number: 80tls:
- hosts:
- "*.example.com"
secretName: tls-wildcard-secretInternet -> Ingress -> Service -> PodsequenceDiagram participant C as Client participant L as LoadBalancer participant I as Ingress Controller participant S as Service participant P as Pod C->>L: HTTPS 请求 L->>I: 转发到 Ingress Controller I->>I: 终止 TLS I->>I: 解析 Host 和 Path I->>S: 转发到目标 Service S->>P: 负载均衡到后端 Pod P->>I: 返回响应 I->>C: 返回结果