# ✅ **Маршрутизация сервисов в Kubernetes включает три основных компонента:** ## 1️⃣ **Сервисы (Services)** Сервис — это внутренний виртуальный «маршрутизатор», который обеспечивает **стабильный IP и имя** для набора Pod'ов. Он делает следующее: - распределяет трафик между Pod’ами (Load Balancing) - скрывает реальное количество Pod'ов - обеспечивает стабильную точку доступа внутри кластера **Пример:** Приложение обращается к `my-service`, и сервис автоматически направляет трафик в один из Pod’ов. --- ## 2️⃣ **Ingress (Ingress Controller + Ingress Rules)** Ingress отвечает за **входящий трафик из внешнего мира (интернет → кластер)**. Ingress даёт возможность: - маршрутизировать запросы по URL / доменным именам - делать HTTPS/TLS - настраивать правила маршрутизации - управлять доступом снаружи **Пример:** `https://example.com/api` → отправляется в backend-сервис `https://example.com/app` → отправляется в frontend --- ## 3️⃣ **Service Mesh (mesh-сеть)** Mesh-сеть — это **умный уровень маршрутизации** между сервисами внутри кластера. Она добавляет: - продвинутый контроль трафика (retries, timeouts, mirroring, canary) - безопасность (mTLS) - мониторинг и трассировку - политики взаимодействия между сервисами Mesh не заменяет Service или Ingress — он работает **над ними**. **Пример популярных mesh-сетей:** Istio, Linkerd, Consul. --- # 🟩 Итоговое очень короткое объяснение (для менеджера): - **Service** — внутренняя маршрутизация между Pod’ами. - **Ingress** — входящий трафик из интернета в сервисы. - **Service Mesh** — интеллектуальная маршрутизация и наблюдаемость внутри кластера. --- Ниже — **простая и понятная сравнительная таблица** по четырём ключевым понятиям Kubernetes-сетей: - **Service** - **Ingress** - **Service Mesh** - **CNI (Calico/Flannel/Cilium и др.)** А затем — **чёткое объяснение разницы между ними**. --- # 🟦 **Сравнительная таблица: Service vs Ingress vs Mesh vs CNI** |Компонент|Для чего нужен|Где работает|Какие задачи решает|Что _не_ делает| |---|---|---|---|---| |**CNI (Calico, Flannel, Cilium)**|Создаёт базовую сеть между Pod’ами|Низкий уровень (node → pod)|• Выдаёт IP Pod’ам • Настраивает маршруты • Обеспечивает Pod-to-Pod связь|❌ Не маршрутизирует HTTP/HTTPS ❌ Не делает балансировку сервисов ❌ Не управляет внешним трафиком| |**Service**|Внутренний балансировщик для Pod’ов|Внутри кластера|• Даёт стабильный IP/имя • Распределяет нагрузку между Pod'ами • Скрывает Pod’ы за одним адресом|❌ Не пускает внешний трафик ❌ Не управляет URL’ами ❌ Не даёт шифрование| |**Ingress**|Проводит внешний трафик в кластер|На границе «интернет → кластер»|• Маршрутизация по доменам/путям • HTTPS/TLS • Лимиты, правила доступа|❌ Не маршрутизирует внутренние сервисы ❌ Не контролирует Pod-to-Pod коммуникацию| |**Service Mesh (Istio, Linkerd)**|Управляет коммуникацией между сервисами|Внутри кластера (между сервисами)|• Smart routing: retries, timeout, canary • mTLS безопасность • Наблюдаемость (tracing, metrics)|❌ Не создаёт сеть (нет IP) ❌ Не управляет внешним трафиком (это делает Ingress)| --- # 🟩 **Главное отличие CNI от остальных (коротко)** ### 🟥 **CNI = создаёт сеть** CNI отвечает только за одно: **Pod получает IP, и Pod может общаться с другими Pod’ами.** Без CNI Kubernetes вообще не может запускать рабочие Pod’ы. CNI работает на уровне **IP / маршруты / интерфейсы**. --- ## 🟦 **Service = балансирует трафик между Pod’ами** Service работает **поверх** CNI. Он не создаёт сеть — он использует сеть, которую построил CNI, и добавляет: - стабильный виртуальный IP - распределение нагрузки --- ## 🟧 **Ingress = доступ из внешнего мира** Ingress — это «входная дверь» в кластер. Он решает задачи уровня: - HTTP/HTTPS маршрутизация по доменам - сертификаты - внешние клиенты → сервисы Ingress не работает с IP Pod’ов напрямую — он использует Service. --- ## 🟪 **Service Mesh = интеллектуальная маршрутизация внутри кластера** Mesh — это «умный слой» над Service. Он добавляет: - защиту mTLS между сервисами - ретраи, таймауты, канареечные релизы - метрики, трассировку Но **Mesh не создаёт сеть — он работает _на уже созданной CNI сети_.** --- # 🟧 **Визуально, кому за что отвечает** (очень просто) ``` [ Интернет ] | v Ingress <-- внешняя маршрутизация | v Service <-- внутренняя балансировка | v [ Mesh ] <-- контроль, наблюдаемость, безопасность | v Pod <--> Pod <-- Сеть создаётся CNI (Calico/Flannel) ``` --- # 🟦 **Очень короткое резюме (для менеджера)** |Компонент|Роль| |---|---| |**CNI**|Создаёт сеть для Pod’ов, даёт IP и маршрутизацию| |**Service**|Доступ к группе Pod’ов внутри кластера| |**Ingress**|Внешний доступ в кластер по HTTP/HTTPS| |**Service Mesh**|Улучшенная маршрутизация, безопасность и наблюдаемость между сервисами| --- Ниже — **инженерное, более глубокое техническое объяснение** разницы между: - **CNI** - **Service** - **Ingress** - **Service Mesh** …привязанное к **уровням модели OSI** (1–7), чтобы точно понимать, где и в каком слое работает каждая технология. --- # 🟥 **1. CNI — это уровни OSI 2–3 (L2/L3): канальный и сетевой уровни** CNI (Calico, Flannel, Cilium, Weave) работает на **самом низком уровне сетевой архитектуры Kubernetes**. ### 🔹 Основные слои OSI: - **L2 — Data Link** veth-пары, мосты (bridge), VXLAN, WireGuard, MAC-адреса - **L3 — Network** маршруты, таблицы маршрутизации, IP-адреса Pod’ов, BGP (Calico, Cilium) ### 🔹 Что делает CNI: - создаёт сетевые интерфейсы для Pod’ов - назначает Pod’ам IP - строит межнодовую маршрутизацию - управляет encapsulation (VXLAN, Geneve, wireguard, BGP, eBPF dataplane) - обновляет iptables/nftables/eBPF таблицы для Pod-to-Pod communication ### 🔹 Что CNI точно НЕ делает: - не балансирует HTTP/HTTPS - не работает с доменными именами - не делает перезапросы, канареечные релизы, TLS - не управляет трафиком уровня приложений 📌 **CNI — это фундамент. Без него не работает вообще никакая сеть в Kubernetes.** --- # 🟦 **2. Service — это уровень OSI 3–4 (L3/L4): IP + TCP/UDP Load Balancing** Service — это абстракция L3/L4, которая использует маршрутизацию и IP, созданные CNI. ### 🔹 Уровни OSI: - **L3 — Network**: виртуальный ClusterIP - **L4 — Transport**: TCP/UDP балансировка трафика между Pod’ами kube-proxy реализует Service через: - iptables NAT - или nftables - или eBPF (в Cilium) ### 🔹 Что делает Service: - создаёт стабильный виртуальный IP `<ClusterIP>` - настраивает L4 load balancing (RR, masquerade, DNAT) - маршрутизирует запросы в выбранный набор Pod’ов (EndPoints / EndPointSlices) ### 🔹 Чего Service НЕ делает: - не работает на L7 (HTTP routing, path routing) - не видит доменных имён - не делает TLS - не маршрутизирует внешний трафик (это делает Ingress) 📌 **Service = L3/L4 виртуальный балансировщик поверх CNI.** --- # 🟧 **3. Ingress — уровень OSI 7 (L7): HTTP/HTTPS маршрутизация** Ingress работает уже не на «сети», а на **уровне приложения**. Уровни OSI: - **L7 — Application (HTTP/HTTPS, gRPC)** Примеры Ingress-контроллеров: - Traefik - NGINX Ingress Controller - HAProxy - Envoy (в некоторых mesh) - Istio IngressGateway ### 🔹 Что делает Ingress: - маршрутизация по URL-путям (`/api`, `/app`) - маршрутизация по доменам (`api.example.com`) - TLS/HTTPS termination - rate-limits - redirects - WAF, авторизация, аутентификация То есть Ingress — это Kubernetes-эквивалент **reverse proxy / L7 load balancer**. ### 🔹 Чего Ingress НЕ делает: - не создаёт сеть - не выдаёт IP Pod’ам - не занимается межнодовой маршрутизацией - не контролирует Pod-to-Pod трафик 📌 **Ingress = L7 reverse proxy в мире Kubernetes.** --- # 🟪 **4. Service Mesh — уровни OSI 5–7 (L5/L6/L7): session, encryption, application routing** Service Mesh (Istio, Linkerd, Consul Mesh, Kuma) работает _выше_ Ingress — на уровне взаимодействия сервисов внутри кластера. ### 🔹 Уровни OSI: - **L5 — Session**: управление сессиями между сервисами - **L6 — Presentation**: mTLS, сертификаты, шифрование - **L7 — Application**: retries, timeout, canary, traffic shadowing Каждый Pod получает sidecar-proxy (обычно Envoy), который перехватывает весь трафик. ### 🔹 Что делает Mesh: - шифрует трафик между сервисами (mTLS) - делает умную маршрутизацию (canary, A/B testing, shadow traffic) - перезапросы (retries), таймауты, circuit breaking - полная наблюдаемость (metrics, tracing, logging) - политики общения сервисов (RBAC, L7 access control) ### 🔹 Чего Mesh НЕ делает: - не создаёт сеть - не маршрутизирует внешний трафик (кроме Istio Gateway) - не управляет IP-адресами - не заменяет CNI 📌 **Mesh = интеллектуальный L5–L7 уровень поверх Service и CNI.** --- # 🟧 **Итоговое инженерное резюме** |Компонент|Основной OSI уровень|Инженерная роль| |---|---|---| |**CNI**|L2–L3|Создаёт реальную сеть: IP, маршруты, vxlan/bgp/eBPF| |**Service**|L3–L4|Виртуальный балансировщик TCP/UDP внутри кластера| |**Ingress**|L7|HTTP/HTTPS reverse proxy + TLS| |**Service Mesh**|L5–L7|Интеллектуальная маршрутизация, безопасность, наблюдаемость| --- Вот **инженерное, но образное сравнение Kubernetes-сетей** с **машиной и дорожной инфраструктурой**. Очень хорошо подходит для объяснения менеджерам и техническим специалистам одновременно. --- # 🚗 **1. CNI = дороги, светофоры и базовая инфраструктура** **CNI (Calico, Flannel, Cilium)** — это как **строительство дорог**, разметка, знаки, светофоры, мосты и туннели. ### CNI = дорожная сеть: - создаёт дороги (сетевые интерфейсы, маршруты) - рисует разметку (iptables/eBPF правила) - соединяет города (узлы Kubernetes) - обеспечивает, что любая машина (Pod) может доехать к другой 📌 **Без CNI дорог нет → машины никуда не поедут.** --- # 🚘 **2. Pod = автомобиль** Pod — это **машина**, у которой: - есть номер (IP-адрес) - есть водитель (приложение) - есть маршрутное пространство (network namespace) Машина сама по себе **не умеет** выбирать маршруты, ей нужны: - дороги (CNI) - перекрёстки и объезды (Service) - указатели и навигация (Ingress) - системы умной логистики (Mesh) --- # 🅿️ **3. Service = перекрёсток или развязка (Load Balancer)** Kubernetes Service работает как **большая транспортная развязка**: - принимает машины на въезде - отправляет их на свободную полосу - распределяет нагрузку (traffic load balancing) - скрывает, сколько дорог уходит дальше 📌 **Service не строит дороги — он только направляет поток машин по существующим дорогам (созданным CNI).** --- # 🛣 **4. Ingress = дорожные знаки и ворота в город** Ingress — это **въезд в город с автомагистрали**, где стоят: - указатели направлений - шлагбаум/ворота - разделение потоков по направлениям (URL routing) - контрольный пункт (TLS termination) Например: ``` example.com/app → въезд на одну улицу example.com/api → въезд на другую ``` 📌 **Ingress управляет входом в город, но не дорогами внутри города — это делает Service+CNI.** --- # 🛰 **5. Service Mesh = система умной навигации (Waze, Google Maps)** Service Mesh — это как **умная логистика и навигация**, которая: - учитывает пробки - предлагает объезд - проверяет движение в реальном времени - шифрует общение между машинами (mTLS = защищённый канал) - делает аварийное перенаправление (circuit breaker) - повторные попытки поездки (retries) - тестирование новых маршрутов (canary releases) 📌 **Mesh не строит новые дороги, а делает поездки умными, надёжными и безопасными.** --- # 🧭 **Большая метафора — вся сеть Kubernetes как город** ``` 🛣 Ingress (ворота в город) ↓ 🅿️ Service (развязки) ↓ 🚗 Pod ↔ Pod по дорогам (CNI) ↓ 🛰 Mesh = умная логистика и безопасность ``` --- # 🟩 **Очень короткое сравнение** |Kubernetes компонент|Аналог в мире автомобилей| |---|---| |**CNI**|Строительство дорог, мостов и туннелей| |**Pod**|Машина| |**Service**|Перекрёстки, развязки, распределение потоков| |**Ingress**|Дорожные знаки, шлагбаум, въезд в город| |**Service Mesh**|Система навигации, умная логистика, мониторинг| --- # 🟦 **Одно предложение для менеджера** > **CNI строит дороги; Service направляет трафик; Ingress впускает машины в город; Mesh делает маршруты умными.** ---