Как получить секретные переменные среды, реализованные kubernetes, в python?

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

Я запрограммировал свое приложение с помощью python. Приложение Python успешно работает в контейнере докеров. Затем я создал секретные переменные через kubernetes. Я написал файл .yaml и указал требуемый контейнер и данные изображения. Это руководство по Kubernetes: Ссылка на руководство по Kubernetes

Теперь я хочу получить доступ к секретным переменным среды, которые я создал в kubernetes. Но как?

Как я могу прочитать секретную переменную среды с помощью python? Нужно ли инициализировать переменные среды в файле докера?

PS: я уже пробовал такие вещи:

import os
print(os.environ['USERNAME'])

person William Sharlaag    schedule 21.02.2020    source источник
comment
os.environ правильно. Если переменная отсутствует, проблема, скорее всего, связана с вашими конфигурациями k8s. Включите в свой вопрос соответствующие манифесты k8s.   -  person jordanm    schedule 21.02.2020


Ответы (1)


Следующее работает и должно доказать это вам:

1. Кодировка Base64, например. имя пользователя|пароль:

U=$(echo -n "freddie" | base64)
P=$(echo -n "fridays" | base64)

Примечание Переменные среды хоста: U и P.

Предполагая

POD="p"             # Or...
SECRET="s"          # Or...
NAMESPACE="default" # Or...

2. Создайте секрет:

echo "
apiVersion: v1
kind: Secret
metadata:
  name: ${SECRET}
data:
  u: ${U}
  p: ${P}
" | kubectl apply --filename=- --namespace=${NAMESPACE}

NB Данные секрета содержат значения u и p (соответствующие U и P)

дает:

secret/x created

И:

kubectl describe secret/${SECRET} --namespace=${NAMESPACE}

дает:

Name:         ${SECRET}
Namespace:    ${NAMESPACE}
Labels:       <none>
Annotations:  
Type:         Opaque

Data
====
p:  7 bytes
u:  7 bytes

3. Прикрепите значения секрета к поду:

echo "
apiVersion: v1
kind: Pod
metadata:
  name: ${POD}
spec:
  containers:
  - name: test
    image: python
    command:
    - python3
    - -c
    - \"import os;print(os.environ['USERNAME']);print(os.environ['PASSWORD'])\"
    env:
    - name: USERNAME
      valueFrom:
        secretKeyRef:
          name: ${SECRET}
          key: u
    - name: PASSWORD
      valueFrom:
        secretKeyRef:
          name: ${SECRET}
          key: p
" | kubectl apply --filename=- --namespace=${NAMESPACE}

Примечание. Среда модуля соответствует u-->USERNAME, p-->PASSWORD секрета.

Примечание. Эти изменения имен переменных должны продемонстрировать суть; они могут быть одинаковыми

4. Просмотрите журналы Pod

kubectl logs pod/${POD} --namespace=${NAMESPACE}

получается (в моем случае):

freddie
fridays
person DazWilkin    schedule 21.02.2020