Модуль 5.2: Мережа EKS (VPC CNI)
Складність: [COMPLEX] | Час на виконання: 3.5 год | Передумови: Модуль 5.1 (Архітектура та Control Plane EKS)
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»У березні 2023 року велика європейська e-commerce платформа з 800 подами на 40 вузлах EKS “вперлася в стіну” під час весняного розпродажу. О 09:12 Kubernetes перестав запускати нові поди. Помилка не стосувалася CPU чи пам’яті. Це було FailedCreatePodSandBox: failed to setup network for sandbox: no available IP addresses. У підмережах VPC закінчилися IP-адреси. Плагін VPC CNI призначає кожному поду реальну IP-адресу з вашої мережі. Оскільки кожен вузол m5.xlarge споживав до 58 адрес, підмережі розміром /24 були математично вичерпані. Платформа не могла масштабуватися в самий пік покупок. Компанія втратила близько 2.3 мільйона євро доходу за півтори години, поки інженери панічно додавали нові CIDR-блоки.
Це найпоширеніший збій у продакшн-середовищах EKS. На відміну від більшості дистрибутивів Kubernetes, що використовують віртуальні мережі (overlay), EKS працює нативно в мережі AWS. Це дає суперсилу (швидкість, Security Groups на поди), але й створює пастку: адреси можуть закінчитися в найгірший момент.
У цьому модулі ви опануєте механіку VPC CNI, навчитеся використовувати Prefix Delegation, що збільшує ємність IP у 16 разів, розберетеся з Custom Networking для порятунку від дефіциту адрес, налаштуєте AWS Load Balancer Controller для входу трафіку через ALB та NLB, а також дізнаєтеся про особливості IPv6 в EKS.
Як поди отримують IP-адреси (VPC CNI)
Розділ «Як поди отримують IP-адреси (VPC CNI)»Плагін Amazon VPC CNI (aws-node) є стандартним рішенням для EKS. Він призначає кожному поду IP-адресу безпосередньо з вашої підмережі VPC. Це дозволяє подам спілкуватися з базами RDS або S3 без жодних посередників.
Режим Secondary IP (Дефолт)
Розділ «Режим Secondary IP (Дефолт)»Кожен сервер (Node) має мережеві інтерфейси (ENI). На кожному ENI резервується кілька адрес. Кількість подів на сервері обмежена формулою:
Max Pods = (Кількість ENI * (IP на ENI - 1)) + 2.
Для m5.xlarge це лише 58 подів.
Режим Prefix Delegation (Рекомендовано)
Розділ «Режим Prefix Delegation (Рекомендовано)»Замість однієї адреси на слот, AWS виділяє цілий блок (префікс /28, що містить 16 адрес). Це збільшує кількість доступних IP у 16 разів. Навіть невеликий сервер тепер може запускати до 110 подів (ліміт EKS), не вичерпуючи всі вільні слоти ENI.
Вирішення проблеми дефіциту IP
Розділ «Вирішення проблеми дефіциту IP»Якщо ваші підмережі вже повні, у вас є два шляхи:
- Вторинні CIDR: Додати до VPC новий діапазон адрес (напр.
100.64.0.0/10), які не перетинаються з вашою основною мережею. - Custom Networking: Наказати Kubernetes тримати сервери в одній підмережі, а поди запускати в іншій, набагато більшій. Це дозволяє мати тисячі подів, не займаючи жодної адреси в основній мережі компанії.
AWS Load Balancer Controller
Розділ «AWS Load Balancer Controller»Це сучасний мозок для входу трафіку в кластер.
- ALB (Application Load Balancer): Для HTTP/HTTPS. Вміє маршрутизувати за шляхами (напр.
/apiна один сервіс,/static— на інший). - NLB (Network Load Balancer): Для надшвидкого TCP/UDP трафіку (ігри, бази даних, gRPC).
Target Type: IP: Завжди використовуйте цей режим. Він направляє трафік прямо на IP-адресу пода, минаючи зайві стрибки через сервери. Це зменшує затримку (latency) та робить перевірки здоров’я (health checks) набагато точнішими.
Типові помилки
Розділ «Типові помилки»| Помилка | Чому це стається | Як виправити |
|---|---|---|
| Підмережі /24 для EKS | Звичка зі світу віртуальних машин | Використовуйте мінімум /20 для підмереж подів |
| Вимкнений Prefix Delegation | Старі інструкції | Завжди вмикайте ENABLE_PREFIX_DELEGATION=true для нових кластерів |
| ALB на кожен сервіс | Незнання про group.name | Використовуйте анотацію group.name, щоб об’єднати багато сервісів під одним ALB (економить $16/міс за кожен балансувальник) |
Забуті ліміти max-pods | Зміна налаштувань CNI без оновлення вузлів | При ввімкненні Prefix Delegation обов’язково оновіть вузли з параметром --max-pods=110 |
Тест
Розділ «Тест»1. Скільки подів можна запустити на m5.xlarge у стандартному режимі та з Prefix Delegation?
У стандартному режимі — 58 подів. З Prefix Delegation теоретично можна тисячі, але EKS обмежує це значення до 110 для більшості типів екземплярів, щоб не перевантажувати процесор сервера управлінням мережею.
2. Навіщо використовувати 'target-type: ip' в анотаціях Load Balancer?
Цей режим направляє трафік від балансувальника AWS прямо на IP пода. Це прибирає один стрибок у мережі (NodePort) і дозволяє балансувальнику бачити здоров’я кожного окремого пода, а не всього сервера.
Практична вправа: Рятуємо кластер від дефіциту IP
Розділ «Практична вправа: Рятуємо кластер від дефіциту IP»- Увімкніть Prefix Delegation у вашому кластері через оновлення DaemonSet
aws-node. - Налаштуйте AWS Load Balancer Controller через Helm.
- Розгорніть додаток та створіть Ingress, який використовує спільний ALB з іншим сервісом (через
group.name). - Перевірте, що цілі (targets) у балансувальнику AWS мають IP-адреси подів, а не вузлів.
Наступний модуль
Розділ «Наступний модуль»Ви налаштували мережу, тепер час розібратися з безпекою. Переходьте до Модуля 5.3: Ідентифікація в EKS (IRSA vs Pod Identity), щоб навчитися надавати подам доступ до S3 та баз даних без жодного пароля в коді.