Cvičení – přiřazení zásad ke clusteru Azure Kubernetes Services

Dokončeno

Teď jste připraveni nakonfigurovat zásady a iniciativy Azure pro váš cluster Azure Kubernetes Service (AKS).

V této lekci nasadíte pod nedodržující předpisy a použijete službu Azure Policy, která vynucuje použití jenom důvěryhodných registrů. Potom nasadíte další pod nedodržující předpisy, abyste viděli účinek zásad. Dozvíte se, jak řešit potíže a zjistit, proč se pody nevytvořily. Nasadíte také standardy zabezpečení podů clusteru Kubernetes pro iniciativu úloh založených na Linuxu .

Poznámka:

Toto cvičení není povinné. Pokud chcete absolvovat toto cvičení, budete muset před zahájením vytvořit předplatné Azure. Pokud nemáte účet Azure nebo ho v tuto chvíli nechcete vytvořit, můžete si přečíst pokyny, abyste porozuměli zobrazeným informacím.

Nasazení podu nedodržujícího předpisy do clusteru

Začneme nasazením image přímo z Docker Hubu do clusteru. Prvním krokem je přihlášení ke clusteru.

  1. V Cloud Shellu se přihlaste ke clusteru AKS.

    az aks get-credentials -n videogamecluster -g videogamerg 
    
  2. Spuštěním následujícího kódu vytvořte pod simple-nginx z Docker Hubu.

     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
    
  3. Spuštěním následujícího kódu nasaďte službu, aby se nasazení zpřístupnilo.

    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
    
  4. Zobrazí seznam všech nasazených služeb.

    kubectl get services
    
  5. Zkopírujte externí IP adresu služby simple-nginx a vložte ji do prohlížeče, abyste zjistili, jestli služba běží podle očekávání.

    Pokud je externí IP adresa uvedená jako <pending>, spusťte příkaz znovu. Přidělení veřejné IP adresy pro vaši úlohu nějakou dobu trvá.

    Snímek obrazovky se spuštěným serverem nginx, který pochází z Docker Hubu

Použití Azure Policy na cluster AKS

Úlohy jste úspěšně nasadili do clusteru, který nemá žádné vynucení zásad. Teď můžete do clusteru přidat zásadu a zjistit, jak to ovlivňuje.

Přiřazení zásady

Chcete zajistit, aby v clusteru byly povolené jenom image z určitých registrů. Potřebujete vytvořit novou definici zásady a pak ji přiřadit k oboru. V tomto případě je oborem naše skupina prostředků videogamerg . Zásady se dají vytvářet a přiřazovat na webu Azure Portal, v prostředí Azure PowerShell nebo v rozhraní příkazového řádku Azure. Toto cvičení vás provede vytvořením zásad na portálu.

Následující kroky vám pomůžou najít předdefinované definice zásad pro správu clusteru pomocí webu Azure Portal. V tomto případě používáte zásady "pouze povolené image".

  1. Přejděte na stránku Zásady na webu Azure Portal.

  2. V levém podokně stránky Azure Policy vyberte Definice.

  3. V rozevíracím seznamu Kategorie pomocí příkazu Vybrat vše zrušte zaškrtnutí filtru a pak vyberte Kubernetes.

    Snímek obrazovky znázorňující kubernetes vybraný pro kategorii

  4. Vyberte kontejnery clusteru Kubernetes, které by měly používat jenom definice zásad povolených imagí.

  5. Vyberte tlačítko Přiřadit.

  6. Nastavte obor na skupinu prostředků clusteru Kubernetes, který jste vytvořili, což je v tomto případě skupina prostředků videogamerg.

    Snímek obrazovky zobrazující zobrazení přiřazení zásad

  7. Do pole Povolené image image kontejneru zadejte následující pole a vyberte tlačítko Zkontrolovat a vytvořit.

.+\.azurecr\.io/.+$
  1. Vyberte tlačítko Vytvořit.

Teď, když je nová zásada povolená, můžete vybrat Přiřazení , abyste zobrazili přiřazenou zásadu a vybrali přiřazení zásad, které jste vytvořili.

snímek obrazovky zobrazující přiřazenou zásadu

Přiřazení zásad by mělo vypadat jako na následujícím obrázku. Efekt je nastavený tak, aby ve výchozím nastavení odepřel. To znamená, že v clusteru je možné nasadit jenom image hostované ve službě Azure Container Registry.

snímek obrazovky s podrobnostmi o přiřazení zásad

Přiřazení iniciativy zásad

Teď, když je zásada úspěšně přiřazená, přiřadíte před otestování zásad iniciativu. Iniciativa Azure Policy je kolekce definic služby Azure Policy nebo pravidel, které jsou seskupené k určitému cíli nebo účelu. Iniciativy Azure zjednodušují správu zásad tím, že seskupí sadu zásad dohromady, logicky jako jednu položku.

Iniciativy je možné přiřadit stejným způsobem, jakým jsou zásady přiřazeny. Podle těchto kroků přiřaďte iniciativu "Standardy zabezpečení podů clusteru Kubernetes pro úlohy založené na Linuxu".

  1. Vraťte se na stránku Zásady na webu Azure Portal.
  2. V levém podokně stránky Azure Policy vyberte Definice.
  3. V rozevíracím seznamu Kategorie pomocí příkazu Vybrat vše zrušte zaškrtnutí filtru a pak vyberte Kubernetes.
  4. Vyberte standardy zabezpečení podů clusteru Kubernetes pro definici iniciativy úloh založených na Linuxu . Chvíli si projděte různé zásady, které jsou součástí iniciativy.
  5. Vyberte tlačítko Přiřadit v levém horním rohu obrazovky.
  6. Nastavte obor na skupinu prostředků clusteru Kubernetes, který jste vytvořili, což je v tomto případě videogamerg. Vyplňte zbytek formuláře tak, jak jste to udělali v předchozím kroku, a vyberte Zkontrolovat a vytvořit.
  7. Vyberte tlačítko Vytvořit.

Tady můžete znovu najít přiřazení zásad kliknutím na Zásady a výběrem přiřazení. Kliknutím na přiřazení zásady, které jste vytvořili, se zobrazí, že efekt je v tomto případě nastavený na Audit.

Testování služby Azure Policy

Teď, když je k clusteru přiřazená zásada omezení, můžete spustit test, abyste zjistili, jestli zásady fungují. Abychom si ukázali, vytvoříme nové nasazení a podíváme se, jestli nasazení funguje. Začneme vytvořením nového souboru manifestu Kubernetes a jeho nasazením.

Důležité

Upozorňujeme, že platnost přiřazení zásad může trvat až 30 minut. Kvůli tomuto zpoždění může být ověření zásad úspěšné v následujících krocích a nasazení se nezdaří. Pokud k tomu dojde, povolte delší dobu a opakujte nasazení.

Spuštěním následujícího příkazu můžete zkontrolovat, jestli se přiřazení zásady projevilo.

kubectl get ConstraintTemplates

Měl by se zobrazit výsledek podobný následujícímu výstupu. Pokud se v seznamu zobrazí k8sazurecontainerallowedimages , víte, že vaše zásady platí.

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
  1. Pomocí následujícího kódu vytvořte další nginx nasazení a službu.

    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
    
  2. Vytvoření služby

    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
    
  3. Teď můžeme zkontrolovat, jestli je pod vytvořený.

    kubectl get pods
    

V následujícím výstupu se sice zdá, že se nasazení vytvoří, ale pod se nevytvořil. Zásada, kterou jste vytvořili, zablokovala nasazení. Pod, který byl vytvořen před přiřazením zásady, se však nezastavil. Zásady také nezabránily vytvoření služby. Pokud zkusíte otevřít externí IP adresu v prohlížeči, nezobrazí se žádná odpověď, která dále ukazuje, že nasazení nebylo úspěšné.

NAME                            READY   STATUS    RESTARTS   AGE
simple-nginx-66d884c498-msbpc   1/1     Running   0          63m

Diagnostika, proč se pod nenasadil

V předchozí části jsme si všimli, že druhý pod nebyl nasazený. V této části používáme příkazový řádek k diagnostice důvodů.

  1. Nejprve popíšeme nasazení. Vidíme, že replika je vytvořená, ale repliky se nepodařilo vytvořit.

    kubectl get replicasets
    

    Měl by se zobrazit výstup podobný následujícímu příkladu:

    NAME                             DESIRED   CURRENT   READY   AGE
    second-simple-nginx-64969b4566   1         0         0       8m45s
    simple-nginx-66d884c498          1         1         1       72m
    
  2. Dále popíšeme sadu replik, která selhala. Zkopírujte název repliky, který začíná second-simple-nginxna , aktualizujte následující příkaz s danou hodnotou a spusťte příkaz.

    kubectl describe replicaset <ReplicaSet name>
    
  3. Výstup příkazu ukazuje, že repliky selhaly kvůli zásadám.

    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.
    

Odstraňte nasazení a připravte se na další krok.

kubectl delete deployment second-simple-nginx

Opětovné nasazení podů pomocí image služby Azure Container Registry

Teď, když víte, že zásady brání vytváření imagí z centra Dockeru v clusteru na základě zásad. Zkusme znovu nasadit stejnou úlohu pomocí image ze služby Azure Container Registry (ACR). V této části vytvoříte službu Azure Container Registry. Potom zkopírujete image nginx z Centra Dockeru do nového registru a pokusíte se pod znovu nasadit z registru kontejneru. K vytvoření registru kontejneru používáme Azure CLI.

  1. Vraťte se do Cloud Shellu na webu Azure Portal a zadáním následujících příkazů vytvořte nový registr kontejneru.

    ACR_NAME=videogameacr$RANDOM
    az acr create --name $ACR_NAME \
                  --resource-group videogamerg \
                  --sku Premium
    
  2. Naimportujte image z Docker Hubu do nového registru kontejneru.

    az acr import --name $ACR_NAME --source docker.io/library/nginx:stable --image nginx:v1
    
  3. Zkontrolujte, jestli se image naimportovala. V seznamu výsledků by se měl zobrazit nginx.

    az acr repository list --name $ACR_NAME
    
  4. Propojte cluster AKS s registrem kontejneru, který jste vytvořili.

    az aks update -n videogamecluster -g videogamerg --attach-acr $ACR_NAME
    
  5. Teď vytvořte nasazení pomocí nově vytvořeného registru kontejneru spuštěním následujícího příkazu.

     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
    
  6. Získejte EXTERNÍ IP adresu, abyste mohli otestovat, jestli je služba spuštěná v clusteru.

    kubectl get pods
    kubectl get services
    

    Snímek obrazovky znázorňující, že se pody tentokrát nasadily

    Zkopírujte externí IP adresu a vložte ji do prohlížeče. Vidíte, že stránka se teď načte.

    sScreenshot showing that the pod was now successfullydeployed on the web browser.

Vynucení standardů pomocí zásad

V této lekci jste viděli, jak pomocí zásad zajistit, aby se vaše clustery nasazovaly jenom image ze služby Azure Container Registry. Také jste viděli, jak přidat jednu z integrovaných iniciativ, které vám můžou pomoct snadnou správu clusteru a zajistit jeho lepší zabezpečení. Viděli jste ale, že pod nasazený před přiřazením zásad je stále spuštěný. V další lekci zjistíte, jak můžeme zkontrolovat dodržování předpisů podů spuštěných v clusteru.