Ответ
В 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).
На практике выбор плагина зависит от требований к производительности, безопасности и интеграции с инфраструктурой.