Ответ
Работал с несколькими популярными Ingress-контроллерами, выбирая их под задачи проекта:
1. NGINX Ingress Controller (kubernetes-ingress-nginx):
- Сценарии: Стандартный выбор для большинства проектов, работающих на bare-metal или любом облаке. Использовал для сложной маршрутизации, canary-релизов (через аннотации
nginx.ingress.kubernetes.io/canary) и терминации TLS. - Пример конфигурации для canary:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myapp-canary annotations: nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-weight: "10" spec: ingressClassName: nginx rules: - host: app.example.com http: paths: - path: / pathType: Prefix backend: service: name: myapp-new port: number: 80
2. AWS Load Balancer Controller (ранее ALB Ingress Controller):
- Сценарии: Проекты, глубоко интегрированные в AWS. Позволяет создавать Application Load Balancer (ALB) напрямую из манифестов Kubernetes. Использовал для упрощения инфраструктуры (ALB создаётся автоматически) и использования native AWS features (WAF, Shield).
3. Traefik Proxy:
- Сценарии: Динамические среды, где сервисы часто добавляются/удаляются. Особенно удобен в связке с Let's Encrypt для автоматического получения и обновления TLS-сертификатов через CRD (
IngressRoute).
Критерии выбора: Интеграция с облачным провайдером (для использования native LB), потребность в специфических функциях (gRPC, WebSocket) и сложность правил маршрутизации.