Exercício – Configurar o Azure Policy para o Kubernetes num cluster do AKS
O Azure Policy para o Kubernetes ajuda as organizações a cumprir os requisitos legais e de governação, implementar melhores práticas e estabelecer normas organizacionais para ambientes de cloud.
As equipas de desenvolvimento da sua empresa estão a adotar o Azure Kubernetes Service (AKS) como uma plataforma de programação. Você percebe que a melhor maneira de gerenciar custos é aplicando regras de negócios que definem limites de recursos de carga de trabalho. Quer garantir que os programadores podem implementar cargas de trabalho apenas dentro de limites específicos da CPU e alocação de memória. O sistema tem de impedir as cargas de trabalho que excedam esses limites.
Neste exercício, você habilitará a Política do Azure para AKS em seu cluster e adicionará os limites de recursos de CPU e memória dos contêineres de cluster do Kubernetes que não devem exceder a política de limites especificados. Em seguida, você testará se a política nega o agendamento de cargas de trabalho que excedem os parâmetros de recursos da política.
Ativar os fornecedores de recursos ContainerService e PolicyInsights
Inicie sessão no Azure Cloud Shell com a sua conta do Azure. Selecione a versão Bash do Cloud Shell.
O Azure Policy para o AKS requer a versão do cluster 1.14 ou posterior. Execute o seguinte script para validar a versão de cluster do AKS:
az aks list
Confirme que a versão do cluster reportada é a 1.14 ou posterior.
Registe o fornecedor do Azure Kubernetes Service ao executar o comando
az provider register
:az provider register --namespace Microsoft.ContainerService
Registe o fornecedor do Azure Policy ao executar o comando
az provider register
:az provider register --namespace Microsoft.PolicyInsights
Habilite a instalação do complemento executando o
az feature register
comando:az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
Verifique se o registro foi bem-sucedido consultando a tabela de lista de recursos. Utilize o comando
az feature list
para executar a consulta. O registro do recurso pode levar vários minutos para ser concluído, então você tem que verificar o resultado periodicamente.az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')]. {Name:name,State:properties.state}"
Se a sessão do Cloud Shell exceder o limite de tempo, poderá controlar o processo de registo através do portal do Azure no painel de inclusão de pré-visualização.
Execute o comando para propagar a atualização depois de confirmar que o
az provider register
comando de consulta de lista de recursos mostra 'Registrado':az provider register -n Microsoft.ContainerService
Habilitar a Política do Azure em seu cluster
Execute o comando
az aks enable-addons
para ativar o suplementoazure-policy
do cluster:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Verifique se o pod azure-policy está instalado no espaço de nomes
kube-system
e se o pod gatekeeper está instalado no espaço de nomesgatekeeper-system
. Para tal, execute os seguintes comandoskubectl get pods
:kubectl get pods -n kube-system
Sua saída deve ser semelhante à seguinte:
NAME READY STATUS RESTARTS AGE azure-policy-78c8d74cd4-7fqn2 1/1 Running 0 12m azure-policy-webhook-545c898766-gsjrc 1/1 Running 0 12m ...
kubectl get pods -n gatekeeper-system
Sua saída deve ser semelhante à seguinte:
NAME READY STATUS RESTARTS AGE gatekeeper-controller-manager-d5cd87796-5tmhq 1/1 Running 0 15m ...
Por fim, verifique se o suplemento mais recente está instalado ao executar o comando
az aks show
. Este comando obtém as informações de configuração do cluster.az aks show \ --resource-group $RESOURCE_GROUP\ --name $AKS_CLUSTER_NAME \ -o table --query "addonProfiles.azurepolicy"
Sua saída deve ser semelhante à seguinte:
{ "config": null, "enabled": true, "identity": null }
Agora você está pronto para alternar para o portal do Azure para configurar a política chamada Kubernetes, contêineres de cluster, os limites de recursos de CPU e memória não devem exceder os limites especificados.
Atribuir uma definição de política incorporada
Utilize o serviço Policy no portal do Azure para configurar o novo Azure Policy.
Inicie sessão no portal do Azure.
Localize o serviço Policy no portal do Azure. Para isso, na barra de pesquisa na parte superior do portal, pesquise e selecione Política.
Selecione o serviço Policy na lista de serviços, como indicado aqui:
O dashboard do Policy será aberto com uma descrição geral que mostra todas as políticas atribuídas, o estado dos recursos e como as políticas os afetam. Se você não tiver atribuído nenhuma política, o painel estará vazio.
No painel de menu esquerdo, em Criação, selecione Atribuições:
Lembre-se, a partir de nossa descrição anterior, de que você tem duas opções para criar uma atribuição de política: você atribui uma iniciativa ou uma política. Na barra de menu superior, selecione Atribuir política:
O painel Atribuir política é exibido.
Na guia Noções básicas, insira os seguintes valores para cada configuração para criar sua política.
Definição valor Scope Âmbito Selecione o botão de reticências. O painel Escopo é exibido. Em subscrição, selecione a subscrição que contém o seu grupo de recursos. Para Grupo de Recursos, selecione rg-akscostsaving, em seguida, selecione o botão Selecionar. Exclusões Deixe vazio. Noções básicas Definição de política Selecione o botão de reticências. O painel Definições disponíveis é exibido. Na caixa Pesquisar, filtre a seleção inserindo CPU. Na guia Definições de Política , selecione os limites de recursos de CPU e memória dos contêineres de cluster do Kubernetes que não devem exceder os limites especificados e selecione Adicionar. Nome da atribuição Aceitar padrão. Description Deixe vazio. Imposição de políticas Certifique-se de que esta opção está definida como Ativado. Atribuído por Aceitar padrão. Veja a seguir um exemplo do separador Básico completo:
Selecione o separador Parâmetros para especificar os parâmetros da política.
Defina os seguintes valores para cada uma das configurações de parâmetro:
Definição valor Máx. unidades CPU permitidas Defina o valor como 200m. A política faz corresponder este valor ao valor do pedido de recursos da carga de trabalho e ao valor limite da carga de trabalho especificados no ficheiro de manifesto da carga de trabalho. Máx. bytes de memória permitidos Defina o valor como 256Mi. A política faz corresponder este valor ao valor do pedido de recursos da carga de trabalho e ao valor limite da carga de trabalho especificados no ficheiro de manifesto da carga de trabalho. Veja a seguir um exemplo do separador Parâmetros completo:
Selecione a guia Remediação . Nesta guia, você selecionará como a nova política afeta os recursos já existentes. Por padrão, a nova política verifica apenas os recursos recém-criados. Mantenha a configuração padrão padrão.
Veja a seguir um exemplo do separador Remediação completo:
Selecione o separador Rever + criar . Reveja os valores que escolheu e, em seguida, selecione Criar.
Importante
Se você estiver usando um cluster AKS existente, a atribuição de política pode levar cerca de 15 minutos para ser aplicada.
Testar os pedidos de recurso
O último passo é testar a nova política. Implante sua carga de trabalho de teste com solicitações de recursos e limites que violam a nova política. Se tudo correr corretamente, o servidor retornará um erro informando negado pela política.
Abra o Azure Cloud Shell e confirme que seleciona a versão Bash do Cloud Shell.
Crie um ficheiro de manifesto para a implementação do Kubernetes através do editor integrado. Denomine o ficheiro
test-policy.yaml
:code test-policy.yaml
Gorjeta
O Cloud Shell inclui um editor de ficheiros integrado. O editor do Cloud Shell suporta recursos como realce de idioma, paleta de comandos e um explorador de arquivos. Para criação e edição simples de arquivos, inicie o editor executando
code .
no terminal Cloud Shell. Esta ação abre o editor com o diretório de trabalho ativo definido no terminal. Para abrir o ficheiro de manifesto diretamente para edição rápida, executecode test-policy.yaml
. O comando abre o editor sem o explorador de ficheiros.Cole o seguinte texto no ficheiro:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 500m memory: 256Mi limits: cpu: 1000m memory: 500Mi
Prima Ctrl+S para guardar o ficheiro e, em seguida, prima Ctrl+Q para fechar o editor.
Execute o comando para aplicar a configuração e implantar o
kubectl apply
aplicativo nocostsavings
namespace:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Sua saída deve ser semelhante à seguinte:
Error from server ( [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>) : error when creating "test-deploy.yml" : admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>
Repare como o webhook de admissão,
validation.gatekeeper.sh
, negou o pedido para agendar o pod.Abra o ficheiro de manifesto e corrija o pedido de recurso:
code test-policy.yaml
Substitua o texto pelo seguinte:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 200m memory: 256Mi limits: cpu: 200m memory: 256Mi
Prima Ctrl+S para guardar o ficheiro e, em seguida, prima Ctrl+Q para fechar o editor.
Execute o comando para aplicar a configuração e implantar o
kubectl apply
aplicativo nocostsavings
namespace:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Você obterá a seguinte saída:
pod/nginx created
Obtenha os pods dos pods recém-criados em seu
costsavings
namespace.kubectl get pods --namespace costsavings
Em poucos segundos, os pods transitam para o
Running
estado.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Pressione Ctrl+C para parar de assistir assim que vir os pods em execução.