Oefening: een beleid toewijzen aan een Azure Kubernetes Services-cluster
U bent nu klaar om Azure-beleid en -initiatieven te configureren voor uw AKS-cluster (Azure Kubernetes Service).
In deze eenheid implementeert u een niet-compatibele pod en past u een Azure Policy toe waarmee het gebruik van alleen vertrouwde registers wordt afgedwongen. Vervolgens implementeert u een andere niet-compatibele pod om het effect van het beleid te bekijken. U leert de stappen voor het oplossen van problemen en waarom de pods niet worden gemaakt. U implementeert ook de beperkte beveiligingsstandaarden voor kubernetes-clusters voor linux-workloads .
Notitie
Deze oefening is optioneel. Als u deze oefening wilt voltooien, moet u een Azure-abonnement maken voordat u begint. Als u geen Azure-account hebt of als u er op dit moment geen wilt maken, kunt u de instructies doorlezen zodat u de informatie begrijpt die wordt gepresenteerd.
Een niet-compatibele pod implementeren in het cluster
We beginnen met het implementeren van een installatiekopieën rechtstreeks vanuit Docker Hub in het cluster. De eerste stap is het aanmelden bij het cluster.
Meld u in Cloud Shell aan bij het AKS-cluster.
az aks get-credentials -n videogamecluster -g videogamerg
Voer de volgende code uit om een simple-nginx-pod te maken vanuit 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
Voer de volgende code uit om de service te implementeren om de implementatie beschikbaar te maken.
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
Alle geïmplementeerde services weergeven.
kubectl get services
Kopieer het externe IP-adres van de simple-nginx-service en plak deze in uw browser om te zien of de service wordt uitgevoerd zoals verwacht.
Als het externe IP-adres wordt vermeld als
<pending>
, voert u de opdracht opnieuw uit. Het duurt even om een openbaar IP-adres voor uw workload toe te wijzen.
Azure Policy toepassen op het AKS-cluster
U hebt uw workload geïmplementeerd op een cluster waarvoor geen beleids afdwinging is toegepast. U kunt nu een beleid toevoegen aan het cluster en zien hoe dit van invloed is op het cluster.
Een beleid toewijzen
U wilt ervoor zorgen dat alleen installatiekopieën van bepaalde registers zijn toegestaan in het cluster. U moet een nieuwe beleidsdefinitie maken en deze vervolgens toewijzen aan een bereik. In dit geval is het bereik onze videogamerg-resourcegroep . Beleidsregels kunnen worden gemaakt en toegewezen via Azure Portal, Azure PowerShell of Azure CLI. In deze oefening gaat u een beleidsregel maken in de portal.
Zoek de ingebouwde beleidsdefinities voor het beheren van uw cluster met behulp van Azure Portal met de volgende stappen. In dit geval past u het beleid 'alleen toegestane installatiekopieën' toe.
Ga naar de pagina Beleid in Azure Portal.
Selecteer Definities in het linkerdeelvenster van de pagina Azure Policy.
Gebruik alles selecteren in de vervolgkeuzelijst Categorie om het filter te wissen en selecteer vervolgens Kubernetes.
Selecteer de Kubernetes-clustercontainers mogen alleen toegestane installatiekopieënbeleidsdefinitie gebruiken.
Selecteer de knop Toewijzen .
Stel het bereik in op de resourcegroep van het Kubernetes-cluster dat u hebt gemaakt, wat in dit geval de videogamerg-resourcegroep is.
Voer het volgende in het regex-veld toegestane containerinstallatiekopie in en selecteer de knop Beoordelen en maken
.+\.azurecr\.io/.+$
- Selecteer de knop Maken.
Nu het nieuwe beleid is ingeschakeld, kunt u Toewijzingen selecteren om het toegewezen beleid weer te geven en de beleidstoewijzing te selecteren die u hebt gemaakt.
Uw beleidstoewijzing moet eruitzien als in de volgende afbeelding. Het effect is standaard ingesteld op weigeren. Dit betekent dat alleen installatiekopieën die worden gehost in Azure Container Registry kunnen worden geïmplementeerd in het cluster.
Een beleidsinitiatief toewijzen
Nu uw beleid is toegewezen, wijst u een initiatief toe voordat u het beleid test. Een Azure Policy-initiatief is een verzameling Azure Policy-definities of -regels die zijn gegroepeerd naar een specifiek doel of doel. Azure-initiatieven vereenvoudigen het beheer van uw beleid door een set beleidsregels samen te groeperen, logisch, als één item.
Initiatieven kunnen op dezelfde manier worden toegewezen als aan beleidsregels. Volg deze stappen om het initiatief 'Kubernetes-clusterpodbeveiligingsstandaarden voor op Linux gebaseerde workloads' toe te wijzen.
- Ga terug naar de pagina Beleid in Azure Portal.
- Selecteer Definities in het linkerdeelvenster van de pagina Azure Policy.
- Gebruik alles selecteren in de vervolgkeuzelijst Categorie om het filter te wissen en selecteer vervolgens Kubernetes.
- Selecteer de beperkte beveiligingsstandaarden voor Kubernetes-clusterpods voor initiatiefdefinities voor Linux-workloads . Neem even de tijd om de verschillende beleidsregels te bekijken die deel uitmaken van het initiatief.
- Selecteer de knop Toewijzen in de linkerbovenhoek van het scherm.
- Stel het bereik in op de resourcegroep van het Kubernetes-cluster dat u hebt gemaakt, wat in dit geval de videogamerg is. Vul de rest van het formulier in zoals u in de vorige stap hebt gedaan en selecteer Beoordelen en maken.
- Selecteer de knop Maken.
Hier vindt u de beleidstoewijzing opnieuw door op Beleid te klikken en Toewijzingen te selecteren. Als u op de beleidstoewijzing klikt die u hebt gemaakt, ziet u dat het effect is ingesteld op Controleren in dit geval.
Azure Policy testen
Nu het beperkend beleid is toegewezen aan het cluster, kunt u een test uitvoeren om te zien of het beleid werkt. Laten we een nieuwe implementatie maken om te zien of de implementatie werkt. We beginnen met het maken van een nieuw kubernetes-manifestbestand en het implementeren ervan.
Belangrijk
Houd er rekening mee dat het tot 30 minuten kan duren voordat de beleidstoewijzingen van kracht zijn. Vanwege deze vertraging kan de beleidsvalidatie in de volgende stappen slagen en mislukt de implementatie niet. Als dit gebeurt, moet u even wacht en de implementatie opnieuw uitvoeren.
U kunt controleren of de beleidstoewijzing van kracht is door de volgende opdracht uit te voeren.
kubectl get ConstraintTemplates
Als het goed is, ziet u een resultaat dat lijkt op de volgende uitvoer. Als u in de lijst ziet k8sazurecontainerallowedimages
, weet u dat uw beleid van kracht is.
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
Maak een andere
nginx
implementatie en service met behulp van de volgende code.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
De service maken
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
Nu kunnen we controleren of de pod is gemaakt.
kubectl get pods
In de volgende uitvoer, ook al lijkt de implementatie te worden gemaakt, wordt de pod niet gemaakt. Het beleid dat u hebt gemaakt, heeft de implementatie geblokkeerd. De pod die is gemaakt voordat het beleid werd toegewezen, is echter niet gestopt. Het beleid heeft ook niet voorkomen dat de service wordt gemaakt. Als u het EXTERNE IP-adres probeert te openen in een browser, krijgt u geen antwoord, wat verder laat zien dat de implementatie niet is geslaagd.
NAME READY STATUS RESTARTS AGE
simple-nginx-66d884c498-msbpc 1/1 Running 0 63m
Vaststellen waarom de pod niet is geïmplementeerd
In de vorige sectie hebben we gemerkt dat de tweede pod niet is geïmplementeerd. In deze sectie gebruiken we de opdrachtregel om te diagnosticeren waarom.
Laten we eerst de implementatie beschrijven. We zien dat de ReplicaSet is gemaakt, maar dat de replica's niet konden worden gemaakt.
kubectl get replicasets
U zou een uitvoer moeten krijgen die vergelijkbaar is met het volgende voorbeeld:
NAME DESIRED CURRENT READY AGE second-simple-nginx-64969b4566 1 0 0 8m45s simple-nginx-66d884c498 1 1 1 72m
Vervolgens beschrijven we de mislukte ReplicaSet. Kopieer de naam van de ReplicaSet die begint met
second-simple-nginx
, werk de volgende opdracht bij met die waarde en voer de opdracht uit.kubectl describe replicaset <ReplicaSet name>
In de uitvoer van de opdracht ziet u dat de replica's zijn mislukt vanwege het beleid.
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.
Verwijder de implementatie om de volgende stap voor te bereiden.
kubectl delete deployment second-simple-nginx
De pods opnieuw implementeren met behulp van een Azure Container Registry-installatiekopie
Nu u weet dat het beleid verhindert dat installatiekopieën van docker-hub worden gemaakt in uw cluster op basis van uw beleid. We gaan proberen om dezelfde workload opnieuw te implementeren met behulp van een installatiekopie uit Azure Container Registry (ACR). In deze sectie maakt u een Azure Container Registry. Vervolgens kopieert u de nginx-installatiekopie van Docker Hub naar het nieuwe register en probeert u de pod opnieuw te implementeren vanuit uw containerregister. We gebruiken Azure CLI om het containerregister te maken.
Ga terug naar Cloud Shell in Azure Portal en voer de volgende opdrachten in om een nieuw containerregister te maken.
ACR_NAME=videogameacr$RANDOM az acr create --name $ACR_NAME \ --resource-group videogamerg \ --sku Premium
Importeer de installatiekopieën uit Docker Hub naar uw nieuwe containerregister.
az acr import --name $ACR_NAME --source docker.io/library/nginx:stable --image nginx:v1
Controleer of de installatiekopieën zijn geïmporteerd. U ziet nginx in de lijst met resultaten.
az acr repository list --name $ACR_NAME
Koppel uw AKS-cluster aan het containerregister dat u hebt gemaakt.
az aks update -n videogamecluster -g videogamerg --attach-acr $ACR_NAME
Maak nu de implementatie met behulp van het zojuist gemaakte containerregister door de volgende opdracht uit te voeren.
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
Haal het EXTERNE IP-adres op, zodat u kunt testen of de service wordt uitgevoerd in het cluster.
kubectl get pods kubectl get services
Kopieer het externe IP-adres en plak het in de browser. U ziet dat de pagina nu wordt geladen.
Beleid gebruiken om standaarden af te dwingen
In deze les hebt u gezien hoe u beleidsregels kunt gebruiken om ervoor te zorgen dat uw cluster alleen installatiekopieën van Azure Container Registry kan implementeren. U hebt ook gezien hoe u een van de ingebouwde initiatieven toevoegt waarmee u uw cluster eenvoudig kunt beheren en het beter kunt beveiligen. U hebt echter gezien dat de pod die is geïmplementeerd voordat het beleid werd toegewezen nog steeds wordt uitgevoerd. In de volgende les ziet u hoe we de naleving van pods die op het cluster worden uitgevoerd, kunnen controleren.