Как организована работа с сетевыми ресурсами и доступом к ним в Kubernetes?

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

Ответ

В Kubernetes сетевая модель реализуется через CNI (Container Network Interface) плагины, которые обеспечивают связность подов и сервисов.

Основные концепции:

  • Pod Network: Каждому поду назначается уникальный IP-адрес из пула кластера, что позволяет общаться между подами напрямую без NAT.
  • Services: Абстракция для доступа к группе подов через стабильную точку входа. Основные типы:
    • ClusterIP — внутренний IP для доступа внутри кластера.
    • NodePort — открывает порт на каждой ноде для внешнего доступа.
    • LoadBalancer — создает внешний балансировщик нагрузки в облачном провайдере.
  • Ingress: Управляет внешним HTTP/HTTPS-трафиком, предоставляя маршрутизацию на основе хостов и путей. Для работы требуется контроллер Ingress (например, Nginx Ingress Controller).
  • Network Policies: Механизм брандмауэра на уровне подов для контроля входящего и исходящего трафика. Например, можно разрешить трафик только от подов с определенной меткой.

Пример NetworkPolicy, разрешающей доступ к фронтенду только с бэкенда:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-from-backend
spec:
  podSelector:
    matchLabels:
      app: frontend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: backend
    ports:
    - protocol: TCP
      port: 80

Популярные CNI-плагины:

  • Calico: Предлагает развитые Network Policies и поддержку BGP для маршрутизации.
  • Cilium: Использует eBPF для повышения производительности, безопасности и наблюдаемости сети.
  • Flannel: Простое решение для overlay-сетей (VXLAN, host-gw).

На практике выбор плагина зависит от требований к производительности, безопасности и интеграции с инфраструктурой.