Stosowanie zabezpieczeń wdrażania w celu wymuszenia najlepszych rozwiązań w usłudze Azure Kubernetes Service (AKS)

Dotyczy: ✔️ AKS Automatic AKS Standard ✔️

W tym artykule pokazano, jak za pomocą zabezpieczeń wdrożenia wymusić najlepsze rozwiązania w klastrze usługi Azure Kubernetes Service (AKS).

Przegląd

Funkcja Deployment Safeguards w usłudze AKS wymusza stosowanie najlepszych praktyk Kubernetes w klastrze AKS za pomocą mechanizmów zasad usługi Azure Policy.

Zabezpieczenia wdrożenia oferują dwa poziomy konfiguracji:

  • Warn: Wyświetla komunikaty ostrzegawcze w terminalu kodu, aby powiadomić o wszelkich niezgodnych konfiguracjach klastra, ale nadal zezwala na wykonywanie żądania.
  • Enforce: wymusza zgodne konfiguracje, odmawiając i modyfikując wdrożenia, jeśli nie są zgodne z najlepszymi rozwiązaniami.

Zachowanie różni się w zależności od trybu klastra usługi AKS:

  • AKS Automatic: zabezpieczenia wdrażania i podstawowe standardy zabezpieczeń Pod są domyślnie włączone w trybie Enforce. Przestrzenie nazw można wykluczyć, ale nie można przełączyć poziomu zabezpieczeń całego klastra na Warn. Aby uzyskać więcej informacji, zobacz Wykluczanie przestrzeni nazw obciążeń.
  • AKS Standard: Zabezpieczenia wdrożenia są opcjonalne i można je ustawić na Warn lub Enforce.

Po skonfigurowaniu zabezpieczeń wdrożenia programowo ocenia zasoby Kubernetes podczas 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 zgodny z najlepszymi praktykami i że obciążenia na twoim klastrze są narażone na problemy spowodowane konfiguracją klastra.

Ustawienia domyślne AKS Automatic i opcje AKS Standard

W poniższej tabeli przedstawiono podsumowanie zachowania specyficznego dla trybu dla zabezpieczeń wdrożenia:

Zdolność Automatyczne usługi AKS AKS Standard
Stan domyślny zabezpieczeń wdrożenia Włączone domyślnie Optional
Poziom zabezpieczeń Enforce domyślnie Warn lub Enforce
Zmień poziom zabezpieczeń Ogólnie nieobsługiwane (można wykluczyć przestrzenie nazw, ale nie można przełączyć poziomu zabezpieczeń całego klastra na Warn) Supported
Domyślne standardy zabezpieczeń Podów Punkt odniesienia Privileged
Ustawianie poziomu usługi PSS Obsługiwane są wykluczenia przestrzeni nazw; domyślna linia bazowa pozostaje Obsługiwane w trybie Baseline, Restricted lub Privileged
Wykluczenia przestrzeni nazw Supported Supported

Aby zapoznać się z ogólnym porównaniem trybów AKS, zobacz temat Porównanie funkcji usług AKS Automatic i AKS Standard.

Wymagania wstępne

Uwaga / Notatka

Administratorzy klastra nie potrzebują uprawnień usługi Azure Policy, aby włączyć lub wyłączyć zabezpieczenia wdrożenia. Wymagane jest jednak zainstalowanie dodatku usługi Azure Policy.

Zasady zabezpieczeń wdrożenia

W poniższej tabeli wymieniono zasady, które stają się aktywne po włączeniu funkcji Deployment Safeguards, oraz zasoby platformy Kubernetes, których dotyczą. Obecnie dostępne zabezpieczenia wdrożenia można wyświetlić w witrynie Azure Portal jako definicję usługi Azure Policy lub w artykule Wbudowane definicje 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 Wynik mutacji, jeśli jest dostępny
Nie można edytować poszczególnych węzłów N/A
Należy zdefiniować żądania zasobów procesora CPU i pamięci kontenerów klastra Kubernetes Ustawia domyślne żądania procesora CPU i pamięci oraz wymusza minimum. Aby uzyskać więcej informacji, zobacz Mutator żądań zasobów.
Musi mieć reguły antykolokacji lub topologySpreadConstraintsSet Dodaje reguły antykolokacji podów i ograniczenia rozkładu topologii w celu poprawy rozłożenia obciążenia. Aby uzyskać więcej informacji, zobacz Mutator anty-afinity i topologii rozproszenia.
Brak etykiet specyficznych dla usługi AKS N/A
Kontenery klastra Kubernetes powinny używać tylko dozwolonych obrazów N/A
Zarezerwowane skażenia puli systemowej Usuwa CriticalAddonsOnly defekt z puli węzłów użytkownika, jeśli nie został ustawiony. AKS używa znacznika CriticalAddonsOnly, aby utrzymać zasobniki klientów z dala od puli systemu. Ta konfiguracja zapewnia wyraźne rozdzielenie składników usługi AKS i zasobników klientów oraz zapobiega eksmisji zasobników klientów, które nie tolerują zanieczyszczenia CriticalAddonsOnly.
Upewnij się, że kontenery klastra mają skonfigurowane sondy gotowości lub żywotności. N/A
Klastry Kubernetes powinny używać sterownika Container Storage Interface (CSI) StorageClass N/A
Usługi klastra Kubernetes powinny używać unikatowych selektorów N/A
Obrazy kontenerów klastra Kubernetes nie powinny zawierać najnowszego tagu obrazu N/A

Jeśli chcesz przesłać pomysł lub żądanie dotyczące zabezpieczeń wdrożenia, otwórz problem w repozytorium GitHub usługi AKS i dodaj [Deployment Safeguards request] go na początku tytułu.

Modyfikator żądań zasobów

Gdy zabezpieczenia wdrożenia są ustawione na Enforce poziom, mutator żądań zasobów automatycznie ustawia żądania i limity CPU oraz pamięci dla kontenerów, które nie mają ich zdefiniowanych lub mają wartości poniżej minimalnych progów.

Wartości domyślne

Jeśli nie określono żadnych zasobów, mutator ustawia następujące wartości domyślne:

Resource Żądanie Ograniczenie
CPU 500 m 500 m
Memory 2048Mi (2Gi) 2048Mi (2Gi)

Minimalne wymuszanie

Gdy zasoby są określone, ale są one poniżej progów, mutator wymusza następujące wartości minimalne:

Resource Wartość minimalna
CPU 100 m
Memory 100Mi

Opis jednostek zasobów

Jednostki procesora CPU:

  • m = millicores (1m = 1/1000 rdzenia procesora CPU)
  • 1000m = 1 pełny rdzeń CPU
  • 500m = 0,5 rdzeni procesora CPU (połowa rdzenia)
  • 100m = 0,1 rdzeni procesora CPU (10% rdzenia)

Jednostki pamięci:

  • Mi = Mebibajty (binarne: 1 Mi = 1024 × 1024 bajtów)
  • Gi = Gibibajty (binarne: 1 Gi = 1024 Mi)
  • 2048Mi = 2Gi
  • 100Mi ≈ 105 MB

Reguły mutacji procesora CPU

Mutator stosuje następującą logikę dla zasobów procesora CPU:

Scenario Akcja
Brak zarówno żądania CPU, jak i limitu CPU Ustaw obie wartości na 500m (wartość domyślna)
Żądanie procesora CPU istnieje, ale jest mniejsze niż 100m Proszę ustawić żądanie na 100m (minimum)
Limit CPU istnieje, ale jest mniejszy niż 100m Ustaw limit na 100m (minimum)
Istnieje tylko żądanie procesora Ustawianie żądania równego limitowi
Istnieje tylko limit procesora. Ustawianie żądania równego limitowi

Reguły mutacji pamięci

Mutator stosuje następującą logikę dla zasobów pamięci:

Scenario Akcja
Zarówno żądania pamięci, jak i limitu brakuje Ustaw obie wartości na 2048Mi (wartość domyślna)
Żądanie pamięci istnieje, ale jest mniejsze niż 100Mi Proszę ustawić żądanie na 100Mi (minimum)
Limit pamięci istnieje, ale jest mniejszy niż 100Mi Ustaw limit na 100Mi (minimum)
Istnieje tylko żądanie pamięci Pozostaw bez zmian (brak dodanego limitu)
Istnieje tylko limit pamięci Pozostaw bez zmian (brak dodanego żądania)

Poprawka klasy QoS (Kubernetes Quality of Service)

Po zastosowaniu mutacji procesora CPU i pamięci, jeśli wartość żądania przekroczy limit dla tego samego typu zasobu, mutator ogranicza żądanie, aby dopasować go do limitu. Ta poprawka utrzymuje prawidłowe konfiguracje klas QoS (Kubernetes Quality of Service).

Przypadki, które są zmutowane

Mutator żądań zasobów stosuje zmiany w następujących scenariuszach:

  • Puste zasoby: kontenery bez żądań procesora CPU lub pamięci lub limity otrzymują wartości domyślne (500m procesor CPU, 2048Mi pamięć).
  • Poniżej minimalnych progów: żądania CPU lub limity poniżej 100m są zwiększane do 100m. Żądania pamięci lub limity poniżej 100Mi są zwiększane do 100Mi.
  • Nieprawidłowe scenariusze QoS: gdy żądania przekraczają limity, żądania są obniżane w celu dopasowania do limitów.
  • Częściowe specyfikacje zasobów: Kontenery z tylko żądaniami lub tylko limitami (ale nie oba) mają minimalne wartości wymuszone w określonych miejscach.
  • Wiele kontenerów: Wszystkie kontenery w podzie są przetwarzane i odpowiednio przekształcone.
  • Włączone przestrzenie nazw: tylko obciążenia w przestrzeniach nazw, w których włączono zabezpieczenie, ulegają modyfikacji.

Przypadki, które nie są zmutowane

** Mutator żądań zasobów nie stosuje zmian w następujących scenariuszach:

  • Wykluczone przestrzenie nazw: obciążenia w przestrzeniach nazw, w których ochrona jest wykluczona, pozostają niezmienione.
  • Już zgodne zasoby: Kontenery, które mają już żądania i limity powyżej minimalnych progów, pozostają niezmienione.
  • Prawidłowe konfiguracje QoS: jeśli żądania są mniejsze lub równe limitom, a obie wartości są powyżej minimum, nie występują żadne zmiany.

Antyfilia i modifikator rozkładu topologii

Gdy zabezpieczenia wdrożenia są ustawione na Enforce poziom, mutator anty-afinity i rozproszenia topologii automatycznie dodaje reguły anty-afinity zasobnika i ograniczenia rozproszenia topologii w celu poprawy dystrybucji obciążeń między węzłami.

Po uruchomieniu mutatora

Mutator jest uruchamiany tylko wtedy, gdy zostaną spełnione wszystkie następujące warunki:

  • Ograniczenia zarówno anty-afinity podów, jak i rozmieszczenia topologii nie są już zastosowane na obciążeniu.
  • Przestrzeń nazw nie jest wykluczona z zabezpieczeń wdrożenia.
  • Zabezpieczenia wdrożenia są w Enforce trybie.
  • Obciążenie nie ma kubernetes.azure.com/managedby=aks etykiety.

Co dodaje mutator

Identyfikacja etykiet: mutator identyfikuje zasobniki przy użyciu następujących priorytetów etykiet:

  • app etykieta (priorytet)
  • app.kubernetes.io/name etykieta (drugi priorytet)
  • Tworzy etykietę default-antiaffinity-applabel=<workload-name> (rezerwową)

Anty-koligacja zasobników: dodaje preferowaną regułę anty-koligacji zasobnika z wagą 100, która preferuje planowanie zasobników z pasującymi etykietami w różnych węzłach. Używa klucza topologii kubernetes.io/hostname.

Ograniczenia rozprzestrzeniania topologii: dodaje ograniczenie z następującymi ustawieniami:

Setting Wartość
MaxSkew 1 (dopuszcza maksymalną różnicę 1 zasobnika na węzeł)
KiedyNieDoSpełnienia ScheduleAnyway (najlepszy wysiłek, nie blokuje planowania)
Klucz topologii kubernetes.io/hostname

Przypadki, które są zmutowane

Mutator anty-afinity i rozkładu topologii wprowadza zmiany w następujących scenariuszach:

  • Obciążenia z etykietąapp: Używa wartości etykiety app dla selektorów przeciwko kolidacji i rozprzestrzeniania się topologii.
  • Obciążenia z etykietą app.kubernetes.io/name: gdy etykieta nie app istnieje, użyj tej etykiety dla selektorów.
  • Obciążenia bez etykiet aplikacji: tworzy etykietę domyślną przy użyciu nazwy obciążenia i dodaje reguły antyafinity i rozprzestrzenienia topologii.
  • Czyste obciążenia: Obciążenia bez istniejących ograniczeń powiązań lub rozmieszczenia topologii otrzymują obie konfiguracje.
  • Koligacja częściowa: Obciążenia z istniejącymi koligacjami węzłów (ale bez anty-koligacji zasobnika) otrzymują reguły anty-koligacji zasobnika i rozkładu topologii.
  • Włączone przestrzenie nazw: Mutacje występują tylko w przestrzeniach nazw, w których włączono ochronę.

Przypadki, które nie są zmutowane

Nie stosuje się zmian w następujących scenariuszach, jeśli mutator anty-powiązania i rozkładu topologii nie wprowadza zmian:

  • Istniejące ograniczenia rozprzestrzeniania topologii: obciążenia, które mają już jakiekolwiek ograniczenia rozprzestrzeniania topologii, są całkowicie pomijane.
  • Istniejący antyafinitet poda: Obciążenia z istniejącymi wymaganymi lub preferowanymi regułami antyafinitetu poda są całkowicie pomijane.
  • Wykluczone przestrzenie nazw: obciążenia w przestrzeniach nazw, w których ochrona jest wykluczona, pozostają niezmienione.
  • Obciążenia bez rozpoznawalnych nazw lub etykiet: Przypadki brzegowe, w których nie można określić nazwy aplikacji, są bezpiecznie pomijane.

Komunikaty o błędach zabezpieczeń wdrożenia

W tej sekcji opisano komunikaty o błędach, które mogą wystąpić, gdy zabezpieczenia wdrożenia wykrywa niezgodne konfiguracje wraz z zalecanymi poprawkami.

Ogólne komunikaty o błędach zabezpieczeń

W poniższej tabeli wymieniono komunikaty o błędach dla ogólnych zasad zabezpieczeń wdrożenia:

Policy Komunikat o błędzie Napraw.
Wymuszanie sond Container <container_name> in your Pod <pod_name> has no livenessProbe. Required probes: readinessProbe, livenessProbe Dodaj sondy liveness i readiness do każdego kontenera.
Brak obrazu "najnowszego" Please specify an explicit, versioned image tag such as '1.0' for container %v. Using explicit version tags is a best practice to ensure reproducibility, prevent unintended updates, and facilitate easier debugging and rollbacks. Avoid using the 'latest' tag because it can change over time without notice. Użyj jawnego tagu obrazu innego niż latest lub pustego. Na przykład nginx nie jest dozwolona, ale nginx:v1.0.0 jest dozwolona.
Wymuszanie sterownika CSI Storage class <class_name> use intree provisioner kubernetes.io/azure-file is not allowed lub Storage class <class_name> use intree provisioner kubernetes.io/azure-disk is not allowed Użyj polecenia disk.csi.azure.com lub file.csi.azure.com zamiast tego. Aby uzyskać więcej informacji, zobacz Sterowniki CSI w usłudze AKS.
Żądania zasobów container <container_name> has no resource requests Dodawanie żądań procesora CPU i pamięci do kontenera.
Reguły anty-affinity Deployment with 2 replicas should have either podAntiAffinity or topologySpreadConstraints set to avoid disruptions due to nodes crashing Zdefiniuj podAntiAffinity lub topologySpreadConstraints na obciążeniu.
Etykiety z ograniczeniami Label kubernetes.azure.com is reserved for AKS use only Usuń etykietę z pracy.
Ograniczone edycje węzłów Tainting or labeling individual nodes is not recommended. Please use Azure CLI to taint/label node pools instead Użyj Azure CLI do oznaczania lub etykietowania pul węzłów zamiast poszczególnych węzłów.
Ograniczone oznaki Taint with key CriticalAddonsOnly is reserved for the system pool only Nie należy zanieczyszczać puli węzłów użytkownika za pomocą CriticalAddonsOnly.

Komunikaty o błędach Pod Security Standards

Uwaga / Notatka

Podstawowe standardy zabezpieczeń zasobników są teraz domyślnie włączone w usłudze AKS w trybie automatycznym. Nie można wyłączyć podstawowych standardów zabezpieczeń Pod w AKS Automatic.

Zabezpieczenia wdrożenia obsługują również możliwość włączania standardów zabezpieczeń zasobników: Bazowego, Ograniczonego oraz Uprzywilejowanego. Aby zapewnić pomyślne wdrożenie obciążeń, upewnij się, że każdy manifest jest zgodny z wymaganiami Pod Security Baseline lub Restricted. Domyślnie usługa Azure Kubernetes Service używa uprzywilejowanych Standardów Bezpieczeństwa Podów.

Policy Komunikat o błędzie Napraw.
AppArmor AppArmor annotation values must be undefined/nil, runtime/default, or localhost/* lub AppArmor profile type must be one of: undefined/nil, RuntimeDefault, or Localhost Usuń dowolną specyfikację aplikacji AppArmor. Domyślnie platforma Kubernetes stosuje ustawienia AppArmor. Na obsługiwanych hostach profil RuntimeDefault AppArmor jest domyślnie stosowany.
Przestrzenie nazw hosta Host network namespaces are disallowed: spec.hostNetwork is set to true lub Host PID namespaces are disallowed: spec.hostPID is set to true lub Host IPC namespaces are disallowed: spec.hostIPC is set to true Ustaw te wartości na false, lub usuń określanie pól.
Kontenery uprzywilejowane Privileged [ephemeral\|init\|N/A] containers are disallowed: spec.containers[*].securityContext.privileged is set to true Ustaw odpowiednie securityContext.privileged pole na false, lub usuń pole.
Capabilities Komunikat zaczyna się od Disallowed capabilities detected Usuń możliwość wyświetlaną z manifestu kontenera.
Woluminy HostPath HostPath volumes are forbidden under restricted security policy unless containers mounting them are from allowed images Usuń wolumin HostPath i instalację woluminu.
Porty hosta HostPorts are forbidden under baseline security policy Usuń specyfikację portu hosta z wadliwego kontenera.
SELinux SELinux type must be one of: undefined/empty, container_t, container_init_t, container_kvm_t, or container_engine_t Ustaw pole kontenera securityContext.seLinuxOptions.type na jedną z dozwolonych wartości.
/proc Typ montowania ProcMount must be undefined/nil or 'Default' in spec.containers[*].securityContext.procMount Ustaw spec.containers[*].securityContext.procMount wartość na Default lub pozostaw ją niezdefiniowaną.
Seccomp Seccomp profile must not be explicitly set to Unconfined. Allowed values are: undefined/nil, RuntimeDefault, or Localhost Ustaw securityContext.seccompProfile.type na zasobniku lub kontenerach jedną z dozwolonych wartości.
Sysctls Disallowed sysctl detected. Only baseline Kubernetes pod security standard sysctls are permitted Usuń niedozwolone pliki sysctls. Aby zapoznać się z określoną listą, zobacz specyfikację standardów zabezpieczeń zasobnika Kubernetes.
Typy woluminów (tylko z ograniczeniami PSS) Only the following volume types are allowed under restricted policy: configMap, csi, downwardAPI, emptyDir, ephemeral, persistentVolumeClaim, projected, secret Usuń wszystkie woluminy, które nie są jednym z dozwolonych typów.
Eskalacja uprawnień (tylko z ograniczeniami PSS) Privilege escalation must be set to false under restricted policy Ustaw spec.containers[*].securityContext.allowPrivilegeEscalation na false dla każdego kontenera, initContainer i efemerycznego kontenera.
Uruchamianie jako użytkownik nie-root (tylko z ograniczeniami PSS) Containers must not run as root user in spec.containers[*].securityContext.runAsNonRoot Ustaw spec.containers[*].securityContext.runAsNonRoot na true dla każdego kontenera, initContainer i efemerycznego kontenera.
Uruchom jako użytkownik niebędący użytkownikiem głównym (tylko z ograniczeniami PSS) Containers must not run as root user: spec.securityContext.runAsUser is set to 0 Ustaw securityContext.runAsUser na wartość niezerową lub pozostaw ją niezdefiniowaną dla poziomu pod i każdego kontenera, initContainer oraz efemerycznego containera.
Seccomp (tylko z ograniczeniami PSS) Seccomp profile must be "RuntimeDefault" or "Localhost" under restricted policy Ustaw securityContext.seccompProfile.type na zasobniku lub kontenerach jedną z dozwolonych wartości. Różni się to od punktu odniesienia, ponieważ zasady z ograniczeniami nie zezwalają na niezdefiniowaną wartość.
Możliwości (tylko z ograniczeniami PSS) All containers must drop ALL capabilities under restricted policy lub Only NET_BIND_SERVICE may be added to capabilities under restricted policy Wszystkie kontenery muszą rezygnować z ALL uprawnień i mogą dodawać tylko NET_BIND_SERVICE.

Włączanie zabezpieczeń wdrożenia

Uwaga / Notatka

Użycie poziomu funkcji Deployment Safeguards Enforce oznacza, że wyrażasz zgodę na blokowanie i modyfikowanie wdrożeń. Przed włączeniem Enforce, rozważ, jak te zasady mogą współdziałać z klastrem usługi AKS.

Włączanie zabezpieczeń wdrożenia w istniejącym klastrze

Włącz zabezpieczenia wdrażania dla istniejącego klastra, w którym jest włączony dodatek Azure Policy, za pomocą polecenia az aks safeguard create z flagą --level. Jeśli chcesz otrzymywać ostrzeżenia o niezgodności, ustaw --level na Warn. Jeśli chcesz zablokować lub zmutować wszystkie niezgodne wdrożenia, ustaw to na Enforce.

az aks safeguards create --resource-group <resource-group-name> --name <cluster-name> --level Enforce 

Można również włączyć zabezpieczenia wdrożenia przy użyciu --cluster flagi i określenia identyfikatora zasobu klastra.

az aks safeguards create --cluster <ID> --level Enforce

Jeśli chcesz zaktualizować poziom zabezpieczeń wdrożenia istniejącego klastra, uruchom następujące polecenie z nową wartością .--level

az aks safeguards update --resource-group <resource-group-name> --name <cluster-name> --level Warn 

Wykluczanie przestrzeni nazw

Można również wykluczyć niektóre przestrzenie nazw z zabezpieczeń wdrożeń i standardów zabezpieczeń podów. Jeśli wykluczysz przestrzeń nazw, działanie w tej przestrzeni nazw nie ma wpływu na ostrzeżenia lub wymuszanie zabezpieczeń wdrożenia.

Uwaga / Notatka

W klastrach AKS Automatic można wykluczyć przestrzenie nazw z mechanizmów Deployment Safeguards i Pod Security Standards, ale nie można zmienić trybu z Enforce na Warn. To ograniczenie zapewnia, że najlepsze praktyki będą nadal egzekwowane w klastrach automatycznych.

Na przykład, aby wykluczyć przestrzenie nazw ns1 i ns2, użyj listy przestrzeni nazw rozdzielonych spacjami z flagą --excluded-ns, jak pokazano w poniższym przykładzie:

az aks safeguards update --resource-group <resource-group-name> --name <cluster-name> --level Enforce --excluded-ns ns1 ns2 

Włączanie standardów zabezpieczeń Podów

Uwaga / Notatka

W klastrach AKS w warstwie Standard standardy zabezpieczeń zasobników mają domyślnie poziom Privileged, który nie wymusza żadnych ograniczeń. Aby wymusić standardy bezpieczeństwa zasobników, użyj flagi --pss-level, aby ustawić poziom na Baseline lub Restricted. Aby przywrócić wartość domyślną, ustaw wartość --pss-levelPrivileged.

W klastrach AKS Automatic standardy zabezpieczeń zasobników mają domyślnie ustawiony poziom Baseline.

az aks safeguards update --resource-group <resource-group-name> --name <cluster-name> --level Warn --pss-level <Baseline|Restricted|Privileged>

Aktualizowanie wersji zabezpieczeń wdrożenia

Zabezpieczenia wdrożenia są zgodne ze schematem obsługi wersji dodatków usługi AKS. Każda nowa wersja zabezpieczeń wdrożenia zostanie wydana jako nowa wersja pomocnicza w usłudze AKS. Te aktualizacje będą komunikowane za pośrednictwem informacji o wydaniu AKS w serwisie GitHub i zostaną uwzględnione w tabeli „Zasady zabezpieczeń wdrażania” w naszej dokumentacji.

Aby dowiedzieć się więcej na temat przechowywania wersji i dodatków usługi AKS, zapoznaj się z następującą dokumentacją: Wersje składników usługi AKS i przechowywanie wersji usługi AKS dla dodatków.

Weryfikowanie zgodności między klastrami

Po wdrożeniu manifestu platformy Kubernetes w interfejsie wiersza polecenia lub terminalu zostaną wyświetlone ostrzeżenia lub potencjalny komunikat odmowy, jeśli klaster nie jest zgodny z zabezpieczeniami wdrożenia, jak pokazano w poniższych przykładach:

ostrzegaj

$ kubectl apply -f deployment.yaml
Warning: [azurepolicy-k8sazurev1antiaffinityrules-ceffa082711831ebffd1] Deployment with 2 replicas should have either podAntiAffinity or topologySpreadConstraints set to avoid disruptions due to nodes crashing
deployment.apps/simple-web created

Wymuś

Dzięki mutacjom zabezpieczeń wdrożenia poziom Enforce modyfikuje zasoby Kubernetes, gdy ma to zastosowanie. Jednak zasoby Kubernetes nadal muszą przejść wszystkie zabezpieczenia, aby zostać pomyślnie wdrożone. Jeśli jakiekolwiek polisy ochrony nie powiodą się, zasób zostanie odrzucony i nie zostanie wdrożony.

$ kubectl apply -f deployment.yaml 
Error from server (Forbidden): error when creating "deployment.yaml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev1antiaffinityrules-ceffa082711831ebffd1] Deployment with 2 replicas should have either podAntiAffinity or topologySpreadConstraints set to avoid disruptions due to nodes crashing

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 deployment.yaml
deployment.apps/simple-web 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. Widzisz pulpit nawigacyjny pokazujący stan zgodności w całym klastrze usługi AKS.

Uwaga / Notatka

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

Aby wyłączyć funkcję Deployment Safeguards w klastrze, użyj polecenia delete.

az aks safeguards delete --resource-group <resource-group-name> --name <cluster-name>

Często zadawane pytania

Czy mogę utworzyć własne mutacje?

Nie. 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ć, które mutacje chcę w egzekwowaniu?

Nie. Zabezpieczenia wdrożenia to wszystko lub nic. Po włączeniu opcji Ostrzegaj lub Wymuszaj wszystkie zabezpieczenia są aktywne.

Dlaczego mój zasób wdrożeniowy został zaakceptowany, mimo że nie przestrzegał najlepszych praktyk?

Funkcja Deployment Safeguards wymusza standardy najlepszych praktyk za pomocą mechanizmów usługi Azure Policy i obejmuje zasady, które weryfikują zasoby Kubernetes. Aby ocenić i wymusić składniki klastra, usługa Azure Policy rozszerza usługę Gatekeeper. Wymuszanie mechanizmu typu gatekeeper działa również obecnie w fail-open modelu. Ponieważ nie ma gwarancji, że usługa Gatekeeper reaguje na nasze wywołanie sieciowe, upewniamy 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.