Exercício – Configurar o Azure Policy para o Kubernetes num cluster do AKS

Concluído

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

  1. Inicie sessão no Azure Cloud Shell com a sua conta do Azure. Selecione a versão Bash do Cloud Shell.

  2. 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.

  3. Registe o fornecedor do Azure Kubernetes Service ao executar o comando az provider register:

    az provider register --namespace Microsoft.ContainerService
    
  4. Registe o fornecedor do Azure Policy ao executar o comando az provider register:

    az provider register --namespace Microsoft.PolicyInsights
    
  5. Habilite a instalação do complemento executando o az feature register comando:

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  6. 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.

  7. 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

  1. Execute o comando az aks enable-addons para ativar o suplemento azure-policy do cluster:

    az aks enable-addons \
        --addons azure-policy \
        --name $AKS_CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP
    
  2. 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 nomes gatekeeper-system. Para tal, execute os seguintes comandos kubectl 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
    ...
    
  3. 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.

  1. Inicie sessão no portal do Azure.

  2. 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.

  3. Selecione o serviço Policy na lista de serviços, como indicado aqui:

    Screenshot of the general Azure portal search box with a result that shows the Azure Policy service.

    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.

  4. No painel de menu esquerdo, em Criação, selecione Atribuições:

    Screenshot of the Policy service navigation panel that shows the location of the Assignments option.

  5. 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:

    Screenshot that shows the new policy assignment option.

    O painel Atribuir política é exibido.

  6. 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:

    Screenshot that shows the information captured in the Basics tab.

  7. Selecione o separador Parâmetros para especificar os parâmetros da política.

  8. 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:

    Screenshot that shows the information captured in the Parameters tab.

  9. 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:

    Screenshot that shows the information captured in the Remediation tab.

  10. 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.

  1. Abra o Azure Cloud Shell e confirme que seleciona a versão Bash do Cloud Shell.

  2. 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, execute code test-policy.yaml. O comando abre o editor sem o explorador de ficheiros.

  3. 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
    
  4. Prima Ctrl+S para guardar o ficheiro e, em seguida, prima Ctrl+Q para fechar o editor.

  5. Execute o comando para aplicar a configuração e implantar o kubectl apply aplicativo no costsavings 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.

  6. 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
    
  7. Prima Ctrl+S para guardar o ficheiro e, em seguida, prima Ctrl+Q para fechar o editor.

  8. Execute o comando para aplicar a configuração e implantar o kubectl apply aplicativo no costsavings namespace:

    kubectl apply \
    --namespace costsavings \
    -f test-policy.yaml
    

    Você obterá a seguinte saída:

    pod/nginx created
    
  9. 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
    
  10. Pressione Ctrl+C para parar de assistir assim que vir os pods em execução.