Skip to content
返回部署

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 以在退出前排空进行中的请求

常见问题解答