👩💻
Основы сетевого взаимодействия Pod'ов
—
Основы Pod Networking🔹
Уникальный IP для каждого Pod: Каждый Pod получает уникальный IP-адрес, действующий во всем кластере.
🔹
Общая сеть для контейнеров Pod: Контейнеры внутри одного Pod'а делят одно сетевое пространство (например, виртуальная "сетевая комната"). Они общаются через localhost и используют общий IP и порты.
— Взаимодействие внутри кластера
🔹
Прямой трафик между Pod'ами:1. Pod'ы могут общаться напрямую, даже если они находятся на разных узлах. Для этого не нужны прокси или NAT.
2.
Исключение: Pod'ы на Windows, использующие host-сеть, не поддерживают это правило.
🔹
Node-агенты могут взаимодействовать с Pod'ами: Такие инструменты, как
kubelet (агент узла), могут общаться со всеми Pod'ами на своем узле.
—
Сервисы: стабильный доступ к Pod'ам🔹
API Service: Предоставляет стабильный IP/имя хоста для группы Pod'ов (например, backend-серверов).
Пример: Frontend веб-приложения может подключаться к backend-сервису, не беспокоясь об изменении IP-адресов отдельных Pod'ов.
🔹
EndpointSlices: Kubernetes автоматически обновляет их для отслеживания активных Pod'ов, обслуживающих сервис.
—
Маршрутизация трафика и прокси🔹
Service Proxy: Направляет трафик к нужным Pod'ам.
—
По умолчанию: kube-proxy (встроенный прокси Kubernetes).
—
Альтернативы: Некоторые сетевые плагины заменяют
kube-proxy своими прокси (например, Cilium).
—
Внешний доступ к сервисам🔹
Gateway API/Ingress:1.
Ingress: Устаревший способ предоставления внешнего доступа к сервисам (например, через HTTP-маршруты).
2.
Gateway API: Современный и гибкий метод управления внешним трафиком (поддерживает сложную маршрутизацию и многокомандные настройки).
🔹
Тип LoadBalancer: Самый простой способ предоставить внешний доступ к сервису (работает с облачными провайдерами, такими как AWS или GCP).
—
Сетевая безопасность (NetworkPolicy)🔹
Контроль трафика: Определяет правила, например: "Только Pod'ы frontend могут взаимодействовать с Pod'ом базы данных."
🔹
Не всегда поддерживается: Зависит от сетевого плагина (например, Calico поддерживает NetworkPolicy, а простые плагины могут не поддерживать).
—
Без ручной настройки сети🔹
Автоматическое подключение: В отличие от старых систем (например, Docker links), Kubernetes автоматически управляет сетями.
🔹
Pod'ы как виртуальные машины: Подходите к Pod'ам как к отдельным серверам — не нужно вручную сопоставлять порты или управлять подключениями.
—
Как Kubernetes реализует сети🔹
Kubernetes задает правила: Указывает, что должно быть сделано (например, Pod'ы должны общаться напрямую).
🔹
Внешние инструменты выполняют работу:1.
Container Runtime Interface (CRI): Настраивает сетевые пространства Pod'ов (общие для контейнеров внутри Pod'а).
2.
CNI-плагины: Управляют реальной сетью Pod'ов (например, Calico, Flannel).
3.
Сервисные прокси: Обрабатывают маршрутизацию трафика (например, kube-proxy или прокси плагинов).
—
Ключевые моменты для понимания🔹
Сеть Pod'ов vs. Host-сеть:1.
Сеть Pod'ов: Режим по умолчанию (Pod'ы получают уникальные IP).
2.
Host-сеть: Pod'ы используют IP узла (редко используется, например, для инструментов мониторинга сети).
🔹
Устаревшие vs. современные инструменты:1. Ранее требовалась ручная привязка портов (например, docker run -p 80:80).
2. Kubernetes автоматизирует этот процесс — ручная работа не требуется.
🔹
Примеры Gateway API:1. Облачные: AWS Gateway API Controller, Google Cloud Gateway.
2. Универсальные: Istio, NGINX Gateway.
👉
DevOps Portal