Ćwiczenie — przypisywanie zasad do klastra usług Azure Kubernetes Services
Teraz możesz skonfigurować zasady i inicjatywy platformy Azure dla klastra usługi Azure Kubernetes Service (AKS).
W tej lekcji wdrożysz niezgodny zasobnik i zastosujesz usługę Azure Policy, która wymusza korzystanie tylko z zaufanych rejestrów. Następnie wdrożysz inny niezgodny zasobnik, aby zobaczyć efekt działania Polityki. Poznasz kroki rozwiązywania problemów i dowiesz się, dlaczego zasobniki nie zostały utworzone. Wdrażasz również standardy ograniczonego zabezpieczenia zasobników klastra Kubernetes dla inicjatywy dotyczącej obciążeń opartych na systemie Linux.
Notatka
To ćwiczenie jest opcjonalne. Jeśli chcesz wykonać to ćwiczenie, przed rozpoczęciem musisz utworzyć subskrypcję platformy Azure. Jeśli nie masz konta platformy Azure lub nie chcesz go tworzyć w tej chwili, możesz zapoznać się z instrukcjami, aby zrozumieć prezentowane informacje.
Wdróż niezgodny pod w klastrze
Zaczynamy od wdrożenia obrazu bezpośrednio z usługi Docker Hub w klastrze. Pierwszym krokiem jest zalogowanie się do klastra.
W usłudze Cloud Shell zaloguj się do klastra usługi AKS.
az aks get-credentials -n videogamecluster -g videogamerg
Uruchom następujący kod, aby utworzyć pod simple-nginx z Docker Hub.
cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: simple-nginx labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: simple-nginx image: docker.io/library/nginx:stable resources: requests: cpu: 100m memory: 100Mi limits: cpu: 120m memory: 120Mi ports: - containerPort: 80 EOF
Uruchom następujący kod, aby wdrożyć usługę i udostępnić wdrożenie.
cat <<EOF | kubectl create -f - apiVersion: v1 kind: Service metadata: name: simple-nginx labels: app: nginx spec: type: LoadBalancer ports: - port: 80 selector: app: nginx EOF
Wyświetl listę wszystkich wdrożonych usług.
kubectl get services
Skopiuj zewnętrzny adres IP usługi simple-nginx i wklej go w przeglądarce, aby sprawdzić, czy usługa działa zgodnie z oczekiwaniami.
Jeśli zewnętrzny adres IP jest wymieniony jako
<pending>
, uruchom ponownie polecenie. Przydzielenie publicznego adresu IP dla zadania zajmuje trochę czasu.
Stosowanie usługi Azure Policy do klastra usługi AKS
Obciążenie zostało pomyślnie wdrożone w klastrze, który nie wymusza żadnych zasad. Teraz możesz dodać zasady do klastra i zobaczyć, jak to wpływa.
Przypisywanie zasad
Chcesz mieć pewność, że w klastrze są dozwolone tylko obrazy z określonych rejestrów. Musisz utworzyć nową definicję zasad, a następnie przypisać ją do zakresu. W tym przypadku zakresem jest nasza grupa zasobów videogamerg. Zasady można tworzyć i przypisywać za pośrednictwem witryny Azure Portal, programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure. To ćwiczenie przeprowadzi Cię przez proces tworzenia zasad w portalu.
Znajdź wbudowane definicje zasad do zarządzania klastrem przy użyciu witryny Azure Portal, wykonując następujące kroki. W takim przypadku stosujesz zasadę "dozwolone tylko obrazy".
Przejdź do strony polityki w portalu Azure.
W lewym panelu strony Azure Policy wybierz Definicje.
Z listy rozwijanej Kategoria użyj Wybierz wszystkie, aby wyczyścić filtr, a następnie wybierz pozycję Kubernetes.
Wybierz definicję zasad, zgodnie z którą kontenery klastra Kubernetes powinny używać tylko dozwolonych obrazów.
Wybierz przycisk Przypisz.
Ustaw zakres na grupę zasobów dla klastra Kubernetes, który utworzyłeś. W tym przypadku jest to grupa zasobów videogamerg.
Wprowadź następujące informacje w polu Dozwolony regex obrazu kontenera i wybierz przycisk Przejrzyj i utwórz
.+\.azurecr\.io/.+$
- Wybierz przycisk Utwórz.
Po włączeniu nowej polityki możesz wybrać Przydziały, aby wyświetlić przypisaną politykę i wybrać utworzone przydzielenie polityki.
Przypisanie zasad powinno wyglądać podobnie jak na poniższej ilustracji. Efekt jest domyślnie ustawiony na odmowę. Oznacza to, że w klastrze można wdrażać tylko obrazy hostowane w usłudze Azure Container Registry.
Przypisz inicjatywę polityki
Skoro Twoja polityka została pomyślnie przypisana, teraz przypisz inicjatywę, zanim przetestujesz polityki. Inicjatywa usługi Azure Policy to kolekcja definicji lub reguł usługi Azure Policy, które są grupowane razem w celu osiągnięcia określonego celu lub celu. Inicjatywy platformy Azure upraszczają zarządzanie zasadami, grupując zestaw zasad logicznie jako pojedynczy element.
Inicjatywy można przypisywać w taki sam sposób, w jaki są przypisywane zasady. Wykonaj następujące kroki, aby przypisać inicjatywę 'standardów zabezpieczeń z ograniczeniami dla zasobników klastra Kubernetes przeznaczonych dla obciążeń działających na Linuksie'.
- Wróć do strony zasad w witrynie Azure Portal.
- W okienku po lewej stronie usługi Azure Policy wybierz pozycję Definicje.
- Z listy rozwijanej Kategoria użyj Wybierz wszystkie, aby wyczyścić filtr, a następnie wybierz pozycję Kubernetes.
- Wybierz ograniczone standardy zabezpieczeń typu pod klastra Kubernetes dla obciążeń opartych na systemie Linux w definicji inicjatywy. Pośmiń trochę czasu, aby przejrzeć różne zasady, które są częścią inicjatywy.
- Wybierz przycisk Przypisz w lewym górnym rogu ekranu.
- Ustaw zakres na grupę zasobów klastra Kubernetes, który utworzyłeś, co w tym przypadku to videogamerg. Wypełnij pozostałą część formularza, tak jak w poprzednim kroku, a następnie wybierz pozycję Przejrzyj i utwórz.
- Wybierz przycisk Utwórz.
Tutaj możesz ponownie znaleźć przydział zasad, klikając pozycję Zasady i wybierając pozycję Przypisania. Kliknięcie utworzonego przypisania zasad pokazuje, że w tym przypadku efekt jest ustawiony na Inspekcja.
Testowanie usługi Azure Policy
Po przypisaniu zasad ograniczania do klastra możesz uruchomić test, aby sprawdzić, czy zasady działają. Aby zademonstrować, utwórzmy nowe wdrożenie i sprawdźmy, czy wdrożenie działa. Zaczynamy od utworzenia nowego pliku manifestu kubernetes i wdrożenia go.
Ważny
Należy pamiętać, że przypisanie zasad może zająć do 30 minut, zanim zacznie obowiązywać. Z powodu tego opóźnienia w poniższych krokach weryfikacja zasad może zakończyć się pomyślnie, a wdrożenie nie zakończy się niepowodzeniem. W takim przypadku należy zezwolić na dodatkowy czas i ponowić próbę wdrożenia.
Możesz sprawdzić, czy przypisanie zasad działa, uruchamiając następujące polecenie.
kubectl get ConstraintTemplates
Powinien zostać wyświetlony wynik podobny do poniższych danych wyjściowych. Jeśli na liście zobaczysz k8sazurecontainerallowedimages
, wiesz, że twoja polisa obowiązuje.
k8sazureallowedcapabilities 40m
k8sazureallowedseccomp 20m
k8sazureallowedusersgroups 40m
k8sazureblockautomounttoken 40m
k8sazureblockdefault 40m
k8sazureblockhostnamespace 40m
k8sazurecontainerallowedimages 40m
k8sazurecontainerallowedports 40m
k8sazurecontainerlimits 40m
k8sazurecontainernoprivilege 40m
k8sazurecontainernoprivilegeescalation 40m
k8sazuredefenderblockvulnerableimages 40m
k8sazuredisallowedcapabilities 40m
k8sazureenforceapparmor 40m
k8sazurehostfilesystem 40m
k8sazurehostnetworkingports 40m
k8sazureingresshttpsonly 40m
k8sazurereadonlyrootfilesystem 40m
k8sazureserviceallowedports 40m
k8sazurevolumetypes 20m
Utwórz kolejne
nginx
wdrożenie i usługę przy użyciu następującego kodu.cat <<EOF | kubectl create -f - apiVersion: apps/v1 kind: Deployment metadata: name: second-simple-nginx labels: app: second-nginx spec: selector: matchLabels: app: second-nginx template: metadata: labels: app: second-nginx spec: containers: - name: second-simple-nginx image: docker.io/library/nginx:stable resources: requests: cpu: 100m memory: 100Mi limits: cpu: 120m memory: 120Mi ports: - containerPort: 80 EOF
Tworzenie usługi
cat <<EOF | kubectl create -f - apiVersion: v1 kind: Service metadata: name: second-simple-nginx labels: app: second-nginx spec: type: LoadBalancer ports: - port: 80 selector: app: second-nginx EOF
Teraz możemy sprawdzić, czy pod został utworzony.
kubectl get pods
W poniższym wyniku, mimo że wdrożenie wygląda na utworzone, zasobnik nie zostaje utworzony. Utworzone zasady zablokowały wdrożenie. Jednak zasobnik utworzony przed przydzieleniem zasady nie został zatrzymany. Zasady nie uniemożliwiły również utworzenia usługi. Jeśli spróbujesz otworzyć EXTERNAL-IP w przeglądarce, nie otrzymasz odpowiedzi, co dodatkowo pokazuje, że wdrożenie nie powiodło się.
NAME READY STATUS RESTARTS AGE
simple-nginx-66d884c498-msbpc 1/1 Running 0 63m
Zdiagnozuj, dlaczego pod nie został wdrożony
W poprzedniej sekcji zauważyliśmy, że drugi moduł nie został wdrożony. W tej sekcji użyjemy wiersza polecenia, aby zdiagnozować przyczynę.
Najpierw opiszmy wdrożenie. Widzimy, że zestaw replik został utworzony, ale nie udało się utworzyć replik.
kubectl get replicasets
Powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:
NAME DESIRED CURRENT READY AGE second-simple-nginx-64969b4566 1 0 0 8m45s simple-nginx-66d884c498 1 1 1 72m
Następnie opisujemy nieudany ReplicaSet. Skopiuj nazwę ReplicaSet rozpoczynającego się od
second-simple-nginx
, zaktualizuj następujące polecenie przy użyciu tej wartości i uruchom polecenie.kubectl describe replicaset <ReplicaSet name>
Dane wyjściowe polecenia wykazały, że repliki nie powiodły się z powodu Polityki.
Warning FailedCreate 3m9s (x18 over 14m) replicaset-controller Error creating: admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-container-allowed-images-bcfbd5e1e78f7c8b4104] Container image docker.io/library/nginx:stable for container second-simple-nginx has not been allowed.
Usuń wdrożenie, aby przygotować się do następnego kroku.
kubectl delete deployment second-simple-nginx
Ponowne wdrażanie zasobników przy użyciu obrazu z Azure Container Registry
Teraz, gdy wiesz, że Polityka uniemożliwia tworzenie obrazów z Docker Hub w Twoim klastrze na podstawie Twojej Polityki. Spróbujmy ponownie wdrożyć to samo obciążenie przy użyciu obrazu z usługi Azure Container Registry (ACR). W tej sekcji utworzysz usługę Azure Container Registry. Następnie skopiujesz obraz nginx z centrum Docker do nowego rejestru i spróbujesz ponownie wdrożyć pod z rejestru kontenerów. Do utworzenia rejestru kontenerów używamy interfejsu wiersza polecenia platformy Azure.
Wróć do usługi Cloud Shell w witrynie Azure Portal i wprowadź następujące polecenia, aby utworzyć nowy rejestr kontenerów.
ACR_NAME=videogameacr$RANDOM az acr create --name $ACR_NAME \ --resource-group videogamerg \ --sku Premium
Zaimportuj obraz z usługi Docker Hub do nowego rejestru kontenerów.
az acr import --name $ACR_NAME --source docker.io/library/nginx:stable --image nginx:v1
Sprawdź, czy obraz został zaimportowany. Powinieneś zobaczyć nginx na liście wyników.
az acr repository list --name $ACR_NAME
Połącz klaster usługi AKS z utworzonym rejestrem kontenerów.
az aks update -n videogamecluster -g videogamerg --attach-acr $ACR_NAME
Teraz utwórz wdrożenie przy użyciu nowo utworzonego rejestru kontenerów, uruchamiając następujące polecenie.
cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: second-simple-nginx labels: app: second-nginx spec: selector: matchLabels: app: second-nginx template: metadata: labels: app: second-nginx spec: containers: - name: second-simple-nginx image: ${ACR_NAME}.azurecr.io/nginx:v1 resources: requests: cpu: 100m memory: 100Mi limits: cpu: 120m memory: 120Mi ports: - containerPort: 80 EOF
Pobierz EXTERNAL-IP aby sprawdzić, czy usługa jest uruchomiona w klastrze.
kubectl get pods kubectl get services
Skopiuj zewnętrzny adres IP i wklej go w przeglądarce. Zobaczysz, że strona zostanie załadowana.
Używanie zasad do wymuszania standardów
W tej lekcji pokazano, jak używać zasad w celu zapewnienia, że klaster zezwala na wdrażanie tylko obrazów z usługi Azure Container Registry. Pokazano również, jak dodać jedną z wbudowanych inicjatyw, które mogą ułatwić zarządzanie klastrem i zwiększyć bezpieczeństwo. Jednak widać, że zasobnik, który został wdrożony zanim polityka została przypisana, jest nadal uruchomiony. W następnej jednostce zobaczysz, jak można sprawdzić zgodność zasobników uruchomionych w klastrze.