В переносимом сервисе пользовательского модуля можно настроить получение зашифрованных чувствительных данных. Для этого в файле values‑elma365.yaml включается использование ConfigMap — ресурса Kubernetes для работы с конфигурационными данными.
Если в переносимый сервис требуется передать конфиденциальную информацию, например строку подключения к базе данных:
- Сохраните чувствительные данные в секрет Kubernetes.
- Задайте правила передачи секрета с помощью ConfigMap.
Шаг 1. Сохранить секрет в пространстве имён переносимых сервисов
В одном секрете Kubernetes может храниться несколько ключей, не все из которых используются в переносимом сервисе. Когда в ConfigMap вы настраиваете правило получения секрета Kubernetes, он передаётся со всеми ключами, которые в нём содержатся. Поэтому рекомендуется создать отдельный секрет и добавить в него только те ключи, которые требуются для работы переносимого сервиса. Такой подход предотвратит случайную передачу избыточных чувствительных данных.
Секрет создаётся в пространстве имён переносимых сервисов — по умолчанию это elma365‑applets. Для этого:
- Создайте манифест секрета в формате .yaml:
apiVersion: v1
kind: Secret
metadata:
name: mysecret # Имя секрета. Указывается по правилам формата DNS Subdomain Names. Подробнее читайте в официальной документации Kubernetes
type: Opaque # Используйте значение, установленное по умолчанию
data:
key1: YmFy # Укажите значения ключей, зашифрованных в Base64
key2: Zm9v
- Создайте секрет:
kubectl apply -f ./mysecret.yaml -n elma365-applets
Где:
- mysecret.yaml — манифест секрета;
- elma365-applets — пространство имён, в котором размещаются переносимые сервисы.
Шаг 2. Задать правила передачи секрета с помощью ConfigMap
- Когда вы подготовили секрет, который нужно передать в переносимый сервис, откройте файл ConfigMap для редактирования, используя команду:
kubectl edit configmap elma365-babysitter-config -n elma365-applets
Где:
- elma365‑babysitter‑config — название ConfigMap;
- elma365‑applets — пространство имён, в котором размещаются переносимые сервисы.
- В открывшемся файле в параметре secretMappings настройте правило передачи секрета в переносимый сервис. Вы можете задать этот параметр:
- в блоке global — секрет применится к переносимым сервисам во всех модулях, для которых не настроены отдельные правила передачи секрета;
- в отдельном блоке — создайте его с уникальным именем переносимого сервиса, чтобы передать секрет только в него. Название блока сформируйте по шаблону {company}.ext_{id}.{uniquename}. Подробнее о составлении имени блока, в котором указываются параметры для определённого сервиса, читайте в статье про настройку ConfigMap.
Обратите внимание, значение параметра secretMappings из блока определённого переносимого сервиса имеет приоритет над значением из блока global. Если параметр на уровне переносимого сервиса не задан, используется значение из блока global.
- В параметре secretMappings вы можете задать правила передачи для неограниченного количества секретов. Для каждого секрета укажите:
- secretRef — имя секрета, из которого передаются все содержащиеся в нём ключи;
- type — способ передачи секрета. Доступные варианты:
- env — ключи из секрета передаются в переменные окружения переносимого сервиса;
- volume — ключи из секрета передаются в файловую систему переносимого сервиса;
- mountPath — если вы выбрали способ передачи секрета в файловую систему переносимого сервиса, укажите путь к каталогу, в котором сохранятся файлы с ключами из секрета.
Важно: для каждого секрета, который передаётся в переносимый сервис, значение параметра mountPath должно быть уникальным.
начало примечание
Примечание
Для хранения секретов рекомендуется использовать файловую систему, а не переменные окружения. Такой подход безопаснее и обеспечивает моментальное применение новых значений, если они изменяться в уже переданных в сервис секретах. Когда они хранятся в переменных окружения переносимого сервиса, требуется его перезапуск для использования обновлённых секретов.
конец примечание
- После внесения изменений примените их с помощью команды с указанием пространства имён, в котором размещаются переносимые сервисы:
kubectl apply -f cfg.yaml -n elma365-applets
Настроенный параметр secretMappings применится автоматически, так как сервис babysitter отслеживает изменения в ConfigMap. Все микросервисы, для которых изменились настройки, перезапустятся.
Пример настроенного параметра secretMappings
Рассмотрим на примере, как применяются настроенные правила передачи секретов. Допустим, в несколько переносимых сервисов нужно передать секреты следующим образом:
Переносимый сервис |
Передаваемые секреты |
portableservice1 |
Ключи секретов с именами secret1 и secret2 — в переменные окружения переносимого сервиса.
|
portableservice2 |
Ключи секретов с именами secret1 и secret2 — в переменные окружения, а секрет с именем secret3 — в файловую систему переносимого сервиса. |
portableservice3 и другие переносимые сервисы |
Ключи секрета с именем secret1 — в переменные окружения любых переносимых сервисов. |
Для этого:
- В пространстве имён elma365‑applets создайте секреты со следующими именами:
- secret1;
- secret2;
- secret3.
- В файле ConfigMap задайте правила передачи секретов:
- В блоке global укажите секрет с именем secret1, т. к. он используется в переносимом сервисе portableservice3, а также в других переносимых сервисах.
- Поскольку в переносимых сервисах portableservice1 и portableservice2 используются дополнительные секреты secret2 и secret3, создайте для этих сервисов отдельные блоки и укажите в них индивидуальные правила передачи секретов.
В результате настройка ConfigMap может выглядеть следующим образом:
global:
secretMappings:
- secretRef: "secret1" # Имя секрета, из которого передаются все ключи
type: "env"
# Параметры для переносимого сервиса с уникальным именем portableservice1
jilybhacnrpeu.ext_4a685c94-3dcd-433a-ac5f-6367aaf38950.portableservice1:
secretMappings:
- secretRef: "secret1" # имя секрета, из которого передаются все ключи
type: "env"
- secretRef: "secret2" # имя секрета, из которого передаются все ключи
type: "env"
# Параметры для переносимого сервиса с уникальным именем portableservice2
jilybhacnrpeu.ext_4a685c94-3dcd-433a-ac5f-6367aaf38950.portableservice2:
secretMappings:
- secretRef: "secret1" # имя секрета, из которого передаются все ключи
type: "env"
- secretRef: "secret2" # имя секрета, из которого передаются все ключи
type: "env"
- secretRef: "secret3" # имя секрета, из которого передаются все ключи
type: "volume"
mountPath: '/etc/secrets'
# Параметры для переносимого сервиса с уникальным именем portableservice3
jilybhacnrpeu.ext_4a685c94-3dcd-433a-ac5f-6367aaf38950.portableservice3:
replicaCount: 1