Ćwiczenie — konfigurowanie usługi Azure Policy dla platformy Kubernetes w klastrze usługi AKS
Usługa Azure Policy dla platformy Kubernetes pomaga organizacjom spełniać wymagania dotyczące ładu i prawa, implementować najlepsze rozwiązania i ustanawiać konwencje organizacyjne dla środowisk chmury.
Zespoły programistyczne w twojej firmie korzystają z usługi Azure Kubernetes Service (AKS) jako platformy programistycznej. Zdajesz sobie sprawę, że najlepszym sposobem zarządzania kosztami jest egzekwowanie reguł biznesowych, które definiują limity zasobów przeznaczonych na obciążenie. Chcesz upewnić się, że deweloperzy mogą wdrażać obciążenia tylko w ramach określonych limitów alokacji procesora CPU i pamięci. System musi zapobiegać obciążeniom przekraczającym te limity.
W tym ćwiczeniu włączysz Azure Policy dla AKS w Twoim klastrze i dodasz zasadę „limity zasobów procesora CPU i pamięci kontenerów klastra Kubernetes nie powinny przekraczać określonych limitów”. Następnie przetestujesz, czy polityka zabrania planowania obciążeń, które przekraczają jej parametry zasobów.
Włącz dostawców zasobów ContainerService i PolicyInsights
Zaloguj się do usługi Azure Cloud Shell przy użyciu konta platformy Azure. Wybierz wersję powłoki Bash Cloud Shell.
Usługa Azure Policy dla usługi AKS wymaga, aby klaster był w wersji 1.14 lub nowszej. Uruchom następujący skrypt, aby zweryfikować wersję klastra usługi AKS:
az aks list
Upewnij się, że zgłoszona wersja klastra to 1.14 lub nowsza.
Zarejestruj dostawcę usługi Azure Kubernetes Service, uruchamiając polecenie
az provider register
:az provider register --namespace Microsoft.ContainerService
Zarejestruj dostawcę usługi Azure Policy, uruchamiając polecenie
az provider register
:az provider register --namespace Microsoft.PolicyInsights
Włącz instalację dodatku, uruchamiając polecenie
az feature register
:az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
Sprawdź, czy rejestracja zakończyła się pomyślnie, wykonując zapytanie dotyczące tabeli feature-list. Użyj polecenia
az feature list
, aby uruchomić zapytanie. Rejestracja funkcji może potrwać kilka minut, więc należy okresowo sprawdzać wynik.az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')]. {Name:name,State:properties.state}"
Jeśli upłynął limit czasu sesji usługi Cloud Shell, możesz śledzić proces rejestracji w witrynie Azure Portal przy użyciu okienka dołączania w wersji zapoznawczej.
Uruchom polecenie
az provider register
, aby rozpropagować aktualizację po potwierdzeniu, że polecenie zapytania listy funkcji zawiera wartość "Zarejestrowano":az provider register -n Microsoft.ContainerService
Włączanie usługi Azure Policy w klastrze
Uruchom polecenie
az aks enable-addons
, aby włączyć dodatekazure-policy
dla klastra:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Sprawdź, czy zasobnik azure-policy jest zainstalowany w przestrzeni nazw
kube-system
i czy zasobnik strażnika jest zainstalowany w przestrzeni nazwgatekeeper-system
. W tym celu uruchom następujące poleceniakubectl get pods
:kubectl get pods -n kube-system
Dane wyjściowe powinny wyglądać podobnie do następujących:
NAME READY STATUS RESTARTS AGE azure-policy-78c8d74cd4-7fqn2 1/1 Running 0 12m azure-policy-webhook-545c898766-gsjrc 1/1 Running 0 12m ...
kubectl get pods -n gatekeeper-system
Dane wyjściowe powinny wyglądać podobnie do następujących:
NAME READY STATUS RESTARTS AGE gatekeeper-controller-manager-d5cd87796-5tmhq 1/1 Running 0 15m ...
Na koniec sprawdź, czy zainstalowano najnowszy dodatek, uruchamiając polecenie
az aks show
. To polecenie pobiera informacje o konfiguracji klastra.az aks show \ --resource-group $RESOURCE_GROUP\ --name $AKS_CLUSTER_NAME \ -o table --query "addonProfiles.azurepolicy"
Dane wyjściowe powinny wyglądać podobnie do następujących:
{ "config": null, "enabled": true, "identity": null }
Teraz możesz przełączyć się na portal Azure, aby skonfigurować zasadę o nazwie Limity zasobów procesora CPU i pamięci kontenerów klastra Kubernetes nie powinny przekraczać określonych limitów.
Przypisywanie wbudowanej definicji zasad
Aby skonfigurować nową usługę Azure Policy, użyj usługi Policy w witrynie Azure Portal.
Zaloguj się do portalu Azure.
Znajdź usługę zasad w portalu Azure. W tym celu na pasku wyszukiwania w górnej części portalu wyszukaj i wybierz pozycję Zasady.
Wybierz usługę Policy z listy usług, jak pokazano poniżej:
Pulpit nawigacyjny zasad otwiera się z przeglądem pokazującym wszystkie przypisane zasady, stan zasobów oraz to, jak zasady na nie wpływają. Jeśli nie przypisano żadnych zasad, pulpit nawigacyjny jest pusty.
W okienku menu po lewej stronie w obszarze Tworzeniewybierz pozycję Przypisania:
Przypomnij sobie z poprzedniego opisu, że masz dwie możliwości przypisania polityki: albo przypisujesz inicjatywę, albo politykę. Na górnym pasku menu wybierz Przypisz politykę:
Zostanie wyświetlone okno Przypisz Zasady.
Na karcie Podstawowe wprowadź następujące wartości dla każdego ustawienia, aby utworzyć swoją politykę.
Ustawienie Wartość Zakres Zakres Wybierz przycisk wielokropka. Pojawi się okienko Zakres. W subskrypcji wwybierz subskrypcję, która zawiera grupę zasobów. Dla grupy zasobów wybierz pozycję rg-akscostsaving, a następnie wybierz przycisk Wybierz. Wykluczenia Pozostaw puste. Podstawy Definicja zasad Wybierz przycisk wielokropka. Zostanie wyświetlone okienko Dostępne definicje. W polu wyszukaj przefiltruj zaznaczenie, wprowadzając procesora CPU. Na karcie Definicje zasad wybierz kontenery klastra kubernetes limity zasobów procesora i pamięci nie powinny przekraczać określonych limitów, a następnie wybierz pozycję Dodaj. Nazwa przypisania Zaakceptuj wartość domyślną. Opis Pozostaw puste. Wymuszanie zasad Upewnij się, że ta opcja jest ustawiona na wartość Włączone. Przypisane przez Zaakceptuj wartość domyślną. Oto przykład ukończonej karty Podstawy:
Wybierz kartę Parametry , aby określić parametry zasad.
Ustaw następujące wartości dla każdego z ustawień parametru:
Ustawienie Wartość Maksymalna dozwolona liczba jednostek procesora CPU Ustaw wartość na 200m. Polityka dopasowuje tę wartość do zarówno wartości żądania zasobu obciążenia, jak i wartości limitu obciążenia określonej w pliku manifestu obciążenia. Maksymalna dozwolona liczba bajtów pamięci Ustaw wartość na 256Mi. Zasady dopasowują tę wartość do wartości żądania zasobu dla obciążenia oraz wartości limitu dla obciążenia określonych w pliku manifestu obciążenia. Oto przykład ukończonej karty parametry :
Wybierz kartę Remediacja. Na tej karcie wybierzesz, jak nowa polityka wpływa na zasoby, które już istnieją. Domyślnie nowe zasady sprawdzają tylko nowo utworzone zasoby. Zachowaj standardową konfigurację domyślną.
Oto przykład ukończonej zakładki korygowania:
Wybierz kartę Przegląd + tworzenie. Przejrzyj wartości, które wybrałeś, a następnie wybierz opcję Utwórz.
Ważny
Jeśli używasz istniejącego klastra usługi AKS, zastosowanie przypisania zasad może potrwać około 15 minut.
Testowanie żądań zasobów
Ostatnim krokiem jest przetestowanie nowych zasad. Wdróż obciążenie testowe, korzystając z żądań zasobów i limitów, które naruszają nową politykę. Jeśli wszystko pójdzie poprawnie, serwer zwraca błąd informujący o odmowie zgodnie z polityką.
Otwórz Azure Cloud Shell i upewnij się, że wybrano wersję Bash usługi Cloud Shell.
Utwórz plik manifestu dla wdrożenia platformy Kubernetes przy użyciu zintegrowanego edytora. Wywołaj plik
test-policy.yaml
:code test-policy.yaml
Napiwek
Usługa Cloud Shell zawiera zintegrowany edytor plików. Edytor usługi Cloud Shell obsługuje funkcje, takie jak wyróżnianie języków, paleta poleceń i eksplorator plików. Aby uzyskać proste tworzenie i edytowanie plików, uruchom edytor, uruchamiając
code .
w terminalu usługi Cloud Shell. Ta akcja spowoduje otwarcie edytora z aktywnym katalogiem roboczym ustawionym w terminalu. Aby otworzyć plik manifestu bezpośrednio w celu szybkiego edytowania, uruchom poleceniecode test-policy.yaml
. Polecenie Ths otwiera edytor bez Eksploratora plików.Wklej następujący tekst do pliku:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 500m memory: 256Mi limits: cpu: 1000m memory: 500Mi
Naciśnij Ctrl+S, aby zapisać plik, a następnie naciśnij Ctrl+Q, aby zamknąć edytor.
Uruchom polecenie
kubectl apply
, aby zastosować konfigurację i wdrożyć aplikację w przestrzeni nazwcostsavings
:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Dane wyjściowe powinny wyglądać podobnie do następujących:
Error from server ( [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>) : error when creating "test-deploy.yml" : admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>
Zwróć uwagę na to, jak webhook przyjęcia,
validation.gatekeeper.sh
, odrzucił żądanie zaplanowania poda.Otwórz plik manifestu i napraw żądanie zasobu:
code test-policy.yaml
Zastąp tekst następującym tekstem:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 200m memory: 256Mi limits: cpu: 200m memory: 256Mi
Naciśnij Ctrl+S, aby zapisać plik, a następnie naciśnij Ctrl+Q, aby zamknąć edytor.
Uruchom polecenie
kubectl apply
, aby zastosować konfigurację i wdrożyć aplikację w przestrzeni nazwcostsavings
:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Uzyskasz następujące dane wyjściowe:
pod/nginx created
Pobierz zasobniki nowo utworzonych zasobników w przestrzeni nazw
costsavings
.kubectl get pods --namespace costsavings
W ciągu kilku sekund zasobniki przechodzą do stanu
Running
.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Naciśnij Ctrl+C, aby zatrzymać oglądanie, gdy zobaczysz uruchomione zasobniki.