Какие компоненты и ресурсы Kubernetes, кроме Ingress, отвечают за сетевое взаимодействие?

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

Ответ

Ingress — это лишь один уровень абстракции для управления входящим HTTP/HTTPS трафиком. Вся сетевая модель Kubernetes строится на других фундаментальных компонентах:

  1. Service — базовая абстракция для доступа к набору подов.

    • ClusterIP (по умолчанию): внутренний IP сервиса внутри кластера. Используется для связи между микросервисами.
      apiVersion: v1
      kind: Service
      metadata:
      name: backend-service
      spec:
      selector:
      app: backend
      ports:
      - port: 80          # Порт сервиса
        targetPort: 8080  # Порт пода
      type: ClusterIP
    • NodePort: открывает статический порт на каждом узле кластера. Использую для дебага или когда нет LoadBalancer.
    • LoadBalancer: интегрируется с облачным провайдером (AWS ELB, GCP LB) для создания внешнего балансировщика нагрузки.
  2. CNI (Container Network Interface) Plugin — реализует саму сетевую связность между подами и узлами. Выбор плагина (Calico, Cilium, Flannel) определяет возможности сети, производительность и политики.

    • Calico/Cilium: часто используются для NetworkPolicy.
    • Flannel: простой overlay-сеть "из коробки".
  3. NetworkPolicy — "брандмауэр" на уровне пода. Позволяет изолировать трафик между микросервисами.

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-frontend-to-backend
    spec:
      podSelector:
        matchLabels:
          app: backend
      ingress:
      - from:
        - podSelector:
            matchLabels:
              app: frontend
        ports:
        - protocol: TCP
          port: 8080
  4. CoreDNS — встроенный DNS-сервер кластера. Сервисы доступны по имени <service-name>.<namespace>.svc.cluster.local. Это основа для service discovery.

  5. kube-proxy — работает на каждом узле, отвечает за маршрутизацию трафика к сервисам (режимы: iptables, ipvs).

В моей работе настройка сети — это выбор CNI, определение Services для доступа, применение NetworkPolicies для безопасности и настройка Ingress-контроллера (Nginx, Traefik) для внешнего трафика.