ConfigMaps и секреты
Безопасно управляйте данными конфигурации и конфиденциальной информацией в развёртываниях Kubernetes с помощью ConfigMaps и секретов.
«ConfigMaps и секреты» — бесплатный урок Docker & DevOps Fundamentals на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Docker & DevOps Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Docker & DevOps Fundamentals содержит 4 уроков всего.
Введение в ConfigMaps и секреты
Добро пожаловать! На этом уроке Вы узнаете, как управлять данными конфигурации и конфиденциальной информацией в Kubernetes. Мы рассмотрим ConfigMaps и секреты — два важных инструмента для гибкого и безопасного развёртывания приложений.

Зачем выносить конфигурацию?
Представьте, что учётные данные базы данных или ключи API жёстко прописаны непосредственно в образе Docker приложения. Это усложняет обновления и раскрывает конфиденциальные данные.
- Негибкость: изменения требуют повторной сборки образа.
- Риск для безопасности: конфиденциальные данные встроены в образ.
- Зависимость от среды: для разных сред (разработки и эксплуатации) нужны разные настройки.
ConfigMaps: неконфиденциальные данные
ConfigMap — это объект Kubernetes, предназначенный для хранения неконфиденциальных данных конфигурации в виде пар «ключ-значение». Представьте его как централизованное хранилище настроек приложения, например уровней ведения журнала или конечных точек API.
Он отделяет конфигурацию от кода приложения, делая развёртывания более переносимыми и упрощая управление ими.
Определение ConfigMap
ConfigMap можно создать из литеральных значений, файлов или каталогов. Ниже приведён простой пример, определённый в YAML-файле:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app-config
data:
log_level: "INFO"
api_endpoint: "http://myapi.example.com"ConfigMap как переменные среды
После создания под может использовать данные ConfigMap в качестве переменных среды. Это распространённый способ передавать настройки приложению.
Ниже показано, как под использует наш my-app-config:
apiVersion: v1
kind: Pod
metadata:
name: configmap-env-pod
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "echo Log Level: $LOG_LEVEL; echo API: $API_ENDPOINT"]
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: my-app-config
key: log_level
- name: API_ENDPOINT
valueFrom:
configMapKeyRef:
name: my-app-config
key: api_endpoint
restartPolicy: NeverConfigMap как подключённые файлы
Кроме того, данные ConfigMap можно подключить в контейнере как файлы. Каждая пара «ключ-значение» становится отдельным файлом: ключ используется как имя файла, а значение — как его содержимое.
Это удобно для конфигурационных файлов, которые приложение ожидает найти по определённому пути.
apiVersion: v1
kind: Pod
metadata:
name: configmap-file-pod
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "cat /etc/config/log_level; cat /etc/config/api_endpoint"]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: my-app-config
restartPolicy: NeverСекреты: конфиденциальные данные
Секреты похожи на ConfigMaps, но предназначены для конфиденциальных данных, таких как пароли, ключи API или сертификаты TLS. Kubernetes помогает безопасно управлять ими и предоставлять их приложениям.
ConfigMaps хранят данные в открытом виде, а секреты используют кодирование base64. Это НЕ шифрование, но оно предотвращает случайное раскрытие данных.
Определение секрета
При создании секрета значения необходимо закодировать в base64. Для этого можно использовать команду echo -n 'my-password' | base64.
Ниже приведён пример для пароля базы данных:
apiVersion: v1
kind: Secret
metadata:
name: db-credentials
type: Opaque
data:
username: YWRtaW4= # base64 of 'admin'
password: c3VwZXJzZWNyZXRwYXNz # base64 of 'supersecretpass'Использование секретов в подах
Поды используют секреты почти так же, как ConfigMaps: в качестве переменных среды или подключённых файлов. Kubernetes автоматически декодирует их перед передачей контейнеру.
Для безопасности обычно предпочтительнее использовать их как подключённые файлы, поскольку переменные среды проще записать в журнал или просмотреть.
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: my-app-container
image: busybox
command: ["sh", "-c", "echo DB User: $DB_USERNAME; echo DB Pass: $DB_PASSWORD"]
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-credentials
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-credentials
key: password
restartPolicy: NeverРекомендации по безопасности
Помните: кодирование base64 — это не шифрование. Для настоящего шифрования данных в состоянии покоя может понадобиться серверная часть секретов Kubernetes (например, Vault) или службы KMS облачного провайдера.
- RBAC: контролируйте, кто может получать доступ к секретам.
- Минимальные привилегии: предоставляйте подам доступ только к необходимым секретам.
- Подключённые файлы: отдавайте предпочтение подключению секретов как файлов, а не переменных среды.
Быстрая проверка конфигурации
Вам нужно сохранить в Kubernetes ключ API (конфиденциальный) и настройку уровня ведения журнала (неконфиденциальную) для приложения.
Какие объекты Kubernetes следует использовать для каждого из них соответственно?
Итоги: ConfigMaps и секреты
Отличная работа! Вы узнали, как управлять конфигурацией приложения и конфиденциальными данными в Kubernetes.
- ConfigMaps: хранят неконфиденциальные пары «ключ-значение».
- Секреты: хранят конфиденциальные данные (в кодировке base64).
- Поды могут использовать и те, и другие как переменные среды или подключённые файлы.
- При работе с конфиденциальной информацией всегда соблюдайте рекомендации по безопасности.
Далее изучите расширенные темы безопасности, такие как RBAC и внешние решения для управления секретами.
Часто задаваемые вопросы
Урок «ConfigMaps и секреты» бесплатный?
Да — полный текст урока «ConfigMaps и секреты» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Docker & DevOps Fundamentals, подпишись на CoddyKit PRO. Курс Docker & DevOps Fundamentals содержит 4 уроков всего.
Чему я научусь в уроке «ConfigMaps и секреты»?
Безопасно управляйте данными конфигурации и конфиденциальной информацией в развёртываниях Kubernetes с помощью ConfigMaps и секретов. Ты практикуешь Docker & DevOps Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Docker & DevOps Fundamentals?
Предыдущий опыт не требуется. Docker & DevOps Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «ConfigMaps и секреты»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Docker & DevOps Fundamentals?
Да. Каждый урок Docker & DevOps Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Развёртывания для приложений без состояния
- Сервисы для сетевого доступа
- ConfigMaps и секреты
- Ingress и внешняя маршрутизация