Skip to main content
  • »
  • KUBERNETES »
  • Sealed Secrets na platformie NSIS Kubernetes

Sealed Secrets na platformie NSIS Kubernetes

Sealed Secrets poprawia bezpieczeństwo naszych wdrożeń Kubernetes, umożliwiając szyfrowanie sekretów Kubernetes. Pozwala to na przechowywanie takich sekretów w kontroli źródła 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 będziemy omawiać

  • Instalacja kontrolera Sealed Secrets

  • Zainstaluj narzędzie wiersza poleceń kubeseal

  • Tworzenie zapieczętowanego sekretu

  • Odkryj tajemnicę

  • Weryfikacja

Wymagania wstępne

Nr 1 Konto

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

Nr 2 Zrozum rozmieszczenie sterów

Aby zainstalować Sealed Secrets na klastrze Kubernetes, użyjemy odpowiedniego wykresu Helm. Poniższy artykuł wyjaśnia tę procedurę:

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

Nr 3 Klaster Kubernetes

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

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 kontroler Sealed Secrets w naszym klastrze Kubernetes. W tym celu możemy użyć Helm, a pierwszym krokiem jest pobranie repozytorium Helm. Aby dodać repozytorium lokalnie, należy użyć następującego 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 nadpisujemy 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 kilka zasobów do naszego klastra. 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 Zainstaluj narzędzie 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:

kubeseal --version

który zwróci 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ć odszyfrowane 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 kontroli źródła.

Dlatego 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 kontroli źródła.

Krok 4 Rozpieczętowanie tajemnicy

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

kubectl create -f mysecret.yaml

To, po kilku sekundach, generuje 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 wyjście yaml sekretu, podczas gdy 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 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 minimalnej kapsuły o nazwie nginx, która jest oparta 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. Zastosuj przykład za pomocą następującego polecenia:

kubectl apply -f test-pod.yaml

Następnie wejdź do kontenera wewnątrz kapsuły nginx:

kubectl exec -it nginx -- sh

Wiersz polecenia zmieni się na #, co oznacza, że wprowadzone polecenie zostanie wykonane wewnątrz kontenera. Wykonaj polecenie printenv, aby zobaczyć zmienne środowiskowe. Możemy zobaczyć naszą zmienną TEST_VAR z wartością bar, zgodnie z oczekiwaniami:

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

Co robić 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 Instalacja HashiCorp Vault na NSIS Magnum.