Какой у вас опыт с сетевыми плагинами (CNI) в Kubernetes?

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

Ответ

Я настраивал и сопровождал кластеры Kubernetes с разными CNI (Container Network Interface) плагинами, выбирая их под требования проекта.

Опыт с конкретными плагинами:

  • Calico: Использовал в продакшене для реализации сетевых политик (NetworkPolicy). Настраивал IP пулы, включал режим IP-in-IP для маршрутизации между нодами.
    apiVersion: projectcalico.org/v3
    kind: NetworkPolicy
    metadata:
      name: allow-frontend-to-backend
    spec:
      selector: app == 'backend'
      ingress:
      - from:
        - selector: app == 'frontend'
        ports:
        - protocol: TCP
          port: 8080
  • Cilium: Внедрял в новых кластерах для использования eBPF. Это дало значительный прирост производительности сетевого стека и более детализированные возможности наблюдения и безопасности (например, политики на уровне HTTP).
  • Flannel/Weave Net: Использовал для быстрого развертывания внутренних или тестовых кластеров из-за их простоты.
  • AWS VPC CNI: Интегрировал с EKS, чтобы поды получали IP-адреса напрямую из VPC, что упрощало сетевую безопасность и диагностику.

Ключевые задачи:

  1. Диагностика: Устранение проблем с сетевой связностью между подами и нодами с помощью kubectl get pods -o wide, calicoctl, cilium status, tcpdump в пространстве имен пода.
  2. Безопасность: Проектирование и применение NetworkPolicy для изоляции микросервисов (например, запрет прямого доступа к БД из интернета).
  3. Интеграция: Настройка плагинов с Ingress-контроллерами (например, Nginx Ingress) и Service Mesh (Istio).