5 способов получить переменные среды Kubernetes из секретов

В 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.