В Kubernetes секреты имеют решающее значение для безопасного хранения конфиденциальной информации, такой как ключи API, пароли и сертификаты. Эти секреты можно использовать для заполнения переменных среды в контейнерах вашего приложения. В этой статье мы рассмотрим пять различных методов получения переменных среды Kubernetes из секретов, а также приведем примеры кода для каждого подхода.
Метод 1: внедрение переменных среды
Самый простой способ получить переменные среды из секретов — это напрямую внедрить их в среду вашего контейнера. Этого можно добиться, определив переменные среды в манифесте развертывания Kubernetes и указав секретный ключ в качестве значения. Вот пример фрагмента YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
template:
spec:
containers:
- name: my-app-container
image: my-app-image
env:
- name: SECRET_API_KEY
valueFrom:
secretKeyRef:
name: my-secret
key: api_key
Метод 2: Том секретов Kubernetes
Другой подход — смонтировать секрет как том в контейнере. Этот метод позволяет получить доступ к данным секрета в виде файлов в определенном каталоге. Вот пример:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
template:
spec:
containers:
- name: my-app-container
image: my-app-image
volumeMounts:
- name: secret-volume
mountPath: /var/my-secrets
volumes:
- name: secret-volume
secret:
secretName: my-secret
Метод 3. API Kubernetes Downward
API Kubernetes Downward позволяет предоставлять метаданные модуля и контейнера в виде переменных среды. Вы можете использовать эту функцию для получения секретов и назначения их переменным среды. Вот пример добавления секрета в переменную среды с помощью Downward API:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
env:
- name: SECRET_KEY
valueFrom:
secretKeyRef:
name: my-secret
key: secret_key
envFrom:
- secretRef:
name: my-secret
Метод 4. Использование клиентских библиотек Kubernetes
Вы можете использовать клиентские библиотеки Kubernetes в коде вашего приложения, чтобы напрямую получать секреты и программно назначать их переменным среды. Вот пример Python с использованием библиотеки kubernetes:
from kubernetes import client, config
config.load_kube_config()
v1 = client.CoreV1Api()
secret = v1.read_namespaced_secret("my-secret", "default")
api_key = secret.data["api_key"]
# Assign the secret to an environment variable
import os
os.environ["SECRET_API_KEY"] = api_key.decode("utf-8")
Метод 5: Внешние инструменты и плагины
Существуют различные внешние инструменты и плагины, которые упрощают извлечение секретов и переменных среды. Такие инструменты, как HashiCorp Vault, драйвер CSI Kubernetes Secrets Store или Helm, помогут вам эффективно управлять секретами и внедрять их в контейнеры.
В этой статье мы рассмотрели пять различных методов извлечения переменных среды Kubernetes из секретов. В зависимости от вашего варианта использования и предпочтений вы можете выбрать наиболее подходящий подход. Важно обеспечить безопасное управление секретами и надлежащий контроль доступа для защиты конфиденциальной информации в вашей среде Kubernetes.