Stosowanie zabezpieczeń wdrażania w celu wymuszania najlepszych rozwiązań w usłudze Azure Kubernetes Service (AKS) (wersja zapoznawcza)
W tym artykule pokazano, jak za pomocą zabezpieczeń wdrożenia wymusić najlepsze rozwiązania w klastrze usługi Azure Kubernetes Service (AKS).
Omówienie
W całym cyklu projektowania często występują błędy, problemy i inne problemy, jeśli początkowe wdrożenie zasobów Kubernetes obejmuje błędy konfiguracji. Aby ułatwić tworzenie aplikacji na platformie Kubernetes, usługa Azure Kubernetes Service (AKS) oferuje zabezpieczenia wdrożenia (wersja zapoznawcza). Zabezpieczenia wdrożenia wymuszają najlepsze rozwiązania dotyczące rozwiązania Kubernetes w klastrze AKS za pomocą kontrolek usługi Azure Policy.
Zabezpieczenia wdrożenia oferują dwa poziomy konfiguracji:
Warning
: Wyświetla komunikaty ostrzegawcze w terminalu kodu, aby otrzymywać alerty o wszelkich niezgodnych konfiguracjach klastra, ale nadal zezwalają na wykonywanie żądania.Enforcement
: wymusza zgodne konfiguracje, odmawiając i modyfikując wdrożenia, jeśli nie są zgodne z najlepszymi rozwiązaniami.
Po skonfigurowaniu zabezpieczeń wdrożenia dla opcji "Ostrzeżenie" lub "Wymuszanie" zabezpieczenia wdrożenia programowo oceniają klastry w czasie tworzenia lub aktualizowania pod kątem zgodności. Zabezpieczenia wdrożenia zawierają również zagregowane informacje o zgodności w obciążeniach na poziomie poszczególnych zasobów za pośrednictwem pulpitu nawigacyjnego zgodności usługi Azure Policy w witrynie Azure Portal lub w interfejsie wiersza polecenia lub terminalu. Uruchomienie niezgodnego obciążenia wskazuje, że klaster nie jest zgodna z najlepszymi rozwiązaniami i że obciążenia w klastrze są zagrożone problemami spowodowanymi przez konfigurację klastra.
Ważne
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:
Wymagania wstępne
Należy włączyć dodatek usługi Azure Policy dla usługi AKS. Aby uzyskać więcej informacji, zobacz Włączanie usługi Azure Policy w klastrze usługi AKS.
Aby skonfigurować zabezpieczenia wdrożenia, musisz mieć wersję lub nowszą
aks-preview
wersję2.0.0b1
rozszerzenia. Aby zainstalować rozszerzenie, zobacz Instalowanie rozszerzenia interfejsu wiersza polecenia aks-preview. Zalecamy również zaktualizowanie interfejsu wiersza polecenia platformy Azure, aby upewnić się, że masz zainstalowaną najnowszą wersję.Aby utworzyć i zmodyfikować konfigurację zabezpieczeń wdrożenia, potrzebna jest subskrypcja z następującymi uprawnieniami w klastrze usługi AKS:
- Microsoft.Authorization/policyAssignments/write
- Microsoft.Authorization/policyAssignments/read
Należy zarejestrować flagę funkcji zabezpieczeń wdrożenia. Aby zarejestrować flagę funkcji, zobacz Rejestrowanie flagi funkcji pod kątem zabezpieczeń wdrożenia.
Instalowanie rozszerzenia interfejsu wiersza polecenia aks-preview
Zainstaluj rozszerzenie interfejsu
aks-preview
az extension add
wiersza polecenia przy użyciu polecenia .az extension add --name aks-preview
Zaktualizuj rozszerzenie, aby upewnić się, że masz zainstalowaną najnowszą wersję przy użyciu
az extension update
polecenia .az extension update --name aks-preview
Rejestrowanie flagi funkcji zabezpieczeń wdrożenia
Zarejestruj flagę
SafeguardsPreview
funkcji przy użyciuaz feature register
polecenia .az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
Wyświetlenie stanu Zarejestrowane trwa kilka minut.
Sprawdź stan rejestracji przy użyciu
az feature show
polecenia .az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
Gdy stan będzie odzwierciedlał wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService przy użyciu
az provider register
polecenia .az provider register --namespace Microsoft.ContainerService
Zasady zabezpieczeń wdrożenia
Uwaga
Zasady ReadOnlyRootFilesystem
i RootfilesystemInitContainers
są obecnie dostępne tylko w systemie Linux.
W poniższej tabeli wymieniono zasady, które stają się aktywne, oraz zasoby platformy Kubernetes przeznaczone dla nich podczas włączania zabezpieczeń wdrożenia. Obecnie dostępne zabezpieczenia wdrożenia można wyświetlić w witrynie Azure Portal jako definicję usługi Azure Policy lub w ramach wbudowanych definicji usługi Azure Policy dla usługi Azure Kubernetes Service. Celem tej kolekcji jest utworzenie wspólnej i ogólnej listy najlepszych rozwiązań mających zastosowanie do większości użytkowników i przypadków użycia.
Zasady zabezpieczeń wdrożenia | Docelowy zasób Kubernetes | Wynik mutacji, jeśli jest dostępny |
---|---|---|
[Wersja zapoznawcza]: Nie można edytować poszczególnych węzłów | Węzeł | Nie dotyczy |
Limity zasobów procesora CPU i pamięci kontenerów klastra Kubernetes nie powinny przekraczać określonych limitów | Zasobnik | Ustawia limity zasobów procesora CPU na 500 m, jeśli nie są ustawione i ustawia limity pamięci na 500Mi, jeśli żadna ścieżka nie jest obecna |
[Wersja zapoznawcza]: musi mieć zestaw reguł koligacji przeciw koligacji | Wdrażanie, StatefulSet, ReplicationController, ReplicaSet | Nie dotyczy |
[Wersja zapoznawcza]: Brak etykiet specyficznych dla usługi AKS | Wdrażanie, StanfulSet, Zestaw replik | Nie dotyczy |
Kontenery klastra Kubernetes powinny używać tylko dozwolonych obrazów | Zasobnik | Nie dotyczy |
[Wersja zapoznawcza]: Zarezerwowane zabezpieczenia puli systemu | Węzeł | Usuwa CriticalAddonsOnly defekt z puli węzłów użytkownika, jeśli nie został ustawiony. Usługa AKS używa defektu CriticalAddonsOnly , aby uniemożliwić zasobnikom klientów z dala od puli systemu. Ta konfiguracja zapewnia wyraźne rozdzielenie składników usługi AKS i zasobników klientów i zapobiega eksmisji zasobników klientów, które nie tolerują defektu CriticalAddonsOnly . |
Upewnij się, że kontenery klastra mają skonfigurowane sondy gotowości lub aktualności | Zasobnik | Nie dotyczy |
Klastry Kubernetes powinny używać sterownika Container Storage Interface (CSI) StorageClass | StorageClass | Nie dotyczy |
[Wersja zapoznawcza]: Kontenery klastra Kubernetes powinny ściągać obrazy tylko wtedy, gdy istnieją wpisy tajne ściągania obrazu | Zasobnik | Nie dotyczy |
[Wersja zapoznawcza]: Klaster Kubernetes powinien implementować dokładne budżety zakłóceń zasobników | Wdrażanie, zestaw replik, stanowy zestaw | Ustawia maxUnavailable w zasobie PodDisruptionBudget wartość 1. |
[Wersja zapoznawcza]: Usługi klastra Kubernetes powinny używać unikatowych selektorów | Usługa | Nie dotyczy |
[Wersja zapoznawcza]: ReadOnlyRootFilesystem w specyfikacji zasobnika ustawiono wartość true |
Zasobnik | Ustawia readOnlyRootFilesystem specyfikację zasobnika na true wartość , jeśli nie jest ustawiona. Ta konfiguracja uniemożliwia kontenerom zapisywanie w głównym systemie plików. |
[Wersja zapoznawcza]: RootfilesystemInitContainers w specyfikacji zasobnika ustawiono wartość true |
Zasobnik | Ustawia rootFilesystemInitContainers specyfikację zasobnika na true wartość , jeśli nie jest ustawiona. |
[Wersja zapoznawcza]: obrazy kontenerów klastra Kubernetes nie powinny zawierać najnowszego tagu obrazu | Wdrażanie, StatefulSet, ReplicationController, ReplicaSet | Nie dotyczy |
[Wersja zapoznawcza]: Obrazy kontenerów klastra Kubernetes muszą zawierać punkt zaczepienia preStop | Wdrażanie, StatefulSet, ReplicationController, ReplicaSet | Nie dotyczy |
Jeśli chcesz przesłać pomysł lub zażądać zabezpieczeń wdrożenia, otwórz problem w repozytorium GitHub usługi AKS i dodaj [deployment safeguards request]
go na początku tytułu.
Włączanie zabezpieczeń wdrożenia
Uwaga
Jeśli usługa Azure Policy została włączona po raz pierwszy w celu korzystania z zabezpieczeń wdrożenia, może być konieczne odczekenie do 20 minut , zanim usługa Azure Policy zostanie wdrożona.
Użycie poziomu zabezpieczeń Enforcement
wdrożenia oznacza, że decydujesz się na blokowanie i modyfikowanie wdrożeń. Przed włączeniem Enforcement
usługi rozważ, jak te zasady mogą współdziałać z klastrem usługi AKS.
Włączanie zabezpieczeń wdrożenia w nowym klastrze
Włącz zabezpieczenia wdrożenia w nowym klastrze przy użyciu az aks create
polecenia z flagami --safeguards-level
i --safeguards-version
.
Jeśli chcesz otrzymywać ostrzeżenia o niezgodności, ustaw wartość --safeguards-level
Warning
. Jeśli chcesz odmówić lub zmutować wszystkie niezgodne wdrożenia, ustaw go na Enforcement
wartość . Aby otrzymywać ostrzeżenia, ustaw wartość --safeguards-level
"Ostrzeżenie". Aby odmówić lub zmutować wszystkie wdrożenia, które nie są zgodne z zabezpieczeniami wdrożenia, ustaw wartość --safeguards-level
"Wymuszanie". Aby ustawić wersję zabezpieczeń wdrożenia, użyj flagi --safeguards-version
. Obecnie wersja 2.0.0 to najnowsza wersja zabezpieczeń wdrożenia.
az aks create \
--name myAKSCluster \
--resource-group myResourceGroup \
--enable-addons azure-policy \
--safeguards-level Warning \
--safeguards-version v2.0.0 \
--generate-ssh-keys
Włączanie zabezpieczeń wdrożenia w istniejącym klastrze
Włącz zabezpieczenia wdrożenia w istniejącym klastrze z włączonym dodatkiem usługi Azure Policy przy użyciu az aks update
polecenia z flagami --safeguards-level
i --safeguards-version
. Jeśli chcesz otrzymywać ostrzeżenia o niezgodności, ustaw wartość --safeguards-level
Warning
. Jeśli chcesz odmówić lub zmutować wszystkie niezgodne wdrożenia, ustaw go na Enforcement
wartość .
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0
Jeśli chcesz zaktualizować poziom zabezpieczeń wdrożenia istniejącego klastra, użyj az aks update
polecenia z flagą ustawioną na --safeguards-level
Warning
lub Enforcement
.
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement
Wykluczanie przestrzeni nazw
Można również wykluczyć niektóre przestrzenie nazw z zabezpieczeń wdrożenia. Jeśli wykluczysz przestrzeń nazw, działanie w tej przestrzeni nazw nie ma wpływu na ostrzeżenia lub wymuszanie zabezpieczeń wdrożenia.
Aby na przykład wykluczyć przestrzenie ns1
nazw i ns2
, użyj rozdzielanej przecinkami listy przestrzeni nazw z flagą --safeguards-excluded-ns
, jak pokazano w poniższym przykładzie:
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0 --safeguards-excluded-ns ns1,ns2
Aktualizowanie wersji zabezpieczeń wdrożenia
Uwaga
Wersja 2.0.0 to najnowsza wersja zabezpieczeń wdrożenia.
Zaktualizuj wersję zabezpieczeń wdrożenia przy użyciu az aks update
polecenia z --safeguards-version
flagą ustawioną na nową wersję. Poniższy przykład aktualizuje istniejący klaster do używania wersji 2.0.0:
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0
Weryfikowanie zgodności między klastrami
Po wdrożeniu manifestu kubernetes w interfejsie wiersza polecenia lub terminalu są wyświetlane ostrzeżenia lub potencjalny komunikat odmowy, jeśli klaster nie jest zgodny z zabezpieczeniami wdrożenia, jak pokazano w poniższych przykładach:
Ostrzeżenie
$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created
Egzekwowanie
Dzięki mutacjom ochronnym wdrożenia poziom wycisza zasoby Kubernetes, Enforcement
jeśli ma to zastosowanie. Jednak zasoby kubernetes nadal muszą przekazać wszystkie zabezpieczenia w celu pomyślnego wdrożenia. Jeśli jakiekolwiek zasady ochrony nie powiedzie się, zasób zostanie odrzucony i nie zostanie wdrożony.
$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
Jeśli zasoby platformy Kubernetes są zgodne z odpowiednimi zabezpieczeniami mutacji i spełniają wszystkie inne wymagania zabezpieczające, zostaną one pomyślnie wdrożone, jak pokazano w poniższym przykładzie:
$ kubectl apply -f pod.yml
pod/my-pod created
Weryfikowanie zgodności między klastrami przy użyciu pulpitu nawigacyjnego usługi Azure Policy
Aby sprawdzić, czy zastosowano zabezpieczenia wdrożenia i sprawdzić zgodność klastra, przejdź do strony witryny Azure Portal dla klastra i wybierz pozycję Zasady, a następnie wybierz pozycję Azure Policy.
Z listy zasad i inicjatyw wybierz inicjatywę skojarzoną z zabezpieczeniami wdrożenia. Zostanie wyświetlony pulpit nawigacyjny ze stanem zgodności w klastrze usługi AKS.
Uwaga
Aby prawidłowo ocenić zgodność w klastrze usługi AKS, inicjatywa usługi Azure Policy musi być ograniczona do grupy zasobów klastra.
Wyłączanie zabezpieczeń wdrożenia
Wyłącz zabezpieczenia wdrożenia w klastrze przy użyciu az aks update
polecenia i ustaw parametr na --safeguards-level
Off
wartość .
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off
--
Często zadawane pytania
Po raz pierwszy włączono zabezpieczenia wdrożenia w usłudze Azure Policy. Dlaczego nie widzę żadnych ostrzeżeń? Dlaczego moje zasobniki nie są odrzucane?
Po pierwszym włączeniu usługi Azure Policy synchronizacja z klastrem może potrwać do 35 minut.
Właśnie przełączyłem się z Ostrzeżenie na Wymuszanie. Czy to zacznie obowiązywać natychmiast?
Podczas przełączania poziomów zabezpieczeń wdrożenia może być konieczne odczekanie do 15 minut, zanim nowy poziom zostanie zastosowany.
Czy mogę utworzyć własne mutacje?
L.p. Jeśli masz pomysł na zabezpieczenie, otwórz problem w repozytorium GitHub usługi AKS i dodaj [deployment safeguards request]
go na początku tytułu.
Czy mogę wybrać i wybrać, które mutacje chcę w wymuszaniu?
L.p. Zabezpieczenia wdrożenia to wszystko lub nic. Po włączeniu opcji Ostrzeżenie lub Wymuszanie wszystkie zabezpieczenia będą aktywne.
Dlaczego mój zasób wdrażania został przyjęty, mimo że nie był on przestrzegany najlepszych rozwiązań?
Zabezpieczenia wdrażania wymuszają standardy najlepszych rozwiązań za pomocą mechanizmów kontroli usługi Azure Policy i mają zasady sprawdzające poprawność względem zasobów platformy Kubernetes. Aby ocenić i wymusić składniki klastra, usługa Azure Policy rozszerza usługę Gatekeeper. Wymuszanie strażnika działa również obecnie w fail-open
modelu. Ponieważ nie ma gwarancji, że usługa Gatekeeper odpowie na nasze wywołanie sieciowe, upewnimy się, że w takim przypadku weryfikacja zostanie pominięta, aby odmowa nie blokowała wdrożeń.
Aby dowiedzieć się więcej, zobacz Walidacja obciążenia w usłudze Gatekeeper.
Następne kroki
- Dowiedz się więcej o najlepszych rozwiązaniach dotyczących obsługi klastra usługi AKS.
Azure Kubernetes Service