Exercício – Configurar o Azure Policy para Kubernetes em um cluster do AKS
O Azure Policy para o Kubernetes ajuda as organizações a atenderem a requisitos legais e de governança, além de implementar melhores práticas e estabelecer convenções organizacionais para os ambientes de nuvem.
As equipes de desenvolvimento da sua empresa estão adotando o AKS (Serviço de Kubernetes do Azure) como uma plataforma de desenvolvimento. Você percebe que a melhor maneira de gerenciar custos é implementar regras de negócios que definam limites entre recursos e cargas de trabalho. É recomendável que você verifique se os desenvolvedores só podem implantar cargas de trabalho dentro de limites específicos de alocação de CPU e de memória. O sistema precisa impedir as cargas de trabalho que excedam esses limites.
Neste exercício, você habilitará o Azure Policy para AKS em seu cluster e adicionará a política Os limites de CPU e recursos de memória dos contêineres de cluster do Kubernetes não devem exceder os limites especificados. Em seguida, você testará se a política nega o agendamento de cargas de trabalho que excedem os parâmetros de recurso da política.
Habilitar os provedores de recursos ContainerService e PolicyInsights
Entre no Azure Cloud Shell usando a sua conta do Azure. Selecione a versão Bash do Cloud Shell.
O Azure Policy para AKS exige que a versão do cluster seja 1.14 ou posterior. Execute o seguinte script para validar a versão do cluster do AKS:
az aks list
Verifique se a versão do cluster relatada é a 1.14 ou posterior.
Registre o provedor do Serviço de Kubernetes do Azure executando o comando
az provider register
:az provider register --namespace Microsoft.ContainerService
Registre o provedor do Azure Policy executando o comando
az provider register
:az provider register --namespace Microsoft.PolicyInsights
Habilite a instalação do complemento executando o comando
az feature register
:az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
Verifique se o registro foi bem-sucedido consultando a tabela de lista de recursos. Use o comando
az feature list
para executar a consulta. O registro de recursos pode levar vários minutos para ser concluído e, portanto, você precisará 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 atingir o tempo limite, você poderá acompanhar o processo de registro por meio do portal do Azure usando o painel de integração da versão prévia.
Execute o comando
az provider register
para propagar a atualização depois de confirmar que o comando de consulta da lista de recursos mostra 'Registrado':az provider register -n Microsoft.ContainerService
Habilitar o Azure Policy no seu cluster
Execute o comando
az aks enable-addons
para habilitar o complementoazure-policy
para o cluster:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Verifique se o pod da política do Azure está instalado no namespace
kube-system
e se o pod do Gatekeeper está instalado no namespacegatekeeper-system
. Para fazer isso, execute os seguintes comandoskubectl get pods
:kubectl get pods -n kube-system
A saída deve ser semelhante ao 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
A saída deve ser semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE gatekeeper-controller-manager-d5cd87796-5tmhq 1/1 Running 0 15m ...
Por fim, verifique se o complemento mais recente está instalado executando o comando
az aks show
. Esse comando recupera as informações de configuração do cluster.az aks show \ --resource-group $RESOURCE_GROUP\ --name $AKS_CLUSTER_NAME \ -o table --query "addonProfiles.azurepolicy"
A saída deve ser semelhante ao seguinte:
{ "config": null, "enabled": true, "identity": null }
Agora você já pode voltar ao portal do Azure e configurar a política chamada Os limites de recursos de memória e de CPU dos contêineres de cluster do Kubernetes não devem exceder os limites especificados.
Atribuir uma definição de política interna
Para configurar o novo Azure Policy, use o serviço Policy no portal do Azure.
Entre no portal do Azure.
Localize o serviço Policy no portal do Azure. Para fazer isso, na barra de pesquisa na parte superior do portal do Azure, pesquise Política e selecione essa opção.
Selecione o serviço Policy na lista de serviços, conforme mostrado aqui:
O dashboard do Policy é aberto com uma visão geral que mostra todas as políticas atribuídas e o status dos recursos e como as políticas os afetam. Se você não tiver atribuído nenhuma política, o painel de controle estará vazio.
No painel do menu esquerdo, em Criação, selecione Atribuições:
Lembre-se da nossa descrição anterior, mostrando que há duas opções para criar uma atribuição de política: você pode atribuir uma iniciativa ou uma política. Na barra de menus superior, selecione Atribuir política:
O painel Atribuir política é exibido.
Na guia Informações Básicas, insira os valores a seguir para cada configuração a fim de criar a sua política.
Setting Valor Escopo Escopo Selecione o botão de reticências. O painel Escopo é exibido. Em assinatura, selecione a assinatura que contém o seu grupo de recursos. Para Grupo de recursos, selecione rg-akscostsaving e, em seguida, selecione o botão Selecionar. Exclusões Deixe em branco. 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 Pesquisa, filtre a seleção inserindo CPU. Na guia Definições de política, selecione a política Os limites de CPU e recursos de memória de contêineres de cluster do Kubernetes não devem exceder os limites especificados e, em seguida, selecione Adicionar. Nome da atribuição Aceite o padrão. Descrição Deixe em branco. Aplicação de políticas Verifique se essa opção está definida como Habilitada. Atribuída por Aceite o padrão. Aqui está um exemplo da guia Informações Básicas preenchida:
Selecione a guia Parâmetros para especificar os parâmetros da política.
Defina os seguintes valores para cada uma das configurações de parâmetros:
Setting Valor Máximo de unidades de CPU permitidas Defina o valor como 200m. A política corresponde esse valor ao valor da solicitação de recurso da carga de trabalho e ao valor limite da carga de trabalho, conforme especificado no arquivo de manifesto da carga de trabalho. Máximo de bytes de memória permitidos Defina o valor como 256Mi. A política corresponde esse valor ao valor da solicitação de recurso da carga de trabalho e ao valor limite da carga de trabalho, conforme especificado no arquivo de manifesto da carga de trabalho. Aqui está um exemplo da guia Parâmetros preenchida:
Selecione a guia Correção. Nesta guia, você selecionará como a nova política afeta os recursos que já existem. Por padrão, a nova política verifica apenas os recursos recém-criados. Mantenha a configuração básica padrão.
Aqui está um exemplo da guia Correção preenchida:
Selecione a guia Examinar + criar. Examine os valores escolhidos e selecione Criar.
Importante
Se você estiver usando um cluster do AKS existente, a atribuição de política poderá levar cerca de 15 minutos para ser aplicada.
Testar as solicitações de recursos
A etapa final é testar a nova política. Implante sua carga de trabalho de teste com solicitações de recursos e limites que violem a nova política. Se tudo correr corretamente, o servidor retornará um erro informando negado pela política.
Abra o Azure Cloud Shell e selecione a versão Bash do Cloud Shell.
Crie um arquivo de manifesto para a implantação do Kubernetes usando o editor integrado. Chame o arquivo
test-policy.yaml
:code test-policy.yaml
Dica
O Cloud Shell inclui um editor de arquivos integrado. O editor do Cloud Shell dá suporte a recursos como o realce de linguagem, a paleta de comandos e um explorador de arquivos. Para criação e edição de arquivo simples, inicie o editor executando
code .
no terminal do Cloud Shell. Essa ação abre o editor com o diretório de trabalho ativo definido no terminal. Para abrir o arquivo de manifesto diretamente para edição rápida, executecode test-policy.yaml
. Esse comando abre o editor sem o explorador de arquivos.Cole o seguinte texto no arquivo:
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
Pressione Ctrl+S para salvar o arquivo e pressione Ctrl+Q para fechar o editor.
Execute o comando
kubectl apply
para aplicar a configuração e implantar o aplicativo no namespacecostsavings
:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Sua saída deve ser semelhante ao 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>
Observe como o webhook de admissão,
validation.gatekeeper.sh
, negou a solicitação para agendar o pod.Abra o arquivo de manifesto e corrija a solicitação de recurso:
code test-policy.yaml
Substitua o texto pelo seguinte texto:
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
Pressione Ctrl+S para salvar o arquivo e pressione Ctrl+Q para fechar o editor.
Execute o comando
kubectl apply
para aplicar a configuração e implantar o aplicativo no namespacecostsavings
:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Você obterá a seguinte saída:
pod/nginx created
Observe os pods recém-criados no seu namespace de
costsavings
.kubectl get pods --namespace costsavings
Em poucos segundos, os pods fazem a transição para o estado
Running
.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Pressione Ctrl+C para parar de observar assim que você perceber que os pods estão em execução.