Configurar as políticas de cota de recursos do AKS usando o Azure Policy para Kubernetes

Concluído

O Azure Policy ajuda você a impor padrões e a avaliar a conformidade em escala para seu ambiente de nuvem. É uma boa prática que as empresas implementem regras de negócios para definir como os funcionários têm permissão para usar software, hardware e outros recursos da empresa na organização. Portanto, as empresas usam políticas para impor, revisar e definir o acesso. Uma política ajuda uma organização a atender a requisitos legais e de governança, além de implementar melhores práticas e estabelecer convenções organizacionais.

O Serviço de Kubernetes do Azure (AKS) permite orquestrar seus aplicativos nativos de nuvem com eficiência com políticas. Você percebe que precisa impor regras de negócios para gerenciar como as equipes usam o AKS para garantir uma abordagem econômica. Você decide usar o Azure Policy para aplicar essa ideia aos recursos de nuvem baseados no Azure.

Antes de discutir como usar o Azure Policy para Kubernetes, você deve entender mais alguns conceitos que habilitam esse recurso de dentro do Kubernetes.

O que é um controlador de admissão do Kubernetes?

Um controlador de admissão é um plug-in do Kubernetes que intercepta as solicitações autenticadas e autorizadas para a API do Kubernetes antes da persistência do objeto do Kubernetes solicitado. Por exemplo, suponha que você implante uma nova carga de trabalho e essa implantação inclua uma solicitação de pod com requisitos específicos de memória. O controlador de admissão intercepta a solicitação de implantação e precisa autorizá-la antes que ela seja persistida no cluster.

Considere um controlador de admissão como um software que controla e impõe a maneira como o cluster é usado e projetado. Ele limita as solicitações para criar, excluir e modificar objetos do Kubernetes.

O que é um webhook do controlador de admissão?

O webhook do controlador de admissão é uma função de retorno de chamada HTTP que recebe solicitações de admissão e executa ações com base nessas solicitações. Os controladores de admissão precisam ser configurados em runtime. Esses controladores existem para o plug-in de admissão compilado ou para uma extensão implantada que é executada como um webhook.

Há dois tipos de webhooks de admissão disponíveis: o webhook de validação e o webhook de mutação. Um webhook de mutação é invocado primeiro e pode alterar e aplicar padrões nos objetos enviados ao servidor de API. Um webhook de validação valida valores de objeto e pode rejeitar solicitações.

O que é o OPA (Agente de Política Aberta)?

O OPA (Agente de Política Aberta) é um mecanismo de política de uso geral de software livre que fornece uma linguagem declarativa de alto nível para criação de políticas. Essas políticas permitem que você defina regras que supervisionam como o sistema deve se comportar.

O que é o Gatekeeper do OPA?

O OPA Gatekeeper é um webhook de controlador de admissão do Kubernetes de software livre que impõe políticas baseadas em Definição de Recurso Personalizado (CRD) que seguem a sintaxe do OPA.

O objetivo do Gatekeeper do OPA é permitir que você personalize as políticas de admissão por meio de configuração em vez de regras de política embutidas em código para serviços. Ele também proporciona uma visão completa do cluster para identificar recursos que violam a política.

Use o OPA Gatekeeper para definir políticas em toda a organização com regras:

  • Os limites máximos de recursos (como os limites de memória e de CPU) sejam impostos para todos os pods configurados.

  • A implantação de imagens seja permitida somente de repositórios aprovados.

  • A convenção de nomenclatura para rótulos para todos os namespaces em um cluster deve especificar um ponto de contato para cada namespace.

  • Exija que os serviços de cluster tenham seletores globalmente exclusivos.

Azure Policy para AKS

O Azure Policy estende o OPA Gatekeeper versão 3 e se integra ao AKS por meio de políticas internas. Essas políticas aplicam imposições e proteções em escala ao cluster de maneira centralizada e consistente.

As equipes de desenvolvimento da sua empresa desejam otimizar o desenvolvimento e introduzir ferramentas de desenvolvimento, como o DevSpaces, para simplificar o fluxo de trabalho de desenvolvimento do Kubernetes. Você deseja ter certeza de que os membros da equipe respeitem os limites de recursos específicos para os respectivos projetos. Você decide colocar uma política em vigor que define os recursos de computação, os recursos de armazenamento e a contagem de objetos permitidos nos namespaces de desenvolvimento.

Para configurar os limites de recursos, você pode aplicar cotas de recursos no nível do namespace e monitorar o uso de recursos para ajustar as cotas de política. Use essa estratégia para reservar e limitar recursos para toda a equipe de desenvolvimento.

Como habilitar o complemento do Azure Policy para AKS

Há algumas etapas necessárias para registrar o recurso Complemento do Azure Policy para AKS. Forneceremos exemplos aqui, mas você realmente concluirá as etapas na próxima unidade.

  1. Registre dois provedores de recursos usando o comando az provider register:

    • Microsoft.ContainerService e Microsoft.PolicyInsights: Esses provedores de recursos dão suporte a ações como consultar informações sobre eventos de política e gerenciar contêineres. Essas são ações usadas para consultar, criar, atualizar ou excluir correções de política.

    Aqui está um exemplo dos dois comandos de registro:

    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.PolicyInsights
    
  2. Registre o recurso AKS-AzurePolicyAutoApprove com o provedor de recursos Microsoft. ContainerService. Aqui está um exemplo do comando:

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  3. Depois de confirmar o registro bem-sucedido do recurso, execute o comando az provider register com o parâmetro --namespace para propagar o novo registro do recurso. Aqui está um exemplo do comando:

    az provider register -n Microsoft.ContainerService
    
  4. Habilite o complemento do Azure Policy:

    az aks enable-addons \
        --addons azure-policy \
        --name myAKSCluster \
        --resource-group myResourceGroup
    

    Ativando as cargas de trabalho de agendamento do complemento em dois namespaces em seu cluster. O primeiro namespace é kube-system, que contém o azure-policy e azure-policy-webhook. O segundo namespace é gatekeeper-system, que contém o gatekeeper-controller-manager. Essas cargas de trabalho são responsáveis por avaliar solicitações enviadas ao painel de controle do AKS. Com base em suas políticas configuradas, o webhook de política pode permitir ou negar solicitações.

Atribuir uma definição de política interna

Gerencie as políticas do ambiente do Azure por meio do dashboard de conformidade de política do Azure. O dashboard permite fazer uma busca detalhada até um nível de detalhe por recurso e por política. Ele ajuda a colocar seus recursos em conformidade empregando a correção em massa de recursos existentes e a correção automática de novos recursos.

Para cada política, as seguintes informações de visão geral são listadas:

Item Descrição Exemplo
Nome O nome da política. [Versão prévia]: verificar se os limites de recursos de memória e de CPU do contêiner não excedem os limites especificados no cluster do Kubernetes.
Escopo O grupo de recursos de assinatura ao qual essa política se aplica. mySubscription/rg-akscostsaving.
Estado de conformidade O status das políticas atribuídas. Em conformidade, Em conflito, Não iniciado ou Não registrado.
Conformidade do recurso O percentual de recursos que está em conformidade com a política. Esse cálculo leva em conta os recursos em conformidade, sem conformidade e conflitantes. 100
Recursos sem conformidade Número de recursos exclusivos que violam uma ou mais regras da política. 3
Políticas sem conformidade O número de políticas sem conformidade. 5

A partir daqui, você pode detalhar por recurso e por política para os eventos disparados. Por exemplo, você pode examinar os detalhes de uma implantação de carga de trabalho negada.

Como atribuir políticas

Para atribuir uma política, selecione a opção Atribuições na seção Criação no painel de navegação do Azure Policy.

Você pode atribuir políticas do Azure de duas maneiras: como um grupo de políticas, chamado de iniciativa, ou como uma política individual.

Atribuição de iniciativa

Uma atribuição de iniciativa é uma coleção de definições de política do Azure agrupadas para atender a uma finalidade ou uma meta específica. Por exemplo, a meta poderia ser aplicar o Padrão de Segurança de Dados do Setor de Cartão de Pagamento em todos os recursos.

Atribuição de política

Uma atribuição de política atribui apenas uma política, por exemplo: não permitir contêineres privilegiados no cluster do Kubernetes.

Como atribuir uma política

Cada política é definida por meio de uma série de etapas de configuração. O volume de informações capturadas depende do tipo de política selecionado.

Por exemplo, para limitar a implantação de recursos pelos desenvolvedores no ambiente de nuvem da empresa, você pode atribuir uma das políticas internas do Azure ao Serviço de Kubernetes do Azure. O nome da política é Verificar se os limites de recursos de memória e de CPU do contêiner não excedem os limites especificados no cluster do Kubernetes.

A política exige que você defina o limite nos recursos permitidos solicitados por solicitações de implantação.

Vamos dar uma olhada nas opções configuráveis ao atribuir uma política.

Informação básicas da política

A primeira etapa exige que você selecione e insira informações básicas que definam a nova política. Por exemplo, essas informações podem ser a política e o escopo do recurso. Esta tabela mostra cada item que você pode configurar:

Item Descrição
Escopo O escopo determina em quais recursos ou grupo de recursos a atribuição de política é imposta. Esse valor se baseia em uma assinatura ou em um grupo de gerenciamento. Você pode excluir recursos da seleção em um nível inferior ao nível do escopo.
Definição de Política A política que você deseja aplicar. Escolha uma entre várias opções de políticas internas.
Nome da atribuição O nome usado para identificar a política atribuída.
Descrição Uma descrição em texto livre que descreve a política.
Imposição de política Você pode escolher Habilitado e Desabilitado. Se ela estiver Desabilitada, a política não será aplicada e as solicitações não serão negadas por não conformidade.
Atribuída por Um valor de texto livre que usa como padrão o usuário registrado. É possível alterar esse valor.

Parâmetros da política

As políticas exigem que você configure as regras de negócio que se aplicam a cada política específica. Nem todas as políticas têm as mesmas regras de negócio. É por isso que cada política tem parâmetros diferentes.

Por exemplo, a política Verificar se os limites de recursos de memória e de CPU do contêiner não excedem os limites especificados no cluster do Kubernetes exige a definição de três parâmetros:

  • O máximo de unidades de CPU permitidas para um contêiner
  • O máximo de bytes de memória permitidos para um contêiner
  • Uma lista de namespaces do Kubernetes a serem excluídos da política

Compare essa política com a política O Aplicativo Web só deve ser acessível via HTTPS, que não requer a configuração de nenhum parâmetro personalizado.

Todas as políticas têm uma configuração Efeito. Essa configuração habilita ou desabilita a execução da política. Assim como ocorre com os parâmetros, as políticas também podem ter diferentes opções de Efeitos.

Por exemplo, para a política de gerenciamento de recursos, você pode selecionar auditar, negar ou desabilitar como o valor de Efeito. Para a política de aplicativo Web, você só pode selecionar audit ou disable.

Esta tabela lista todos os efeitos atualmente compatíveis com as definições de política:

Efeito Descrição
Append Adiciona mais campos ao recurso solicitado
Auditoria Cria um evento de aviso no log de atividades
AuditIfNotExists Habilita a auditoria dos recursos relacionados ao recurso que corresponde à condição
Deny Impede a aprovação de uma solicitação de recurso que não corresponde aos padrões definidos por meio de uma definição de política reprovando a solicitação
DeployIfNotExists Executa uma implantação de modelo quando a condição é atendida
Desabilitado Útil para situações de teste ou para quando a definição de política tiver parametrizado o efeito e você quiser desabilitar apenas uma atribuição
Modificar Adiciona, atualiza ou remove marcas de um recurso durante a criação ou a atualização

Correção de política

A etapa final é considerar a correção da política. Quando você atribui políticas, é possível que os recursos já existam e violem a nova política. Por padrão, somente recursos recém-criados são aplicados à nova política. Use a correção para verificar os recursos existentes depois de atribuir uma nova política. As tarefas de correção podem ser diferentes dependendo dos tipos de políticas aplicadas.

No próximo exercício, você usará a política Garantir que os limites de recursos de CPU e memória do contêiner não excedam os limites especificados no cluster do Kubernetes para reduzir ainda mais os custos.