Модуль 2.4: Конфігурація
Складність:
[СЕРЕДНІЙ]- Концепції конфігураціїЧас на виконання: 25-30 хвилин
Передумови: Модуль 2.3 (Зберігання)
Що ви зможете робити
Розділ «Що ви зможете робити»Після завершення цього модуля ви зможете:
- Пояснити призначення ConfigMap та Secret для відокремлення конфігурації від коду
- Порівняти методи впровадження конфігурації: змінні середовища, монтування томів та аргументи команд
- Визначити коли використовувати ConfigMap або Secret залежно від чутливості даних
- Оцінити незмінні ConfigMap та їхні переваги для масштабних розгортань
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Застосунки потребують конфігурації — URL баз даних, прапорці функцій, API-ключі. Kubernetes надає ConfigMaps та Secrets для керування конфігурацією окремо від образів контейнерів. Це основна концепція, яку перевіряє KCNA.
Проблема конфігурації
Розділ «Проблема конфігурації»┌─────────────────────────────────────────────────────────────┐│ ЧОМУ ВІДДІЛЯТИ КОНФІГУРАЦІЮ? │├─────────────────────────────────────────────────────────────┤│ ││ Без ConfigMaps/Secrets (погана практика): ││ ───────────────────────────────────────────────────────── ││ Конфігурація вбудована в образ: ││ ENV DATABASE_URL=prod-db.example.com ││ ENV API_KEY=sk-12345... ││ ││ Проблеми: ││ • Потрібні різні образи для dev/staging/prod ││ • Секрети видимі у шарах образу ││ • Не можна змінити конфігурацію без перебудови образу ││ ││ З ConfigMaps/Secrets (найкраща практика): ││ ───────────────────────────────────────────────────────── ││ Той самий образ скрізь: ││ [my-app:v1.0] ←── той самий образ ││ ├── dev: ConfigMap з налаштуваннями dev ││ ├── staging: ConfigMap з налаштуваннями staging ││ └── prod: ConfigMap з налаштуваннями prod ││ ││ Переваги: ││ • Один образ, багато середовищ ││ • Зміна конфігурації без перебудови ││ • Секрети керуються окремо та безпечно ││ │└─────────────────────────────────────────────────────────────┘ConfigMaps
Розділ «ConfigMaps»ConfigMap зберігає нечутливі конфігураційні дані:
┌─────────────────────────────────────────────────────────────┐│ CONFIGMAP │├─────────────────────────────────────────────────────────────┤│ ││ ConfigMaps зберігають: ││ • Пари ключ-значення ││ • Конфігураційні файли ││ • Змінні середовища ││ ││ Приклад ConfigMap: ││ ───────────────────────────────────────────────────────── ││ apiVersion: v1 ││ kind: ConfigMap ││ metadata: ││ name: app-config ││ data: ││ DATABASE_HOST: mysql.default.svc ││ LOG_LEVEL: info ││ MAX_CONNECTIONS: "100" ││ ││ Примітка: Всі значення є рядками (навіть "100") ││ │└─────────────────────────────────────────────────────────────┘Використання ConfigMaps
Розділ «Використання ConfigMaps»Два способи:
- Як змінні середовища — використовуючи
envFromабоvalueFrom - Як том (файли) — монтування ConfigMap як тому, де кожен ключ стає файлом
Secrets
Розділ «Secrets»Secret зберігає чутливі дані:
┌─────────────────────────────────────────────────────────────┐│ SECRETS │├─────────────────────────────────────────────────────────────┤│ ││ Secrets зберігають: ││ • Паролі ││ • API-ключі ││ • Сертифікати ││ • SSH-ключі ││ ││ Типи Secret: ││ • Opaque: Загальний secret (за замовчуванням) ││ • kubernetes.io/tls: TLS-сертифікати ││ • kubernetes.io/dockerconfigjson: Автентифікація реєстру ││ • kubernetes.io/basic-auth: Базова автентифікація ││ • kubernetes.io/ssh-auth: SSH-облікові дані ││ ││ Дані закодовані в base64 (НЕ зашифровані!) ││ │└─────────────────────────────────────────────────────────────┘Використання Secrets
Розділ «Використання Secrets»Ті ж патерни, що й ConfigMaps:
- Як змінні середовища
- Як том (з
readOnly: true— найкраща практика для secrets)
ConfigMap проти Secret
Розділ «ConfigMap проти Secret»┌─────────────────────────────────────────────────────────────┐│ CONFIGMAP проти SECRET │├─────────────────────────────────────────────────────────────┤│ ││ ┌──────────────────────┐ ┌──────────────────────┐ ││ │ ConfigMap │ │ Secret │ ││ ├──────────────────────┤ ├──────────────────────┤ ││ │ • Нечутливі дані │ │ • Чутливі дані │ ││ │ • Простий текст │ │ • Закодовані base64 │ ││ │ • Не зашифровані │ │ • Можуть бути зашифр.│ ││ │ • Без обмеження розм. │ │ • Обмеження 1МБ │ ││ └──────────────────────┘ └──────────────────────┘ ││ ││ Коли що використовувати: ││ ConfigMap: Secret: ││ • Хост бази даних • Пароль бази даних ││ • Рівень логування • API-ключі ││ • Прапорці функцій • TLS-сертифікати ││ • Конфігураційні файли • SSH-ключі ││ ││ Важливо: ││ Base64 — це НЕ шифрування! ││ Це лише кодування. Будь-хто може декодувати. ││ Для справжньої безпеки увімкніть шифрування в стані ││ спокою. ││ │└─────────────────────────────────────────────────────────────┘Незмінні ConfigMaps та Secrets
Розділ «Незмінні ConfigMaps та Secrets»apiVersion: v1kind: ConfigMapmetadata: name: app-configimmutable: true ← Не може бути змінений після створенняdata: key: valueПереваги:
- Захист від випадкових змін
- Покращення продуктивності (не потрібні watches)
- Зменшення навантаження на API server
Для оновлення: Видаліть та створіть заново з новим ім’ям.
Змінні середовища проти монтування томів
Розділ «Змінні середовища проти монтування томів»| Аспект | Змінні середовища | Монтування томів |
|---|---|---|
| Оновлення | Потребує перезапуск Пода | Можливе гаряче оновлення |
| Доступ | Середовище процесу | Файлова система |
| Використання | Прості ключ-значення | Конфігураційні файли |
| Розмір | Обмежений | Більші файли OK |
Чи знали ви?
Розділ «Чи знали ви?»-
Secrets не зашифровані за замовчуванням - Вони лише закодовані base64. Увімкніть шифрування в стані спокою для справжньої безпеки.
-
Оновлення ConfigMap - Якщо змонтований як том, зміни поширюються до Подів (з затримкою). Змінні середовища потребують перезапуск Пода.
-
Обмеження розміру Secret - Secrets обмежені 1МБ, оскільки вони зберігаються в etcd.
-
Монтування конкретних ключів - Ви можете монтувати тільки конкретні ключі з ConfigMap/Secret, а не весь ресурс.
Типові помилки
Розділ «Типові помилки»| Помилка | Чому це шкодить | Правильне розуміння |
|---|---|---|
| Зберігання секретів у ConfigMaps | Ризик безпеки, видно в логах | Використовуйте Secrets для чутливих даних |
| Думати, що base64 — це шифрування | Хибне почуття безпеки | Увімкніть шифрування в стані спокою |
| Хардкодинг в образах | Не можна змінити без перебудови | Використовуйте ConfigMaps/Secrets |
| Великі ConfigMaps | Проблеми продуктивності | Тримайте конфігурації малими, розділяйте за потреби |
Вікторина
Розділ «Вікторина»-
Яка різниця між ConfigMap та Secret?
Відповідь
ConfigMaps зберігають нечутливі конфігураційні дані у простому тексті. Secrets зберігають чутливі дані (паролі, ключі) та закодовані base64. Обидва можуть використовуватися як змінні середовища або монтуватися як томи. -
Чи є кодування base64 безпечним?
Відповідь
Ні! Base64 — це кодування, а не шифрування. Будь-хто може декодувати його. Для справжньої безпеки увімкніть шифрування в стані спокою для Secrets в etcd. -
Як застосунок може споживати дані ConfigMap?
Відповідь
Два способи: (1) Як змінні середовища через envFrom або valueFrom, (2) Як файли, монтуючи ConfigMap як том. Змінні середовища потребують перезапуск Пода для оновлення; монтування томів можуть оновлюватися автоматично. -
Що робить immutable: true?
Відповідь
Робить ConfigMap або Secret незмінним після створення. Це захищає від випадкових змін та покращує продуктивність. Для оновлення потрібно видалити та створити заново. -
Чому відділяти конфігурацію від образів контейнерів?
Відповідь
Щоб використовувати той самий образ у різних середовищах (dev/staging/prod), змінювати конфігурацію без перебудови образів та тримати чутливі дані поза шарами образу.
Підсумок
Розділ «Підсумок»ConfigMaps:
- Зберігають нечутливу конфігурацію
- Пари ключ-значення або файли у простому тексті
- Використання: хости баз даних, рівні логування, прапорці функцій
Secrets:
- Зберігають чутливі дані
- Закодовані base64 (не зашифровані!)
- Використання: паролі, API-ключі, сертифікати
Методи споживання:
- Змінні середовища (потребують перезапуск для оновлень)
- Монтування томів (можуть гаряче оновлюватися)
Найкращі практики:
- Ніколи не хардкодьте конфігурацію в образах
- Використовуйте Secrets для чутливих даних
- Увімкніть шифрування в стані спокою для Secrets
- Розгляньте immutable для стабільності
Частину 2 завершено!
Розділ «Частину 2 завершено!»Ви закінчили Оркестрацію контейнерів (22% іспиту). Тепер ви розумієте:
- Як планування вирішує, де запускати Поди
- Масштабування з HPA, VPA та Cluster Autoscaler
- Зберігання з PV, PVC та StorageClasses
- Конфігурацію з ConfigMaps та Secrets
Наступна частина: Частина 3: Хмарна архітектура - Розуміння патернів проєктування хмарних технологій та екосистеми CNCF.