Ćwiczenie — konfigurowanie usługi Azure Policy dla platformy Kubernetes w klastrze usługi AKS

Ukończone

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

  1. Zaloguj się do usługi Azure Cloud Shell przy użyciu konta platformy Azure. Wybierz wersję powłoki Bash Cloud Shell.

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

  3. Zarejestruj dostawcę usługi Azure Kubernetes Service, uruchamiając polecenie az provider register:

    az provider register --namespace Microsoft.ContainerService
    
  4. Zarejestruj dostawcę usługi Azure Policy, uruchamiając polecenie az provider register:

    az provider register --namespace Microsoft.PolicyInsights
    
  5. Włącz instalację dodatku, uruchamiając polecenie az feature register:

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  6. 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.

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

  1. Uruchom polecenie az aks enable-addons, aby włączyć dodatek azure-policy dla klastra:

    az aks enable-addons \
        --addons azure-policy \
        --name $AKS_CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP
    
  2. Sprawdź, czy zasobnik azure-policy jest zainstalowany w przestrzeni nazw kube-system i czy zasobnik strażnika jest zainstalowany w przestrzeni nazw gatekeeper-system. W tym celu uruchom następujące polecenia kubectl 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
    ...
    
  3. 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.

  1. Zaloguj się do portalu Azure.

  2. Znajdź usługę zasad w portalu Azure. W tym celu na pasku wyszukiwania w górnej części portalu wyszukaj i wybierz pozycję Zasady.

  3. Wybierz usługę Policy z listy usług, jak pokazano poniżej:

    Zrzut ekranu przedstawiający ogólne pole wyszukiwania w witrynie Azure Portal z wynikiem pokazującym usługę Azure Policy.

    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.

  4. W okienku menu po lewej stronie w obszarze Tworzeniewybierz pozycję Przypisania:

    Zrzut ekranu przedstawiający panel nawigacyjny usługi Zasad, który pokazuje lokalizację opcji Przypisania.

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

    Zrzut ekranu przedstawiający nową opcję przypisania zasad.

    Zostanie wyświetlone okno Przypisz Zasady.

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

    Zrzut ekranu przedstawiający informacje przechwycone w zakładce Podstawy.

  7. Wybierz kartę Parametry , aby określić parametry zasad.

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

    Zrzut ekranu przedstawiający informacje przechwycone na karcie Parametry.

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

    Zrzut ekranu przedstawiający informacje przechwycone na karcie Remediacja.

  10. 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ą.

  1. Otwórz Azure Cloud Shell i upewnij się, że wybrano wersję Bash usługi Cloud Shell.

  2. 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 polecenie code test-policy.yaml. Polecenie Ths otwiera edytor bez Eksploratora plików.

  3. 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
    
  4. Naciśnij Ctrl+S, aby zapisać plik, a następnie naciśnij Ctrl+Q, aby zamknąć edytor.

  5. Uruchom polecenie kubectl apply, aby zastosować konfigurację i wdrożyć aplikację w przestrzeni nazw costsavings:

    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.

  6. 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
    
  7. Naciśnij Ctrl+S, aby zapisać plik, a następnie naciśnij Ctrl+Q, aby zamknąć edytor.

  8. Uruchom polecenie kubectl apply, aby zastosować konfigurację i wdrożyć aplikację w przestrzeni nazw costsavings:

    kubectl apply \
    --namespace costsavings \
    -f test-policy.yaml
    

    Uzyskasz następujące dane wyjściowe:

    pod/nginx created
    
  9. 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
    
  10. Naciśnij Ctrl+C, aby zatrzymać oglądanie, gdy zobaczysz uruchomione zasobniki.