# ✅ **Маршрутизация сервисов в 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 делает маршруты умными.**
---