Learning
Kubernetes

ConfigMap és Secret

Konfiguráció szétválasztása image-től: ConfigMap és Secret használat, példák, biztonsági megjegyzések.

ConfigMap és Secret

A konfiguráció szétválasztásának elve

Konténerizált alkalmazásoknál fontos, hogy a konfiguráció ne égjen bele az image-be. Környezetenként (dev/staging/prod) eltérhetnek a beállítások, de az image maradjon azonos. Ezt szolgálja a ConfigMap és a Secret.

ConfigMap

A ConfigMap nem bizalmas konfigurációs adatokat tárol kulcs-érték párokként.

apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config
data:
  DATABASE_HOST: "postgres-service"
  DATABASE_PORT: "5432"
  APP_ENV: "production"
  LOG_LEVEL: "info"

Használat pod-ban – env változóként:

spec:
  containers:
    - name: myapp
      image: myapp:1.0.0
      envFrom:
        - configMapRef:
            name: myapp-config

Használat fájlként (kötetként):

spec:
  containers:
    - name: myapp
      image: myapp:1.0.0
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: myapp-config

Secret

A Secret bizalmas adatokat tárol (jelszavak, API kulcsok, tokenek). Értékei Base64-kódoltak (ez nem titkosítás).

Biztonsági megjegyzés: alapértelmezés szerint a Secretek az etcd-ben titkosítatlanul tárolódhatnak. Éles rendszerben használj Sealed Secrets/Vault/felhőszolgáltató titkosítást.

apiVersion: v1
kind: Secret
metadata:
  name: myapp-secret
type: Opaque
data:
  DATABASE_PASSWORD: cGFzc3dvcmQxMjM=
  API_KEY: bXlzZWNyZXRrZXk=

Secret létrehozása CLI-vel (ajánlott):

kubectl create secret generic myapp-secret \
  --from-literal=DATABASE_PASSWORD=password123 \
  --from-literal=API_KEY=mysecretkey

Secret használata pod-ban:

spec:
  containers:
    - name: myapp
      image: myapp:1.0.0
      env:
        - name: DATABASE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: myapp-secret
              key: DATABASE_PASSWORD

Rövid összefoglaló

  • ConfigMap: nem bizalmas konfiguráció; Secret: bizalmas adatok.
  • Mindkettő adható env-ként vagy fájlként.
  • A Secret Base64 nem titkosítás; production-ben gondoskodj titkosításról.

On this page