0Pricing
DevOps Bootcamp · Lekcja

ConfigMaps i Secrets

Bezpiecznie zarządzaj danymi konfiguracyjnymi i poufnymi informacjami w ramach wdrożeń Kubernetes, korzystając z obiektów ConfigMaps i Secrets.

ConfigMaps i Secrets to bezpłatna lekcja DevOps Bootcamp na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej DevOps Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.

Wprowadzenie do ConfigMaps i Secrets

Witamy! W tej lekcji nauczą się Państwo zarządzać danymi konfiguracyjnymi i poufnymi informacjami w Kubernetes. Omówimy ConfigMaps i Secrets — dwa niezbędne narzędzia umożliwiające elastyczne i bezpieczne wdrażanie aplikacji.

ConfigMaps i Secrets — ilustracja 1

Dlaczego wyodrębniać konfigurację?

Proszę wyobrazić sobie umieszczenie danych uwierzytelniających do bazy danych lub kluczy API bezpośrednio w obrazie Docker aplikacji. Utrudnia to aktualizacje i naraża poufne dane.

  • Brak elastyczności: zmiany wymagają ponownego zbudowania obrazu.
  • Ryzyko bezpieczeństwa: poufne dane zostają zapisane w obrazie.
  • Zależność od środowiska: różne środowiska (deweloperskie, produkcyjne) wymagają różnych ustawień.

ConfigMaps: dane niepoufne

ConfigMap to obiekt Kubernetes służący do przechowywania niepoufnych danych konfiguracyjnych w postaci par klucz-wartość. Można go traktować jako centralne miejsce na ustawienia aplikacji, takie jak poziomy logowania lub endpointy API.

Oddziela konfigurację od kodu aplikacji, dzięki czemu wdrożenia są bardziej przenośne i łatwiejsze w zarządzaniu.

Definiowanie ConfigMap

ConfigMap można utworzyć z wartości literalnych, plików lub katalogów. Oto prosty przykład zdefiniowany w pliku YAML:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-config
data:
  log_level: "INFO"
  api_endpoint: "http://myapi.example.com"

ConfigMap jako zmienne środowiskowe

Po utworzeniu ConfigMap Pod może korzystać z jej danych jako ze zmiennych środowiskowych. Jest to często stosowany sposób przekazywania ustawień do aplikacji.

Oto sposób, w jaki Pod korzysta z naszej my-app-config:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-env-pod
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["sh", "-c", "echo Log Level: $LOG_LEVEL; echo API: $API_ENDPOINT"]
    env:
    - name: LOG_LEVEL
      valueFrom:
        configMapKeyRef:
          name: my-app-config
          key: log_level
    - name: API_ENDPOINT
      valueFrom:
        configMapKeyRef:
          name: my-app-config
          key: api_endpoint
  restartPolicy: Never

ConfigMap jako podmontowane pliki

Alternatywnie dane ConfigMap można podmontować w kontenerze jako pliki. Każda para klucz-wartość staje się plikiem, którego nazwa odpowiada kluczowi, a zawartość — wartości.

Jest to przydatne w przypadku plików konfiguracyjnych, które aplikacja odczytuje z określonej ścieżki.

apiVersion: v1
kind: Pod
metadata:
  name: configmap-file-pod
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["sh", "-c", "cat /etc/config/log_level; cat /etc/config/api_endpoint"]
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
  - name: config-volume
    configMap:
      name: my-app-config
  restartPolicy: Never

Secrets: dane poufne

Secrets są podobne do ConfigMaps, ale są przeznaczone do przechowywania poufnych danych, takich jak hasła, klucze API lub certyfikaty TLS. Kubernetes pomaga bezpiecznie nimi zarządzać i je dystrybuować.

Podczas gdy ConfigMaps przechowują dane w postaci zwykłego tekstu, Secrets są kodowane w formacie base64. NIE jest to szyfrowanie, ale zapobiega przypadkowemu ujawnieniu danych.

Definiowanie Secret

Podczas tworzenia Secret wartości muszą być zakodowane w formacie base64. Do ich zakodowania można użyć polecenia echo -n 'my-password' | base64.

Oto przykład hasła do bazy danych:

apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
type: Opaque
data:
  username: YWRtaW4= # base64 of 'admin'
  password: c3VwZXJzZWNyZXRwYXNz # base64 of 'supersecretpass'

Używanie Secrets w Podach

Pody korzystają z Secrets niemal tak samo jak z ConfigMaps: jako ze zmiennych środowiskowych lub podmontowanych plików. Kubernetes automatycznie je dekoduje przed przekazaniem do kontenera.

Ze względów bezpieczeństwa zazwyczaj zaleca się używanie ich jako podmontowanych plików, ponieważ zmienne środowiskowe można łatwiej rejestrować lub przeglądać.

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: my-app-container
    image: busybox
    command: ["sh", "-c", "echo DB User: $DB_USERNAME; echo DB Pass: $DB_PASSWORD"]
    env:
    - name: DB_USERNAME
      valueFrom:
        secretKeyRef:
          name: db-credentials
          key: username
    - name: DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: db-credentials
          key: password
  restartPolicy: Never

Najlepsze praktyki bezpieczeństwa

Proszę pamiętać, że kodowanie base64 nie jest szyfrowaniem. Aby zapewnić prawdziwe szyfrowanie danych w spoczynku, może być potrzebny backend Kubernetes Secrets (taki jak Vault) lub usługi KMS dostawcy chmurowego.

  • RBAC: kontrolowanie, kto ma dostęp do Secrets.
  • Minimalne uprawnienia: przyznawanie Podom dostępu tylko do tych Secrets, których potrzebują.
  • Podmontowane pliki: preferowanie podmontowywania Secrets jako plików zamiast używania zmiennych środowiskowych.

Szybki test konfiguracji

W aplikacji działającej w Kubernetes trzeba przechować klucz API (poufny) oraz ustawienie poziomu logowania (niepoufne).

Jakich obiektów Kubernetes należy użyć w obu przypadkach?

Podsumowanie: ConfigMaps i Secrets

Świetnie! Poznali Państwo sposób zarządzania konfiguracją aplikacji i poufnymi danymi w Kubernetes.

  • ConfigMaps: przechowują niepoufne pary klucz-wartość.
  • Secrets: przechowują dane poufne (zakodowane w formacie base64).
  • Oba typy danych mogą być używane przez Pody jako zmienne środowiskowe lub podmontowane pliki.
  • Podczas pracy z poufnymi informacjami należy zawsze stosować najlepsze praktyki bezpieczeństwa.

W następnej części warto poznać zaawansowane zagadnienia bezpieczeństwa, takie jak RBAC i zewnętrzne rozwiązania do zarządzania sekretami.

Często zadawane pytania

Czy lekcja „ConfigMaps i Secrets” jest bezpłatna?

Tak — pełny tekst „ConfigMaps i Secrets” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu DevOps Bootcamp, przejdź na CoddyKit PRO. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.

Co nauczysz się w „ConfigMaps i Secrets”?

Bezpiecznie zarządzaj danymi konfiguracyjnymi i poufnymi informacjami w ramach wdrożeń Kubernetes, korzystając z obiektów ConfigMaps i Secrets. Ćwiczysz DevOps Bootcamp z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć DevOps Bootcamp?

Nie wymagamy żadnego doświadczenia. DevOps Bootcamp w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „ConfigMaps i Secrets”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji DevOps Bootcamp?

Tak. Każda lekcja DevOps Bootcamp zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Deployments dla aplikacji bezstanowych
  2. Services zapewniające dostęp sieciowy
  3. ConfigMaps i Secrets
  4. Ingress i routing zewnętrzny
← Powrót do DevOps Bootcamp