0Pricing
Kubernetes Basics · Урок

Секреты для конфиденциальных данных

Безопасно храните и обрабатывайте конфиденциальную информацию, например пароли и ключи API, с помощью секретов.

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

Защита конфиденциальной информации

При разработке приложений Вам часто приходится работать с конфиденциальной информацией, например с паролями баз данных, ключами API или закрытыми сертификатами.

Хранить такие данные непосредственно в коде приложения или конфигурационных файлах — большой риск для безопасности! Это может привести к утечке данных и раскрытию информации о Вашей системе.

Знакомство с секретами Kubernetes

Секреты Kubernetes — это объекты, предназначенные для безопасного хранения конфиденциальных данных внутри кластера.

Они помогают отделить конфиденциальную информацию от определений Pod и кода приложения, делая развёртывание безопаснее и удобнее в управлении.

  • Отдельное хранение: не включайте конфиденциальные данные в образы контейнеров и YAML-файлы Pod.
  • Доступность: Pod могут использовать их как переменные окружения или подключённые файлы.

Секреты и ConfigMaps

Возможно, Вы помните ConfigMaps из предыдущего урока: они используются для хранения неконфиденциальных параметров конфигурации.

Секреты похожи на них, но предназначены именно для конфиденциальных данных. И те и другие хранят пары «ключ–значение», однако секреты учитывают конфиденциальный характер этих данных.

  • ConfigMaps: для общих неконфиденциальных настроек, например уровней журналирования и адресов API.
  • Секреты: для конфиденциальных данных, например паролей, токенов и закрытых ключей.

Помните: секреты по умолчанию кодируются в base64, но не шифруются!

Создание секрета из литерала

Самый простой способ создать секрет — использовать литеральное значение и команду kubectl create secret generic.

Это удобно для хранения небольших отдельных фрагментов конфиденциальных данных, например простого пароля.

kubectl create secret generic my-db-secret \
  --from-literal=username=admin \
  --from-literal=password=SuperSecretP@ssw0rd!

Создание секрета из файлов

Для больших или многострочных конфиденциальных данных, например закрытого ключа или полного конфигурационного файла, лучше создать секрет из файлов.

Сначала создайте файлы локально, а затем укажите на них ссылки. Kubernetes прочитает содержимое файлов и сохранит его.

# Create local files first
echo "my-api-key-12345" > api-key.txt
echo "my-token-abcde" > auth-token.txt

# Create the Secret
kubectl create secret generic app-credentials \
  --from-file=api-key.txt \
  --from-file=auth-token.txt

Использование секретов в качестве переменных окружения

Pod могут использовать данные секрета, добавляя их непосредственно в переменные окружения. Это распространённый способ работы с простыми парами «ключ–значение».

Можно указать отдельные ключи секрета или использовать все ключи с помощью envFrom.

apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod-env
spec:
  containers:
  - name: my-app
    image: nginx:latest
    env:
    - name: DB_USERNAME
      valueFrom:
        secretKeyRef:
          name: my-db-secret
          key: username
    - name: DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: my-db-secret
          key: password

Использование секретов в качестве подключённых файлов

Если приложение работает с конфиденциальными файлами, например сертификатами и закрытыми ключами, или ожидает конфигурацию по определённым путям, секреты можно подключить к Pod как файлы.

Каждый ключ секрета становится файлом в подключённом каталоге, а его значение — содержимым этого файла.

apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod-vol
spec:
  containers:
  - name: my-app
    image: nginx:latest
    volumeMounts:
    - name: app-secret-volume
      mountPath: "/etc/secrets"
      readOnly: true
  volumes:
  - name: app-secret-volume
    secret:
      secretName: app-credentials

Безопасность секретов

Секреты защищают данные от поверхностного просмотра, но не являются универсальным решением. Помните о следующем:

  • Кодирование в base64: секреты кодируются в base64, но не шифруются. Любой, у кого есть доступ к секрету, может декодировать его.
  • RBAC: используйте управление доступом на основе ролей (RBAC), чтобы ограничить круг пользователей, которые могут читать, создавать или изменять секреты.
  • Шифрование при хранении: для настоящей защиты включите шифрование при хранении данных в etcd (хранилище Kubernetes). Облачные провайдеры часто предоставляют такую возможность.

Обновление секретов

Если конфиденциальные данные изменились, необходимо обновить секрет. Повторный запуск команды kubectl create secret с новыми значениями обновит его, либо можно использовать kubectl apply -f с обновлённым YAML-файлом.

Однако уже запущенные Pod, использующие секрет, не получат изменения автоматически. Чтобы применить изменения, обычно требуется перезапустить или развернуть заново Pod, которые используют секрет.

Быстрая проверка: секреты

Представьте, что у Вас есть закрытый ключ API, к которому приложение должно получить доступ. Какой способ будет наиболее безопасным и подходящим для хранения этого ключа и передачи его Pod Kubernetes?

Итоги: секреты для конфиденциальных данных

Отличная работа! Вы научились работать с конфиденциальными данными в Kubernetes!

  • Секреты хранят конфиденциальную информацию, например пароли и ключи API.
  • Они кодируются в base64 и могут использоваться как переменные окружения или подключённые файлы.
  • Для максимальной безопасности всегда применяйте RBAC и рассмотрите возможность шифрования при хранении.
  • Помните: чтобы получить обновления секрета, Pod необходимо перезапустить.

Часто задаваемые вопросы

Урок «Секреты для конфиденциальных данных» бесплатный?

Да — полный текст урока «Секреты для конфиденциальных данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kubernetes Basics, подпишись на CoddyKit PRO. Курс Kubernetes Basics содержит 4 уроков всего.

Чему я научусь в уроке «Секреты для конфиденциальных данных»?

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

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

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

Сколько времени занимает урок «Секреты для конфиденциальных данных»?

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

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

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

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

  1. ConfigMaps для конфигурации
  2. Секреты для конфиденциальных данных
  3. Постоянные тома и заявки
  4. StorageClasses и динамическое выделение
← Назад к Kubernetes Basics