Menu

Ingress 控制器是 Kubernetes 网络流量管理的关键组件,决定了外部请求如何安全、高效地路由到集群内部服务,是实现弹性和可扩展网络架构的基础。

在 Kubernetes 集群中,若希望 Ingress 资源能够正常工作,必须部署至少一个 Ingress 控制器。与作为 kube-controller-manager 组件自动启动的其他控制器不同,Ingress 控制器需要用户根据实际需求单独部署和管理。选择合适的 Ingress 控制器对于集群的网络能力和安全性至关重要。

官方支持的控制器

Kubernetes 社区官方维护和支持多种 Ingress 控制器,适用于不同的云平台和场景。下表总结了主流官方控制器及其适用环境。

Kubernetes 官方支持的 Ingress 控制器

控制器名称 适用平台/说明
AWS Load Balancer Controller 专为 AWS 环境设计
GCE Ingress Controller Google Cloud 原生支持
NGINX Ingress Controller 基于 NGINX 的开源实现

第三方控制器

除了官方控制器,社区还提供了丰富的第三方 Ingress 控制器选择,满足不同云环境、企业级和开源需求。

第三方 Ingress 控制器

类别 控制器名称 说明/适用场景 链接
云服务商 AKS 应用程序网关 Ingress 控制器 Microsoft Azure 集成 文档
阿里云 MSE Ingress 阿里云微服务引擎 文档
OCI Native Ingress Controller Oracle Cloud Infrastructure GitHub
企业级/商业 Citrix Ingress 控制器 企业级负载均衡与安全 GitHub
F5 BIG-IP Ingress 服务 高级流量管理与安全 文档
FortiADC Ingress 控制器 集成 Fortinet 安全能力 文档
NGINX Ingress 控制器(商业版) NGINX Plus 增强功能 官网
Wallarm Ingress Controller 集成 WAF,API 安全 官网
开源社区 Apache APISIX Ingress 控制器 高性能 API 网关 GitHub
Traefik Kubernetes Ingress 提供程序 现代反向代理 文档
Contour 基于 Envoy 的 Ingress 控制器 官网
Emissary-Ingress 云原生 API 网关 官网
Istio Ingress 服务网格集成 文档
Kong Ingress 控制器 云原生 API 网关 GitHub
HAProxy Ingress 基于 HAProxy 的负载均衡器 官网
新兴/专业化 Cilium Ingress 控制器 基于 eBPF 的网络方案 文档
Higress 阿里云原生网关 GitHub
Kusk Gateway OpenAPI 驱动的 API 网关 官网
ngrok Kubernetes Ingress 控制器 隧道与边缘连接 GitHub
Pomerium Ingress 控制器 零信任网络访问 文档

多控制器管理

在复杂的生产环境中,往往需要同时运行多个 Ingress 控制器,以满足不同业务或团队的需求。Kubernetes 提供了灵活的机制来实现多控制器共存和精细化流量管理。

使用 IngressClass 资源

通过 IngressClass 资源,可以在同一集群中部署和管理多个 Ingress 控制器。以下 YAML 示例展示了如何定义一个名为 nginx 的 IngressClass:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: nginx
spec:
  controller: k8s.io/ingress-nginx

指定控制器类型

创建 Ingress 资源时,可以通过 ingressClassName 字段明确指定所用控制器类型。以下 YAML 示例演示了如何将 Ingress 资源绑定到特定控制器:

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

默认控制器设置

如果未在 Ingress 资源中指定 ingressClassName,Kubernetes 会自动应用默认的 IngressClass。可以通过为 IngressClass 资源添加如下注解来设置默认控制器:

metadata:
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"

选择建议

选择合适的 Ingress 控制器时,建议综合考虑以下因素,以确保网络架构的稳定性和可扩展性。

Ingress 控制器选择建议

考虑因素 说明
云环境兼容性 优先选择与云平台深度集成的控制器
功能需求 是否需要 WAF、缓存、认证等高级功能
性能要求 控制器的性能表现和资源消耗
社区支持 项目活跃度和文档完善性
运维复杂度 部署、配置和维护的易用性

总结

Ingress 控制器是 Kubernetes 网络流量管理的核心,直接影响集群的可扩展性、安全性和高可用性。合理选择和配置 Ingress 控制器,结合 IngressClass 等机制实现多控制器协同,是构建现代云原生网络架构的关键。建议根据实际业务需求、云平台特性和团队运维能力,选择最适合的 Ingress 控制器方案,并持续关注社区动态和最佳实践。

参考文献


Menu