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

Ukończone

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

  1. Zaloguj się do usługi Azure Cloud Shell przy użyciu konta platformy Azure. Wybierz usługę Cloud Shell w wersji Bash.

  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 sprawdzić poprawność wersji klastra AKS:

    az aks list
    

    Upewnij się, że raportowaną wersją klastra jest wersja 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 az feature register polecenie :

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

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

  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, a zasobnik gatekeeper 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 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.

  1. Zaloguj się w witrynie Azure Portal.

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

  3. Z listy usług wybierz usługę Policy, jak pokazano tutaj:

    Screenshot of the general Azure portal search box with a result that shows the Azure Policy service.

    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.

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

    Screenshot of the Policy service navigation panel that shows the location of the Assignments option.

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

    Screenshot that shows the new policy assignment option.

    Zostanie wyświetlone okienko Przypisywanie zasad .

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

    Screenshot that shows the information captured in the Basics tab.

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

    Screenshot that shows the information captured in the Parameters tab.

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

    Screenshot that shows the information captured in the Remediation tab.

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

  1. Otwórz usługę Azure Cloud Shell i upewnij się,że wybierasz usługę Cloud Shell w wersji Bash.

  2. 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, uruchom code test-policy.yaml. To polecenie powoduje otwarcie edytora bez eksploratora plików.

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

  5. Uruchom polecenie , kubectl apply aby zastosować konfigurację i wdrożyć aplikację w costsavings 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.

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

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

    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 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
    
  10. Naciśnij klawisze Ctrl+C , aby zatrzymać oglądanie po wyświetleniu uruchomionych zasobników.