Exercício - Configurar a Política do Azure para Kubernetes em um cluster AKS
A Política do Azure para Kubernetes ajuda as organizações a atender aos requisitos legais e de governança, implementar práticas recomendadas e estabelecer convenções organizacionais para ambientes de nuvem.
As equipas de desenvolvimento da sua empresa estão a adotar o Serviço Kubernetes do Azure (AKS) como uma plataforma de desenvolvimento. Você percebe que a melhor maneira de gerenciar custos é aplicando regras de negócios que definem limites de recursos de carga de trabalho. Você deseja garantir que os desenvolvedores possam implantar cargas de trabalho somente dentro de limites específicos para alocação de CPU e memória. O sistema deve evitar cargas de trabalho que excedam esses limites.
Neste exercício, irá ativar a Política do Azure para AKS no seu cluster e adicionar a política , onde os limites de recursos de CPU e memória dos contêineres do cluster 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 recursos da política.
Ative os provedores de recursos ContainerService e PolicyInsights
Entre no Azure Cloud Shell usando sua conta do Azure. Selecione a versão Bash do Cloud Shell.
A Política do Azure para AKS requer que a versão do cluster seja 1.14 ou posterior. Execute o seguinte script para validar a versão do cluster AKS:
az aks list
Certifique-se de que a versão do cluster relatada é 1.14 ou posterior.
Registre o provedor de Serviços Kubernetes do Azure executando o comando
az provider register
:az provider register --namespace Microsoft.ContainerService
Registre o provedor de Política do Azure 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 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 expirar, poderá acompanhar o processo de registo por meio do portal do Azure usando o painel de pré-visualização de integração do .
Execute o comando
az provider register
para propagar a atualização depois de confirmar que o 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 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 azure-policy está instalado no namespace
kube-system
e se o pod gatekeeper está instalado no namespacegatekeeper-system
. Para fazer isso, 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 ...
Finalmente, verifique se o complemento mais recente está instalado executando
az aks show
comando. Este 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"
O seu resultado deve ser semelhante ao seguinte:
{ "config": null, "enabled": true, "identity": null }
Agora você está pronto para mudar para o portal do Azure para configurar a política chamada . Os recursos de CPU e memória dos contêineres do cluster Kubernetes não devem exceder os limites especificados.
Atribuir uma definição de política interna
Para configurar a nova Política do Azure, use o serviço Política no portal do Azure.
Inicie sessão no portal do Azure.
Localize o serviço Policy no portal do Azure. Para tal, na barra de pesquisa no topo do portal, procure e selecione Política.
Selecione o serviço Policy na lista de serviços, conforme aqui mostrado:
O painel Política é aberto com uma visão geral que mostra todas as políticas atribuídas, o status 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, sob Autor, 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 a sua diretriz.
Cenário Valor Âmbito Âmbito de aplicação Selecione o botão de reticências. O painel Escopo é exibido. Em de subscrição , selecione a subscrição que contém o seu grupo de recursos. Para o Grupo de Recursos , selecione rg-akscostsaving e, em seguida, clique no 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 de pesquisa , filtre a seleção inserindo CPU. Na guia Definições de Política, selecione a os limites de recursos de CPU e memória dos contêineres de cluster do Kubernetes não devem exceder os limites especificadose, em seguida, selecione Adicionar. Nome da atribuição Aceitar padrão. Descrição Deixe vazio. Aplicação de políticas Certifique-se de que esta opção está definida como Ativado. Atribuído por Aceitar valor padrão. Aqui está um exemplo da guia Noções básicas concluída:
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âmetro:
Configuração Valor Máximo de unidades de CPU permitidas Defina o valor como 200m. A política alinha esse valor tanto ao valor de pedido de recursos da carga de trabalho quanto ao valor de limite especificado no arquivo de manifesto dessa carga de trabalho. Max bytes de memória permitidos Defina o valor como 256Mi. A política alinha este valor tanto ao valor de solicitação de recursos da carga de trabalho, quanto ao valor-limite especificado no ficheiro de manifesto da carga de trabalho. Aqui está um exemplo da guia de Parâmetros concluída:
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.
Aqui está um exemplo da guia de remediação concluída:
Selecione o separador Rever e criar. Revise 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 solicitações de recursos
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 conforme esperado, o servidor retornará um erro indicando que foi negado por política.
Abra o Azure Cloud Shell e certifique-se de selecionar 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 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 arquivo de manifesto diretamente para edição rápida, executecode test-policy.yaml
. O comando Ths 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, em seguida, 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 à 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 o pedido de agendamento do pod.Abra o arquivo de manifesto e corrija a solicitação 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
Pressione Ctrl+S para salvar o arquivo e, em seguida, 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
Obtenha os pods dos pods recém-criados em seu namespace
costsavings
.kubectl get pods --namespace costsavings
Em poucos segundos, os pods transitam para o estado
Running
.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Pressione Ctrl+C para parar de monitorizar quando vir os pods em execução.