0Pricing
DevOps Bootcamp · Урок

ConfigMaps и секреты

Безопасно управляйте данными конфигурации и конфиденциальной информацией в развёртываниях Kubernetes с помощью ConfigMaps и секретов.

«ConfigMaps и секреты» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.

Введение в ConfigMaps и секреты

Добро пожаловать! На этом уроке Вы узнаете, как управлять данными конфигурации и конфиденциальной информацией в Kubernetes. Мы рассмотрим ConfigMaps и секреты — два важных инструмента для гибкого и безопасного развёртывания приложений.

ConfigMaps и секреты — иллюстрация 1

Зачем выносить конфигурацию?

Представьте, что учётные данные базы данных или ключи 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: Never

ConfigMap как подключённые файлы

Кроме того, данные 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) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «ConfigMaps и секреты»?

Безопасно управляйте данными конфигурации и конфиденциальной информацией в развёртываниях Kubernetes с помощью ConfigMaps и секретов. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «ConfigMaps и секреты»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Развёртывания для приложений без состояния
  2. Сервисы для сетевого доступа
  3. ConfigMaps и секреты
  4. Ingress и внешняя маршрутизация
← Назад к DevOps Bootcamp