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:
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:
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:
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.