Cvičení – přiřazení zásad ke clusteru Azure Kubernetes Services
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.
V Cloud Shellu se přihlaste ke clusteru AKS.
az aks get-credentials -n videogamecluster -g videogamerg
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
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
Zobrazí seznam všech nasazených služeb.
kubectl get services
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á.
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".
Přejděte na stránku Zásady na webu Azure Portal.
V levém podokně stránky Azure Policy vyberte Definice.
V rozevíracím seznamu Kategorie pomocí příkazu Vybrat vše zrušte zaškrtnutí filtru a pak vyberte Kubernetes.
Vyberte kontejnery clusteru Kubernetes, které by měly používat jenom definice zásad povolených imagí.
Vyberte tlačítko Přiřadit.
Nastavte obor na skupinu prostředků clusteru Kubernetes, který jste vytvořili, což je v tomto případě skupina prostředků videogamerg.
Do pole Povolené image image kontejneru zadejte následující pole a vyberte tlačítko Zkontrolovat a vytvořit.
.+\.azurecr\.io/.+$
- 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.
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.
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".
- Vraťte se na stránku Zásady na webu Azure Portal.
- V levém podokně stránky Azure Policy vyberte Definice.
- V rozevíracím seznamu Kategorie pomocí příkazu Vybrat vše zrušte zaškrtnutí filtru a pak vyberte Kubernetes.
- 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.
- Vyberte tlačítko Přiřadit v levém horním rohu obrazovky.
- 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.
- 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
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
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
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ů.
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
Dále popíšeme sadu replik, která selhala. Zkopírujte název repliky, který začíná
second-simple-nginx
na , aktualizujte následující příkaz s danou hodnotou a spusťte příkaz.kubectl describe replicaset <ReplicaSet name>
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.
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
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
Zkontrolujte, jestli se image naimportovala. V seznamu výsledků by se měl zobrazit nginx.
az acr repository list --name $ACR_NAME
Propojte cluster AKS s registrem kontejneru, který jste vytvořili.
az aks update -n videogamecluster -g videogamerg --attach-acr $ACR_NAME
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
Získejte EXTERNÍ IP adresu, abyste mohli otestovat, jestli je služba spuštěná v clusteru.
kubectl get pods kubectl get services
Zkopírujte externí IP adresu a vložte ji do prohlížeče. Vidíte, že stránka se teď načte.
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.