Для чего нужен kube-proxy в Kubernetes?

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

Ответ

kube-proxy — это сетевой прокси-агент, работающий на каждом узле (Node) кластера Kubernetes. Его основная задача — обеспечить сетевую связность для сервисов (Service), реализуя абстракцию виртуального IP-адреса и балансировку нагрузки между подами.

Ключевые функции:

  1. Трансляция виртуального IP сервиса (ClusterIP): Когда приложение внутри кластера обращается к сервису по его имени или ClusterIP, kube-proxy перенаправляет этот запрос на один из реальных подов, соответствующих селектору сервиса.
  2. Балансировка нагрузки: Распределяет входящие соединения между подами сервиса (по умолчанию используется алгоритм round-robin).
  3. Реализация различных типов Service: Обеспечивает работу ClusterIP, NodePort и LoadBalancer, управляя правилами маршрутизации на узле.

Режимы работы:

  • iptables (режим по умолчанию): kube-proxy управляет правилами iptables в ядре Linux. Это эффективно и стабильно для большинства кластеров.
  • IPVS: Используется для высоконагруженных кластеров, обеспечивая лучшую производительность и больше алгоритмов балансировки (например, least-connection).

Пример: При создании сервиса my-service с типом ClusterIP, kube-proxy на всех узлах автоматически создаст правила, которые будут перенаправлять трафик на порт 9376 подов с лейблом app: my-app.

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: ClusterIP
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 9376

kube-proxy постоянно отслеживает изменения сервисов и подов через Kubernetes API и обновляет сетевые правила в реальном времени.