Что такое ConfigMap и Secrets в Kubernetes?java-59

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


1. ConfigMap

ConfigMap — это объект Kubernetes, который хранит неконфиденциальные данные в виде пар ключ-значение. Эти данные могут быть использованы для настройки приложений, например, переменные окружения, конфигурационные файлы или параметры командной строки.

Пример использования ConfigMap

Создание ConfigMap

Создадим ConfigMap, который хранит переменные окружения для приложения.

apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config
data:
  APP_COLOR: "blue"
  APP_ENV: "production"
  • APP_COLOR и APP_ENV — ключи, которые будут использоваться в приложении.

Использование ConfigMap в Pod

Теперь используем ConfigMap в Pod для передачи переменных окружения.

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
  - name: myapp-container
    image: myapp:1.0
    env:
    - name: COLOR
      valueFrom:
        configMapKeyRef:
          name: myapp-config
          key: APP_COLOR
    - name: ENV
      valueFrom:
        configMapKeyRef:
          name: myapp-config
          key: APP_ENV
  • configMapKeyRef — ссылка на ключ из ConfigMap.

Преимущества ConfigMap

  1. Гибкость — конфигурация отделена от кода приложения.
  2. Удобство — можно обновлять конфигурацию без пересборки образов.
  3. Масштабируемость — одна ConfigMap может использоваться в нескольких Pod.

2. Secrets

Secrets — это объект Kubernetes, который хранит чувствительные данные, такие как пароли, токены или ключи шифрования. В отличие от ConfigMap, Secrets хранят данные в закодированном виде (base64), что обеспечивает дополнительный уровень безопасности.

Пример использования Secrets

Создание Secret

Создадим Secret, который хранит пароль и токен.

apiVersion: v1
kind: Secret
metadata:
  name: myapp-secret
type: Opaque
data:
  DB_PASSWORD: cGFzc3dvcmQ=  # password (в base64)
  API_TOKEN: dG9rZW4=        # token (в base64)
  • DB_PASSWORD и API_TOKEN — ключи, которые хранят закодированные данные.

Использование Secret в Pod

Теперь используем Secret в Pod для передачи чувствительных данных.

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
  - name: myapp-container
    image: myapp:1.0
    env:
    - name: PASSWORD
      valueFrom:
        secretKeyRef:
          name: myapp-secret
          key: DB_PASSWORD
    - name: TOKEN
      valueFrom:
        secretKeyRef:
          name: myapp-secret
          key: API_TOKEN
  • secretKeyRef — ссылка на ключ из Secret.

Преимущества Secrets

  1. Безопасность — данные хранятся в закодированном виде.
  2. Удобство — можно обновлять секреты без пересборки образов.
  3. Интеграция — Secrets могут использоваться для настройки подключений к базам данных, API и другим сервисам.

Разница между ConfigMap и Secrets

Характеристика ConfigMap Secrets
Тип данных Неконфиденциальные данные Чувствительные данные
Кодирование Не кодируются Закодированы в base64
Использование Переменные окружения, файлы Пароли, токены, ключи
Безопасность Меньше безопасности Высокий уровень безопасности


Пример полного рабочего процесса

  1. Создание ConfigMap:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: myapp-config
    data:
      APP_COLOR: "blue"
      APP_ENV: "production"
    
  2. Создание Secret:

    apiVersion: v1
    kind: Secret
    metadata:
      name: myapp-secret
    type: Opaque
    data:
      DB_PASSWORD: cGFzc3dvcmQ=  # password (в base64)
      API_TOKEN: dG9rZW4=        # token (в base64)
    
  3. Использование ConfigMap и Secret в Pod:

    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp-pod
    spec:
      containers:
      - name: myapp-container
        image: myapp:1.0
        env:
        - name: COLOR
          valueFrom:
            configMapKeyRef:
              name: myapp-config
              key: APP_COLOR
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: myapp-secret
              key: DB_PASSWORD
    

Резюмируем

  • ConfigMap — используется для хранения неконфиденциальных данных, таких как переменные окружения или конфигурационные файлы.
  • Secrets — используется для хранения чувствительных данных, таких как пароли, токены или ключи шифрования.

Оба ресурса позволяют отделить конфигурацию от кода приложения, что делает приложения более гибкими и безопасными. ConfigMap и Secrets могут быть использованы в Pod для передачи данных через переменные окружения или монтирование файлов.