Ćwiczenie — konfigurowanie usługi Azure Policy dla platformy Kubernetes w klastrze AKS
Usługa Azure Policy dla platformy Kubernetes ułatwia organizacji spełnienie wymagań dotyczących ładu, wymogów prawnych, implementacji najlepszych rozwiązań i ustanowienia konwencji organizacyjnych dla środowisk w chmurze.
Zespoły programistyczne w firmie korzystają z usługi Azure Kubernetes Service (AKS) jako platformy deweloperskiej. Zdajesz sobie sprawę, że najlepszym sposobem zarządzania kosztami jest wymuszanie reguł biznesowych, które definiują limity zasobów obciążenia. Chcesz się upewnić, że deweloperzy mogą wdrażać obciążenia tylko w określonych limitach przydziału procesora CPU i pamięci. System musi zapobiegać obciążeniom, które te limity przekraczają.
W tym ćwiczeniu włączysz usługę Azure Policy dla usługi AKS w klastrze i dodasz limity zasobów procesora CPU i pamięci kontenerów klastra Kubernetes, które nie powinny przekraczać określonych zasad limitów . Następnie przetestujesz, czy zasady nie zezwalają na planowanie obciążeń, które przekraczają parametry zasobów zasad.
Włączanie dostawców zasobów ContainerService i PolicyInsights
Zaloguj się do usługi Azure Cloud Shell przy użyciu konta platformy Azure. Wybierz usługę Cloud Shell w wersji Bash.
Usługa Azure Policy dla usługi AKS wymaga, aby klaster był w wersji 1.14 lub nowszej. Uruchom następujący skrypt, aby sprawdzić poprawność wersji klastra AKS:
az aks list
Upewnij się, że raportowaną wersją klastra jest wersja 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
az feature register
polecenie :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 sesja usługi Cloud Shell przekroczy limit czasu, możesz śledzić proces rejestracji w witrynie Azure Portal przy użyciu okienka podglądu dołączania.
az provider register
Uruchom polecenie , 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
, a zasobnik gatekeeper 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 jest zainstalowany najnowszy dodatek, uruchamiając polecenie
az aks show
. To polecenie umożliwia pobranie informacji 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ę do witryny Azure Portal, aby skonfigurować zasady o nazwie Kontenery klastra Kubernetes cpu i limity zasobów pamięci nie powinny przekraczać określonych limitów.
Przypisywanie wbudowanej definicji zasad
Nową usługę Azure Policy można skonfigurować przy użyciu usługi Policy w witrynie Azure Portal.
Zaloguj się w witrynie Azure Portal.
Znajdź usługę Policy w witrynie Azure Portal. W tym celu na pasku wyszukiwania w górnej części portalu wyszukaj i wybierz pozycję Zasady.
Z listy usług wybierz usługę Policy, jak pokazano tutaj:
Zostanie otwarty pulpit nawigacyjny usługi Policy z przeglądem pokazującym wszystkie przypisane zasady, stan zasobów i sposób, w jaki wpływają na nie zasady. Jeśli nie przypisano żadnych zasad, pulpit nawigacyjny jest pusty.
W okienku menu po lewej stronie w obszarze Tworzenie wybierz pozycję Przypisania:
Przypomnij sobie z poprzedniego opisu, że masz dwie opcje tworzenia przypisania zasad: przypisujesz inicjatywę lub zasady. Na górnym pasku menu wybierz pozycję Przypisz zasady:
Zostanie wyświetlone okienko Przypisywanie zasad .
Na karcie Podstawy wprowadź następujące wartości dla każdego ustawienia, aby utworzyć zasady.
Ustawienie Wartość Scope Zakres Wybierz przycisk wielokropka. Zostanie wyświetlone okienko Zakres . W obszarze subskrypcja wybierz subskrypcję, która zawiera grupę zasobów. W obszarze Grupa 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 odfiltruj zaznaczenie, wprowadzając wartość CPU. Na karcie Definicje zasad wybierz kontenery klastra Kubernetes cpu i limity zasobów pamięci nie powinny przekraczać określonych limitów, a następnie wybierz pozycję Dodaj. Nazwa przypisania Zaakceptuj wartość domyślną. opis Pozostaw puste. Egzekwowanie zasad Upewnij się, że ta opcja jest ustawiona na włączone. Przypisane przez Zaakceptuj wartość domyślną. Oto przykład wypełnionej karty Informacje podstawowe:
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. Zasady dopasują tę wartość zarówno do wartości żądania zasobu obciążenia, jak i wartości limitu obciążenia określonych w pliku manifestu obciążenia. Maksymalna dozwolona liczba bajtów pamięci Ustaw wartość na 256Mi. Zasady dopasują tę wartość zarówno do wartości żądania zasobu obciążenia, jak i wartości limitu obciążenia określonych w pliku manifestu obciążenia. Oto przykład wypełnionej karty Parametry:
Wybierz kartę Korygowanie . Na tej karcie wybierzesz, jak nowe zasady wpływają na zasoby, które już istnieją. Domyślnie nowe zasady sprawdzają tylko nowo utworzone zasoby. Zachowaj standardową konfigurację domyślną.
Oto przykład wypełnionej karty Korygowanie:
Wybierz kartę Przeglądanie i tworzenie . Przejrzyj wybrane wartości, a następnie wybierz pozycję Utwórz.
Ważne
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 przy użyciu żądań zasobów i limitów naruszających nowe zasady. Jeśli wszystko pójdzie poprawnie, serwer zwraca błąd informujący o odmowie przez zasady.
Otwórz usługę Azure Cloud Shell i upewnij się,że wybierasz usługę Cloud Shell w wersji Bash.
Użyj zintegrowanego edytora, aby utworzyć plik manifestu dla wdrożenia platformy Kubernetes. Wywołaj plik
test-policy.yaml
:code test-policy.yaml
Napiwek
Usługa Cloud Shell udostępnia 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 łatwo tworzyć i edytować pliki, uruchom edytor, uruchamiając polecenie
code .
w terminalu usługi Cloud Shell. Działanie to powoduje otwarcie edytora z aktywnym katalogiem roboczym ustawionym w terminalu. Aby bezpośrednio otworzyć plik manifestu w celu szybkiej edycji, uruchomcode test-policy.yaml
. To polecenie powoduje otwarcie edytora bez eksploratora plików.Wklej do tego pliku poniższy tekst:
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 klawisze Ctrl+S , aby zapisać plik, a następnie naciśnij klawisze Ctrl+Q , aby zamknąć edytor.
Uruchom polecenie ,
kubectl apply
aby zastosować konfigurację i wdrożyć aplikację wcostsavings
przestrzeni nazw: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ę, jak element webhook wpływu danych
validation.gatekeeper.sh
odrzucił żądanie zaplanowania zasobnika.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 klawisze Ctrl+S , aby zapisać plik, a następnie naciśnij klawisze Ctrl+Q , aby zamknąć edytor.
Uruchom polecenie ,
kubectl apply
aby zastosować konfigurację i wdrożyć aplikację wcostsavings
przestrzeni nazw: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
costsavings
przestrzeni nazw.kubectl get pods --namespace costsavings
W ciągu kilku sekund zasobniki przechodzą do
Running
stanu.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Naciśnij klawisze Ctrl+C , aby zatrzymać oglądanie po wyświetleniu uruchomionych zasobników.