Skip to main content

Sealed Secrets na platformie Kubernetes w NSIS Cloud

Sealed Secrets poprawiają bezpieczeństwo wdrożeń Kubernetes, umożliwiając szyfrowanie sekretów Kubernetes. Umożliwia to przechowywanie takich sekretów w systemach kontroli źródeł i przestrzeganie praktyk GitOps dotyczących przechowywania całej konfiguracji w kodzie.

W tym artykule zainstalujemy narzędzia do pracy z Sealed Secrets i zademonstrujemy korzystanie z Sealed Secrets w chmurze NSIS.

Co zostanie omówione?

  • Instalacja kontrolera Sealed Secrets

  • Instalacja narzędzia wiersza poleceń kubeseal

  • Tworzenie zapieczętowanego sekretu

  • Odpieczętowanie sekretu

  • Weryfikacja

Wymagania wstępne

Nr 1 Konto

Jest wymagane konto hostingowe NSIS z dostępem do interfejsu Horizon: https://horizon.cloudferro.com.

Nr 2 Rozumienie wdrażania Helm

Aby zainstalować Sealed Secrets na klastrze Kubernetes, użyjemy odpowiedniego wykresu Helm. Ta procedura jest objaśniona w artykule:

Wdrażanie Helm Charts na klastrach Magnum Kubernetes w chmurze NSIS

Nr 3 Klaster Kubernetes

Ogólne wyjaśnienie, jak utworzyć klaster Kubernetes, znajduje się w artykule:

Jak utworzyć klaster Kubernetes przy użyciu NSIS OpenStack Magnum

W przypadku nowych klastrów zawsze zaleca się korzystanie z najnowszej wersji szablonu klastra. Ten artykuł został przetestowany z Kubernetes 1.25.

Nr 4 Dostęp do klastra za pomocą kubectl

Jak uzyskać dostęp do klastra Kubernetes po wdrożeniu przy użyciu Kubectl na NSIS OpenStack Magnum?

Krok 1 Instalacja kontrolera Sealed Secrets

Aby korzystać z Sealed Secrets, najpierw zainstalujemy w naszym klastrze Kubernetes kontroler Sealed Secrets. W tym celu możemy użyć Helm, a pierwszym krokiem jest pobranie repozytorium Helm. Aby dodać repozytorium lokalnie, należy użyć polecenia:

helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets

Następnym krokiem jest zainstalowanie wykresu kontrolera SealedSecrets. Musimy zainstalować go w przestrzeni nazw kube-system. Zwróć uwagę, że zastępujemy również nazwę kontrolera, tak aby odpowiadała domyślnej nazwie używanej przez narzędzie CLI kubeseal, które zainstalujemy w następnej sekcji.

helm install sealed-secrets -n kube-system --set-string fullnameOverride=sealed-secrets-controller sealed-secrets/sealed-secrets

Wykres pobiera do naszego klastra kilka zasobów. Najważniejsze z nich to:

  • SealedSecret Custom Resource Definition (CRD) - definiuje szablon dla zapieczętowanych sekretów, które będą tworzone w klastrze.

  • Kontroler SealedSecrets pod działający w przestrzeni nazw kube-system.

Krok 2 Instalacja narzędzia wiersza poleceń kubeseal

Narzędzie Kubeseal CLI służy do szyfrowania sekretów przy użyciu publicznego certyfikatu kontrolera. Aby kontynuować, zainstaluj kubeseal za pomocą następującego zestawu poleceń:

KUBESEAL_VERSION='0.23.0'
wget "https://github.com/bitnami-labs/sealed-secrets/releases/download/v${KUBESEAL_VERSION:?}/kubeseal-${KUBESEAL_VERSION:?}-linux-amd64.tar.gz"
tar -xvzf kubeseal-${KUBESEAL_VERSION:?}-linux-amd64.tar.gz kubeseal
sudo install -m 755 kubeseal /usr/local/bin/kubeseal

Możesz zweryfikować, czy kubeseal został poprawnie zainstalowany, uruchamiając polecenie:

kubeseal --version

Zwróci ono wynik podobny do poniższego:

../_images/image-2024-5-23_17-16-21.png

Krok 3 Tworzenie zapieczętowanego sekretu

Możemy użyć Sealed Secrets do zaszyfrowania sekretów, które mogą być odszyfrowywane tylko przez kontroler działający w klastrze.

Zapieczętowany sekret musi zostać utworzony w oparciu o zwykły, niezaszyfrowany sekret Kubernetes. Nie chcemy jednak zatwierdzać tego podstawowego sekretu do naszego klastra Kubernetes. Nie chcemy również tworzyć trwałego pliku z niezaszyfrowaną zawartością sekretu, aby uniknąć przypadkowego przekazania go do systemu kontroli źródeł.

W związku z tym użyjemy kubectl do utworzenia zwykłego sekretu tylko tymczasowo, używając parametru –dry-run=client. Sekret ma klucz foo i wartość bar. kubectl wyprowadza ten tymczasowy sekret, a następnie przesyłamy te dane wyjściowe do narzędzia kubeseal. kubeseal pieczętuje (szyfruje) sekret i zapisuje go w pliku o nazwie sealed-secret.yaml.

kubectl create secret generic mysecret \
--dry-run=client \
--from-literal=foo=bar -o yaml | kubeseal \
--format yaml > mysecret.yaml

Kiedy przeglądamy plik, widzimy, że zawartość jest zaszyfrowana i bezpieczna do przechowywania w systemie kontroli źródeł.

Krok 4 Odpieczętowanie sekretu

Aby odblokować sekret i udostępnić go w klastrze, wykonujemy następujące polecenie:

kubectl create -f mysecret.yaml

W ciągu kilku sekund generuje ono zwykły sekret Kubernetes, który jest czytelny dla naszego klastra. Możemy to zweryfikować za pomocą tych dwóch poleceń:

kubectl get secret mysecret -o yaml
echo YmFy | base64 --decode

Pierwsze polecenie wyodrębnia dane wyjściowe yaml sekretu, natomiast drugie dekoduje wartość danych przechowywanych pod kluczem foo, co daje oczekiwany wynik: bar.

Wyniki można również zobaczyć na poniższym ekranie:

../_images/image-2024-5-23_17-39-371.png

Krok 5 Weryfikacja

Wygenerowany sekret może być używany jako zwykły sekret Kubernetes. Aby to przetestować, utwórz plik test-pod.yaml z następującą zawartością:

test-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    env:
    - name: TEST_VAR
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: foo

Spowoduje to uruchomienie minimalnego poda o nazwie nginx, który jest oparty na obrazie kontenera serwera nginx. W kontenerze wewnątrz poda tworzymy zmienną środowiskową o nazwie TEST_VAR. Wartość zmiennej jest przypisywana z naszego sekretu mysecret przez dostępny klucz foo. Wykonaj przykład za pomocą następującego polecenia:

kubectl apply -f test-pod.yaml

Następnie wejdź do kontenera wewnątrz poda nginx:

kubectl exec -it nginx -- sh

Prompt wiersza poleceń zmieni się na #, co oznacza, że wprowadzone polecenie zostanie wykonane wewnątrz kontenera. Wykonaj polecenie printenv, aby zobaczyć zmienne środowiskowe. Zgodnie z oczekiwaniami możemy zobaczyć naszą zmienną TEST_VAR z wartością bar:

../_images/image-end-of-article1.png

Co można zrobić dalej?

Sealed Secrets stanowią realną alternatywę dla zarządzania sekretami przy użyciu dodatkowych narzędzi, takich jak HashiCorp-Vault. Aby uzyskać dodatkowe informacje, zobacz artykuł Instalacja HashiCorp Vault na NSIS Magnum.