Как получить секретные переменные окружения, реализованные kubernetes в python? - PullRequest
0 голосов
/ 21 февраля 2020

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

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

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

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

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

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

1 Ответ

0 голосов
/ 21 февраля 2020

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

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

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

NB Переменные среды хоста: 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}

NB Среда модуля отображает секретные данные u -> USERNAME, p -> PASSWORD

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

4. Просмотрите логи модуля Pod

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

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

freddie
fridays
...