Kubernetes 中 Service 和 Ingress 的深度解析
文章目录2 节
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: 返回结果