Какой у вас опыт работы с балансировкой нагрузки в Kubernetes?

«Какой у вас опыт работы с балансировкой нагрузки в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Балансировка нагрузки в Kubernetes реализуется на нескольких уровнях, и мой опыт охватывает их все:

  • Service (L4-балансировка): Базовый механизм. ClusterIP — для внутреннего доступа между подами. NodePort — для тестирования или простого внешнего доступа. LoadBalancer — для автоматического создания внешнего балансировщика в облаке (в Yandex Cloud, AWS, GCP). Пример манифеста:
    apiVersion: v1
    kind: Service
    metadata:
    name: api-service
    spec:
    type: LoadBalancer
    selector:
    app: api-backend
    ports:
    - name: http
    port: 80
    targetPort: 8080
    protocol: TCP
    # Аннотации для облачного провайдера (пример для Yandex Cloud)
    # annotations:
    #   yandex.cloud/load-balancer-type: "external"
  • Ingress (L7-балансировка и маршрутизация): Для управления HTTP/HTTPS трафиком использовал Ingress-контроллеры, в основном NGINX Ingress Controller и Traefik. Они позволяют маршрутизировать запросы на разные сервисы на основе хоста, пути или заголовков, управлять TLS-терминацией и применять правила перезаписи URL.
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    name: main-ingress
    annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
    tls:
    - hosts:
    - api.example.com
    secretName: tls-secret
    rules:
    - host: api.example.com
    http:
      paths:
      - path: /v1
        pathType: Prefix
        backend:
          service:
            name: api-v1-service
            port:
              number: 80
  • Service Mesh (продвинутая L7-логика): Опыт работы с Istio для реализации сложных паттернов: canary-деплоев через управление трафиком (VirtualService, DestinationRule), отказоустойчивости (retries, timeouts, circuit breakers) и наблюдения за трафиком (distributed tracing с Jaeger).
  • Мониторинг и анализ трафика: Интеграция балансировщиков с Prometheus для сбора метрик (количество запросов, задержки, коды ответов). Настройка алертинга на рост ошибок 5xx или высокую задержку.
  • Выбор стратегии: Понимание разницы между алгоритмами балансировки (round-robin, least connections, IP hash) и их настройка через аннотации Ingress-контроллера или конфигурацию Service Mesh.

Таким образом, я подходил к балансировке комплексно: от базовых облачных LoadBalancer для простого входящего трафика до сложных Ingress-правил и Service Mesh для тонкого управления трафиком между микросервисами.