Перейти до вмісту

Модуль 1.7: Сервіси

Складність: [СЕРЕДНІЙ] - Основна концепція мережі

Час на виконання: 25-30 хвилин

Передумови: Модулі 1.5, 1.6


Що ви зможете робити

Розділ «Що ви зможете робити»

Після завершення цього модуля ви зможете:

  • Пояснити чому потрібні Service та як вони забезпечують стабільні точки доступу для Pod
  • Порівняти типи Service: ClusterIP, NodePort, LoadBalancer та ExternalName
  • Визначити як селектори міток з’єднують Service з відповідними Pod
  • Простежити як працює DNS-розв’язання для виявлення Service всередині кластера

Чому цей модуль важливий

Розділ «Чому цей модуль важливий»

Поди з’являються та зникають — їх IP постійно змінюються. Services надають стабільні точки доступу до Подів. Розуміння Services критично важливе для KCNA та для розуміння того, як працює мережа Kubernetes.


Проблема, яку вирішують Services

Розділ «Проблема, яку вирішують Services»
┌─────────────────────────────────────────────────────────────┐
│ ПРОБЛЕМА З IP ПОДІВ │
├─────────────────────────────────────────────────────────────┤
│ │
│ Без Services: │
│ Час T1: │
│ Frontend → 10.1.1.5 (под backend) ✓ Працює │
│ │
│ Час T2: Под backend падає, новий створюється │
│ Frontend → 10.1.1.5 ✗ Мертвий │
│ Новий под backend має IP: 10.1.1.9 │
│ │
│ З Services: │
│ Frontend → backend-service (стабільний) → Поди Backend │
│ │
│ Service забезпечує: │
│ • Стабільну IP та DNS-ім'я │
│ • Автоматичне виявлення здорових Подів │
│ • Балансування навантаження │
│ │
└─────────────────────────────────────────────────────────────┘

1. ClusterIP (За замовчуванням)

Розділ «1. ClusterIP (За замовчуванням)»
  • Тільки внутрішня IP кластера
  • Недоступний ззовні кластера
  • Тип за замовчуванням
  • Використання: Внутрішні сервіси (бази даних, кеші, API)
  • Відкриває Service на IP кожного вузла на статичному порті
  • Діапазон портів: 30000-32767
  • Доступний ззовні кластера
  • Використання: Розробка, тестування, простий зовнішній доступ
  • Забезпечує зовнішній балансувальник навантаження (хмарний провайдер)
  • Отримує зовнішню IP-адресу
  • Найпоширеніший для продакшн зовнішнього доступу
  • Використання: Продакшн зовнішній доступ у хмарі
  • Відображає Service на зовнішнє DNS-ім’я
  • Без проксіювання — повертає CNAME запис
  • Без селектора (без Подів)
  • Використання: Доступ до зовнішніх сервісів з внутрішнім ім’ям

Порівняння типів Service

Розділ «Порівняння типів Service»
ТипВнутрішнійЗовнішнійВипадок використання
ClusterIPВнутрішня комунікація
NodePort✓ (через IP вузла)Розробка/тестування
LoadBalancer✓ (через IP LB)Продакшн зовнішній
ExternalNameН/ДВідображення зовнішнього DNS

Виявлення сервісів

Розділ «Виявлення сервісів»

Kubernetes забезпечує два способи виявлення Services:

1. DNS (Рекомендовано)

Розділ «1. DNS (Рекомендовано)»
┌─────────────────────────────────────────────────────────────┐
│ ВИЯВЛЕННЯ НА ОСНОВІ DNS │
├─────────────────────────────────────────────────────────────┤
│ │
│ Кожен Service отримує DNS-запис: │
│ │
│ <service-name>.<namespace>.svc.cluster.local │
│ │
│ Приклади: │
│ backend.default.svc.cluster.local │
│ database.production.svc.cluster.local │
│ redis.cache.svc.cluster.local │
│ │
│ Скорочення (в тому ж просторі імен): │
│ backend (той самий простір імен) │
│ backend.default (вказано простір імен) │
│ backend.default.svc (додано svc) │
│ │
│ Под може просто використовувати: http://backend:80 │
│ │
└─────────────────────────────────────────────────────────────┘

2. Змінні середовища

Розділ «2. Змінні середовища»

Kubernetes ін’єктує змінні середовища у Поди. Обмеження: Service повинен існувати ДО створення Пода (DNS не має цього обмеження).


  • ClusterIP віртуальна - ClusterIP фактично не існує на жодному інтерфейсі. Вона обробляється правилами kube-proxy, які перенаправляють трафік.

  • LoadBalancer включає NodePort - Коли ви створюєте LoadBalancer Service, ви також автоматично отримуєте ClusterIP та NodePort.

  • Headless Services - Встановлення clusterIP: None створює headless Service, який повертає IP Подів напряму через DNS (корисно для StatefulSets).

  • Services обмежені простором імен - Service у просторі імен “dev” може вибирати тільки Поди у просторі імен “dev”.


ПомилкаЧому це шкодитьПравильне розуміння
Використання IP Подів напрямуIP змінюютьсяВикористовуйте Services для стабільного доступу
LoadBalancer скрізьДорого, марнотратноВикористовуйте Ingress для HTTP-маршрутизації
Неправильні мітки селектораService не знаходить ПодиМітки повинні точно збігатися
Очікування зовнішньої IP для ClusterIPНе працюєВикористовуйте NodePort або LoadBalancer

  1. Який тип Service за замовчуванням?

    Відповідь ClusterIP. Він забезпечує тільки внутрішній доступ у кластері — без зовнішнього доступу.
  2. Як Service знаходить, до яких Подів маршрутизувати?

    Відповідь Використовуючи селектори міток. Селектор Service збігається з мітками Подів. Kubernetes автоматично створює Endpoints, що містять відповідні IP Подів.
  3. Який формат DNS для Service?

    Відповідь `..svc.cluster.local`. Наприклад, `backend.production.svc.cluster.local`.
  4. Коли використовувати NodePort проти LoadBalancer?

    Відповідь NodePort для розробки/тестування або коли ви керуєте власним балансувальником. LoadBalancer для продакшн зовнішнього доступу у хмарних середовищах (він забезпечує хмарний балансувальник).
  5. Що таке headless Service?

    Відповідь Service з `clusterIP: None`. Замість однієї ClusterIP, DNS повертає IP всіх відповідних Подів. Використовується з StatefulSets для прямого доступу до Подів.

Services забезпечують:

  • Стабільну IP та DNS-ім’я
  • Балансування навантаження між Подами
  • Виявлення сервісів

Типи Service:

ТипДоступВипадок використання
ClusterIPТільки внутрішнійСервіси backend
NodePortЧерез IP:порт вузлаТестування
LoadBalancerЧерез хмарний LBПродакшн зовнішній
ExternalNameDNS-псевдонімЗовнішні сервіси

Методи виявлення:

  • DNS: service.namespace.svc.cluster.local (рекомендований)
  • Змінні середовища (застарілий)

Модуль 1.8: Простори імен та мітки - Організація та вибір ресурсів у Kubernetes.