— Основы 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
