这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 Ingress 提供 HTTP/HTTPS 路由,Gateway API 是更通用的新一代路由模型。两者都依赖具体控制器实现。
15.1 Ingress 架构
Client
-> LoadBalancer
-> Ingress Controller Pod
-> Service
-> Pods
Ingress 本身只是规则,控制器负责真正执行。
15.2 Ingress 示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: shop-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
ingressClassName: nginx
tls:
- hosts:
- shop.example.com
secretName: shop-tls
rules:
- host: shop.example.com
http:
paths:
- path: /api/orders
pathType: Prefix
backend:
service:
name: order-service
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 80
15.3 Gateway API
Gateway API 将角色拆分为 GatewayClass、Gateway、HTTPRoute 等对象,提供更强的扩展性和权限边界:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: order-route
spec:
parentRefs:
- name: shop-gateway
hostnames:
- shop.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /api/orders
backendRefs:
- name: order-service
port: 80
15.4 控制器选择
| 场景 | 方案 |
|---|---|
| HTTP 路由 | NGINX Ingress、Gateway API |
| API 管理 | APISIX、Kong 等 |
| 服务网格网关 | Istio Gateway |
| TCP/UDP | LoadBalancer 或专用控制器 |
15.5 常见排查
kubectl get ingress
kubectl describe ingress shop-ingress
kubectl get gateway,httproute -A
| 问题 | 排查 |
|---|---|
| 404 | host/path/backend 匹配 |
| 502 | 后端 Service 或应用 |
| 证书错误 | TLS Secret |
| 不生效 | controller、class |
| 延迟高 | controller 资源 |
本章小结
Ingress 和 Gateway API 管理南北向 HTTP 流量。路由规则只是声明,控制器实现、TLS、后端健康和资源容量决定最终效果。
思考题
- Ingress 和 Ingress Controller 的关系是什么?
- pathType 有什么影响?
- Gateway API 相比 Ingress 有哪些改进?
- 502 如何排查?
- TLS Secret 应如何管理?