Ingress 控制器

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

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

官方支持的控制器

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

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

第三方控制器

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

类别控制器名称说明/适用场景链接
云服务商AKS 应用程序网关 Ingress 控制器Microsoft Azure 集成文档
阿里云 MSE Ingress阿里云微服务引擎文档
OCI Native Ingress ControllerOracle Cloud InfrastructureGitHub
企业级/商业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 GatewayOpenAPI 驱动的 API 网关官网
ngrok Kubernetes Ingress 控制器隧道与边缘连接GitHub
Pomerium Ingress 控制器零信任网络访问文档
表 2: 第三方 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 控制器时,建议综合考虑以下因素,以确保网络架构的稳定性和可扩展性。

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

总结

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

参考文献

文章导航

章节内容

这是章节的内容页面。

章节概览

评论区