Ć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 zasad. Poznasz kroki rozwiązywania problemów i dowiesz się, dlaczego zasobniki nie są tworzone. Wdrażasz również standardy z ograniczeniami zabezpieczeń zasobników klastra Kubernetes dla inicjatywy obciążeń opartych na systemie Linux.
Uwaga
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.
Wdrażanie niezgodnego zasobnika 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ć prosty zasobnik nginx z usługi 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ę w celu uwidocznienia wdrożenia.
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. Przydzielanie publicznego adresu IP dla obciążenia 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 ma na nim żadnych wymuszania 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 zasady "tylko dozwolone obrazy".
Przejdź do strony Zasady w witrynie Azure Portal.
W okienku po lewej stronie usługi Azure Policy wybierz pozycję Definicje.
Z listy rozwijanej Kategoria użyj pozycji Wybierz wszystko , aby wyczyścić filtr, a następnie wybierz pozycję Kubernetes.
Wybierz kontenery klastra Kubernetes powinny używać tylko dozwolonej definicji zasad obrazów.
Wybierz przycisk Przypisz.
Ustaw zakres na grupę zasobów utworzonego klastra Kubernetes, czyli grupę zasobów videogamerg.
Wprowadź następujące informacje w polu Dozwolony rejestr obrazu kontenera i wybierz przycisk Przejrzyj i utwórz
.+\.azurecr\.io/.+$
- Zaznacz przycisk Utwórz.
Teraz, gdy nowe zasady są włączone, możesz wybrać pozycję Przypisania , aby wyświetlić przypisane zasady i wybrać utworzone przypisanie zasad.
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.
Przypisywanie inicjatywy zasad
Po pomyślnym przypisaniu zasad należy przypisać inicjatywę przed przetestowaniem zasad. 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ę "Standardy z ograniczeniami zabezpieczeń zasobników klastra Kubernetes dla obciążeń opartych na systemie Linux".
- Wróć do strony Zasady w witrynie Azure Portal.
- W okienku po lewej stronie usługi Azure Policy wybierz pozycję Definicje.
- Z listy rozwijanej Kategoria użyj pozycji Wybierz wszystko , aby wyczyścić filtr, a następnie wybierz pozycję Kubernetes.
- Wybierz definicję inicjatywy inicjatywy Zasobniki klastra Kubernetes z ograniczeniami zabezpieczeń dla obciążeń opartych na systemie Linux. 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 utworzonego klastra Kubernetes, co w tym przypadku jest videogamerg. Wypełnij pozostałą część formularza, tak jak w poprzednim kroku, a następnie wybierz pozycję Przejrzyj i utwórz.
- Zaznacz przycisk Utwórz.
Tutaj możesz ponownie znaleźć przypisanie zasad, klikając pozycję Zasady i wybierając pozycję Przypisania. Kliknięcie utworzonego przypisania zasad pokazuje, że efekt jest ustawiony na Wartość Inspekcja w tym przypadku.
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żne
Należy pamiętać, że zastosowanie przypisań zasad może potrwać do 30 minut. 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 poczekać, a następnie 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 widzisz k8sazurecontainerallowedimages
na liście, wiesz, że zasady obowiązują.
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 zasobnik został utworzony.
kubectl get pods
W poniższych danych wyjściowych, mimo że zostanie utworzone wdrożenie, zasobnik nie zostanie utworzony. Utworzone zasady zablokowały wdrożenie. Jednak zasobnik utworzony przed przypisaniem zasad nie został zatrzymany. Zasady nie uniemożliwiły również utworzenia usługi. Jeśli spróbujesz otworzyć zewnętrzny adres 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
Diagnozowanie, dlaczego zasobnik nie został wdrożony
W poprzedniej sekcji zauważyliśmy, że drugi zasobnik nie został wdrożony. W tej sekcji użyjemy wiersza polecenia, aby zdiagnozować przyczynę.
Najpierw opiszmy wdrożenie. Widzimy, że zestaw replik jest tworzony, ale nie można 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 opiszemy zestaw replik, który zakończył się niepowodzeniem. Skopiuj nazwę zestawu replicaSet rozpoczynającego się od
second-simple-nginx
, zaktualizuj następujące polecenie za pomocą tej wartości i uruchom polecenie .kubectl describe replicaset <ReplicaSet name>
Dane wyjściowe polecenia pokazują, że repliki nie powiodły się z powodu zasad.
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 usługi Azure Container Registry
Teraz, gdy wiesz, że zasady uniemożliwiają tworzenie obrazów z centrum Platformy Docker w klastrze na podstawie zasad. 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 Platformy Docker do nowego rejestru i spróbujesz ponownie wdrożyć zasobnik 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. Na liście wyników powinien zostać wyświetlony ciąg nginx.
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 adres 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 przed przypisaną zasadą, jest nadal uruchomiony. W następnej lekcji zobaczysz, jak możemy sprawdzić zgodność zasobników uruchomionych w klastrze.