HOME

Kubernetes 中 Service 和 Ingress 的深度解析

文章目录2 节

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 存储