Service 解决的是“集群内怎么找到一组 Pod”。
那外部用户从浏览器里访问 app.example.com 怎么进来?
这就是 Ingress 干的事。
你可以把它想成:
整支舰队对外开放的星港关口,按域名、路径,把来船分流到不同 Service。
Internet
│
▼
Ingress
├── app.example.com/ -> city-web-svc:80
└── api.example.com/ -> city-api-svc:8080一个最简单的 Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: city-ingress
spec:
ingressClassName: nginx
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: city-web-svc
port:
number: 80如果要 TLS:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: city-ingress
spec:
ingressClassName: nginx
tls:
- hosts:
- app.example.com
secretName: app-example-com-tls
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: city-web-svc
port:
number: 80这里最容易犯的错是:
“我已经创建 Ingress 了,为什么没生效?”
因为 Ingress 资源本身不会自动工作,你必须有 Ingress Controller。
只建对象,不装控制器,等于只贴了关口图纸,没修闸机。
再补一个 2026-03-28 时点的重要事实:
- 官方仍保留 Ingress
- 但官方已经明确推荐新能力优先看 Gateway API
- Ingress API 处于冻结状态,不再继续扩展新特性
所以今天的实务建议是:
- 学会 Ingress,因为大量存量集群都在用
- 新建设计要知道 Gateway API 才是未来路线