Ingress 控制器
为了让 Ingress 资源正常工作,Kubernetes 集群必须运行一个 Ingress 控制器。与作为 kube-controller-manager
组件一部分自动启动的其他控制器不同,Ingress 控制器需要单独部署。你可以根据集群的具体需求选择最合适的 Ingress 控制器实现。
官方支持的控制器
Kubernetes 社区官方维护和支持以下 Ingress 控制器:
- AWS Load Balancer Controller - 专为 AWS 环境设计
- GCE Ingress Controller - Google Cloud Platform 原生支持
- NGINX Ingress Controller - 基于 NGINX 的开源实现
第三方控制器
除了官方控制器,社区还提供了丰富的第三方 Ingress 控制器选择:
云服务商提供的控制器
- AKS 应用程序网关 Ingress 控制器 - Microsoft Azure 集成
- 阿里云 MSE Ingress - 阿里云微服务引擎
- OCI Native Ingress Controller - Oracle Cloud Infrastructure
企业级和商业控制器
- Citrix Ingress 控制器
- F5 BIG-IP Ingress 服务
- FortiADC Ingress 控制器
- NGINX Ingress 控制器 - NGINX 商业版
- Wallarm Ingress Controller - 集成 WAF 功能
开源社区控制器
- Apache APISIX Ingress 控制器 - 高性能 API 网关
- Traefik Kubernetes Ingress 提供程序 - 现代反向代理
- Contour - 基于 Envoy 的 Ingress 控制器
- Emissary-Ingress - 云原生 API 网关
- Istio Ingress - 服务网格集成
- Kong Ingress 控制器 - 云原生 API 网关
- HAProxy Ingress - 基于 HAProxy 的负载均衡器
新兴和专业化控制器
- Cilium Ingress 控制器 - 基于 eBPF 的网络解决方案
- Higress - 阿里云原生网关
- Kusk Gateway - OpenAPI 驱动的 API 网关
- ngrok Kubernetes Ingress 控制器 - 隧道和边缘连接
- Pomerium Ingress 控制器 - 零信任网络访问
多控制器管理
在复杂的生产环境中,你可能需要同时运行多个 Ingress 控制器来满足不同的业务需求。
使用 IngressClass 资源
通过 IngressClass 资源,可以在同一集群中部署和管理多个 Ingress 控制器:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx
spec:
controller: k8s.io/ingress-nginx
指定控制器类型
创建 Ingress 资源时,通过 ingressClassName
字段指定使用的控制器:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
默认控制器设置
如果未指定 ingressClassName
,Kubernetes 会自动应用默认的 IngressClass。通过为 IngressClass 资源添加 ingressclass.kubernetes.io/is-default-class: "true"
注解来设置默认控制器。
选择建议
选择 Ingress 控制器时,建议考虑以下因素:
- 云环境兼容性 - 选择与你的云平台深度集成的控制器
- 功能需求 - 考虑是否需要高级功能如 WAF、缓存、认证等
- 性能要求 - 评估控制器的性能表现和资源消耗
- 社区支持 - 选择活跃维护且文档完善的项目
- 运维复杂度 - 考虑部署、配置和维护的复杂性