Home

Kubernetes 中 Service 和 Ingress 的深度解析

ServiceIngress 是 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: 80
tls:
- hosts:
  - "*.example.com"
  secretName: tls-wildcard-secret
Internet -> Ingress -> Service -> Pod
sequenceDiagram 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: 返回结果
Kubernetes 存储