Kubernetes Ingress
HTTP 路由到服务,TLS、基于主机和路径路由。
容器高级
为什么
Ingress 经一负载均衡器暴露多服务,主机/路径路由和 TLS。Ingress 控制器(nginx、traefik、istio)处理实际路由。
Docker is used by 59% of professional developers per the Stack Overflow 2024 survey,Kubernetes 在生产中运行 60% 的容器化工作负载(CNCF 2024 调查)。容器编排通过声明式滚动发布将部署相关事故减少 35%。
何时使用
K8s 中 HTTP 服务用 Ingress。TCP/UDP 避免 — 用 LoadBalancer 服务。
如何做
1. 控制器 — 安装 nginx-ingress 或 traefik
2. Ingress — 定义 host + path 规则
3. TLS — cert-manager 自动 Let's Encrypt
4. 主机 — 按 Host 头路由
5. 路径 — 按 URL 路径路由
6. 注解 — rewrite、redirect、cors
7. 默认 — 未匹配的默认后端
示例
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp
annotations:
cert-manager.io/cluster-issuer: letsencrypt
spec:
tls:
- hosts: [api.example.com, app.example.com]
secretName: myapp-tls
rules:
- host: api.example.com
http: { paths: [{ path: /, pathType: Prefix, backend: { service: { name: api, port: { number: 80 } } } }] }
- host: app.example.com
http: { paths: [{ path: /, pathType: Prefix, backend: { service: { name: web, port: { number: 80 } } } }] }
# 安装控制器
helm install nginx-ingress nginx-ingress/nginx-ingress
kubectl apply -f ingress.yaml
常见问题
- ⚠无 ingress 控制器 — Ingress 资源存在但无路由,先装控制器
- ⚠TLS 不工作 — cert-manager 未装或 issuer 未配
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓TLS 用 cert-manager — 自动 Let's Encrypt,无手动证书
- ✓/api 和 / 用路径路由 — 一主机多服务
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求