Kubernetes Ingress 全解析:从原理到最佳实践
一、Ingress 是什么?
Ingress 是 Kubernetes 中管理从集群外部访问内部服务的 HTTP/HTTPS 路由规则的 API 对象。
它本身并不是服务类型,而是一组流量转发规则,依赖于 Ingress Controller 来实现。
与其他服务暴露方式对比
|
方式 |
类型 |
功能 |
适用场景 |
|
ClusterIP |
内部访问 |
提供集群内虚拟 IP,仅限内部访问 |
微服务之间通信 |
|
NodePort |
基础外部访问 |
每个节点上暴露端口(30000-32767) |
开发/测试 |
|
LoadBalancer |
云负载均衡 |
直接分配公网 IP,单服务直连 |
云环境对外服务 |
|
Ingress |
HTTP/HTTPS 路由 |
定义规则,需 Ingress Controller 执行 |
统一入口网关,基于域名/路径路由多个服务 |
你可以把 Ingress 看作七层智能路由器或网站入口网关。
二、Ingress 与 Ingress Controller 的区别
- Ingress (规则对象)
定义“当访问某个域名+路径时,该请求应该转发到哪个 Service”。
它只是交通规则,不会自己转发流量。 - Ingress Controller (控制器)
监听 Ingress 资源变化,并动态配置实际的反向代理/负载均衡器(如 Nginx、Traefik、Envoy)。
它是交警+红绿灯,确保规则被执行。
常见 Ingress Controller
- Ingress-Nginx (社区版)
- Nginx Ingress Controller (官方 F5 版)
- Traefik
- HAProxy Ingress
- Istio Ingress Gateway
- 各云厂商提供的托管版(AWS ALB、GKE、AKS 等)
三、Ingress 基础示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
spec:
rules:
- host: my-app.com
http:
paths:
- path: /shop
pathType: Prefix
backend:
service:
name: shop-service
port:
number: 80
- path: /blog
pathType: Prefix
backend:
service:
name: blog-service
port:
number: 80
含义:
- 请求 my-app.com/shop → shop-service
- 请求 my-app.com/blog → blog-service
四、如何高效使用 Ingress?
1. 部署 Ingress Controller
以最流行的 ingress-nginx 为例:
kubectl apply -f
https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
2. 编写高效的 Ingress 规则
- 使用注解扩展功能
metadata:
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-connect-timeout: "30"
nginx.ingress.kubernetes.io/enable-cors: "true"
- 启用 TLS 证书
spec:
tls:
- hosts:
- my-app.com
secretName: my-app-tls-secret
推荐使用 cert-manager 自动申请 & 管理 Let’s Encrypt 证书。
3. 性能与可靠性
- Ingress Controller 优化
- 配置 CPU/内存 Requests & Limits
- 使用 HPA 自动扩缩容
- 节点亲和性/反亲和性,提升 HA
- 大规模流量可思考专用节点
- 后端服务优化
- 配置 Readiness Probe
- 使用 sessionAffinity: ClientIP 支持会话保持
4. 安全最佳实践
- 使用 NetworkPolicy 限制 Ingress Controller 的访问范围
- 默认拒绝策略,仅放行必要流量
- 集成 WAF (如 ModSecurity)
- 外部认证(如 OAuth2 Proxy)
5. 可观测性与日志
- 监控
- 开启 /metrics,用 Prometheus 采集
- 关键指标:QPS、延迟、5xx 错误率
- 日志
- 收集到 ELK 或 Loki
- 分析访问模式 & 异常流量
五、总结
高效使用 Ingress 的关键步骤:
- 选择合适的 Ingress Controller
- 为 Ingress Controller 配置资源限制、HPA 与高可用
- 声明式编写 Ingress 规则,合理利用注解
- 使用 cert-manager 自动化 TLS 管理
- 应用安全防护:NetworkPolicy、WAF、认证
- 建立可观测性体系:监控 + 日志
通过以上实践,Ingress 就能成为你 Kubernetes 集群对外流量的现代化网关入口。

© 版权声明
文章版权归作者所有,未经允许请勿转载。






收藏了,感谢分享