Partilhar via


Usar proteções de implantação para impor práticas recomendadas no Serviço Kubernetes do Azure (AKS) (Visualização)

Este artigo mostra como usar proteções de implantação para impor práticas recomendadas em um cluster do Serviço Kubernetes do Azure (AKS).

Descrição geral

Ao longo do ciclo de vida do desenvolvimento, é comum que bugs, problemas e outros problemas surjam se a implantação inicial dos recursos do Kubernetes incluir configurações incorretas. Para aliviar o fardo do desenvolvimento do Kubernetes, o Serviço Kubernetes do Azure (AKS) oferece proteções de implantação (visualização). As salvaguardas de implantação impõem as práticas recomendadas do Kubernetes em seu cluster AKS por meio de controles de Política do Azure.

As proteções de implantação oferecem dois níveis de configuração:

  • Warning: Exibe mensagens de aviso no terminal de código para alertá-lo sobre quaisquer configurações de cluster não compatíveis, mas ainda permite que a solicitação seja atendida.
  • Enforcement: Impõe configurações compatíveis negando e mutando implantações se elas não seguirem as práticas recomendadas.

Depois de configurar as proteções de implantação para 'Aviso' ou 'Aplicação', as salvaguardas de implantação avaliam programaticamente seus clusters no momento da criação ou atualização para fins de conformidade. As proteções de implantação também exibem informações de conformidade agregadas em suas cargas de trabalho em um nível por recurso por meio do painel de conformidade da Política do Azure no portal do Azure ou em sua CLI ou terminal. A execução de uma carga de trabalho não compatível indica que o cluster não está seguindo as práticas recomendadas e que as cargas de trabalho no cluster correm o risco de enfrentar problemas causados pela configuração do cluster.

Importante

Os recursos de visualização do AKS estão disponíveis em uma base de autosserviço e opt-in. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As visualizações do AKS são parcialmente cobertas pelo suporte ao cliente com base no melhor esforço. Como tal, estas funcionalidades não se destinam a utilização em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

Pré-requisitos

  • Você precisa habilitar o complemento Azure Policy para AKS. Para obter mais informações, consulte Habilitar a Política do Azure em seu cluster AKS.

  • Para configurar salvaguardas de implantação, você deve ter a versão 2.0.0b1 ou posterior da aks-preview extensão. Para instalar a extensão, consulte Instalar a extensão aks-preview CLI. Também recomendamos atualizar a CLI do Azure para garantir que você tenha a versão mais recente instalada.

  • Para criar e modificar a configuração para salvaguardas de implantação, você precisa de uma assinatura com as seguintes permissões no cluster AKS:

    • Microsoft.Authorization/policyAssignments/write
    • Microsoft.Authorization/policyAssignments/read
  • Você precisa registrar o sinalizador do recurso de salvaguardas de implantação. Para registrar o sinalizador de recurso, consulte Registrar o sinalizador de recurso para salvaguardas de implantação.

Instalar a extensão da CLI aks-preview

  1. Instale a aks-preview extensão CLI usando o az extension add comando.

    az extension add --name aks-preview
    
  2. Atualize a extensão para garantir que você tenha a versão mais recente instalada usando o az extension update comando.

    az extension update --name aks-preview
    

Registrar o sinalizador do recurso de salvaguardas de implantação

  1. Registre o SafeguardsPreview sinalizador de recurso usando o az feature register comando.

    az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
    

    Leva alguns minutos para que o status mostre Registrado.

  2. Verifique o status do registro usando o az feature show comando.

    az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
    
  3. Quando o status refletir Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService usando o az provider register comando.

    az provider register --namespace Microsoft.ContainerService
    

Políticas de salvaguardas de implantação

Nota

As ReadOnlyRootFilesystem políticas e RootfilesystemInitContainers estão atualmente disponíveis apenas no Linux.

A tabela a seguir lista as políticas que se tornam ativas e os recursos do Kubernetes que elas visam quando você habilita as salvaguardas de implantação. Você pode exibir as salvaguardas de implantação atualmente disponíveis no portal do Azure como uma definição de Política do Azure ou em Definições internas da Política do Azure para o Serviço Kubernetes do Azure. A intenção por trás desta coleção é criar uma lista comum e genérica de melhores práticas aplicáveis à maioria dos usuários e casos de uso.

Política de salvaguarda da implantação Recurso Kubernetes direcionado Resultado da mutação, se disponível
[Pré-visualização]: Não é possível editar nós individuais N/A
Os limites de recursos de CPU e memória dos contêineres de cluster do Kubernetes não devem exceder os limites especificados Pod Define os limites de recursos da CPU para 500 m se não estiver definido e define os limites de memória para 500 Mi se nenhum caminho estiver presente
[Pré-visualização]: Deve ter regras anti-afinidade definidas Implantação, StatefulSet, ReplicationController, ReplicaSet N/A
[Pré-visualização]: Sem rótulos específicos do AKS Implantação, StatefulSet, Replicaset N/A
Os contêineres de cluster do Kubernetes só devem usar imagens permitidas Pod N/A
[Pré-visualização]: Manchas reservadas do pool do sistema Remove a CriticalAddonsOnly mancha de um pool de nós de usuário se não estiver definido. O AKS usa a mancha para manter os CriticalAddonsOnly pods do cliente longe do pool do sistema. Esta configuração garante uma separação clara entre os componentes AKS e os pods do cliente e evita a remoção dos pods do cliente que não toleram a CriticalAddonsOnly mancha.
Garantir que os contêineres de cluster tenham testes de prontidão ou vivacidade configurados Pod N/A
Os clusters Kubernetes devem usar o driver StorageClass (Container Storage Interface) Classe de armazenamento N/A
[Preview]: Os contêineres de cluster do Kubernetes só devem extrair imagens quando segredos de pull de imagem estiverem presentes Pod N/A
[Preview]: O cluster Kubernetes deve implementar orçamentos precisos de interrupção de pod Implantação, ReplicaSet, StatefulSet Define maxUnavailable o recurso PodDisruptionBudget como 1.
[Preview]: Os serviços de cluster do Kubernetes devem usar seletores exclusivos Serviço N/A
[Pré-visualização]: ReadOnlyRootFilesystem em Pod spec está definido como true Pod Define readOnlyRootFilesystem na especificação do Pod como true se não estiver definido. Essa configuração impede que os contêineres gravem no sistema de arquivos raiz.
[Pré-visualização]: RootfilesystemInitContainers em Pod spec está definido como true Pod Define rootFilesystemInitContainers na especificação do Pod como true se não estiver definido.
[Visualização]: As imagens de contêiner de cluster do Kubernetes não devem incluir a tag de imagem mais recente Implantação, StatefulSet, ReplicationController, ReplicaSet N/A
[Preview]: As imagens de contêiner de cluster do Kubernetes devem incluir o gancho preStop Implantação, StatefulSet, ReplicationController, ReplicaSet N/A

Se você quiser enviar uma ideia ou solicitação de salvaguardas de implantação, abra um problema no repositório AKS GitHub e adicione [deployment safeguards request] ao início do título.

Habilitar proteções de implantação

Nota

Se você habilitou a Política do Azure pela primeira vez para usar salvaguardas de implantação, talvez seja necessário aguardar até 20 minutos para que a Política do Azure entre em vigor.

Usar o nível de proteção Enforcement de implantação significa que você está aceitando que as implantações sejam bloqueadas e mutadas. Considere como essas políticas podem funcionar com seu cluster AKS antes de ativar Enforcemento .

Habilitar proteções de implantação em um novo cluster

Habilite as proteções de implantação em um novo cluster usando o az aks create comando com os --safeguards-level sinalizadores e --safeguards-version .

Se desejar receber avisos de não conformidade, defina como --safeguards-level Warning. Se você quiser negar ou mutar todas as implantações não compatíveis, defina-o como Enforcement. Para receber avisos, defina como --safeguards-level "Aviso". Para negar ou mutar todas as implantações que não aderem às salvaguardas de implantação, defina como --safeguards-level "Aplicação". Para definir a versão de salvaguardas de implantação, use o --safeguards-version sinalizador. Atualmente, a V2.0.0 é a versão mais recente das salvaguardas de implantação.

az aks create \
    --name myAKSCluster \
    --resource-group myResourceGroup \
    --enable-addons azure-policy \
    --safeguards-level Warning \
    --safeguards-version v2.0.0 \
    --generate-ssh-keys

Habilitar proteções de implantação em um cluster existente

Habilite as proteções de implantação em um cluster existente que tenha o complemento Azure Policy habilitado usando o az aks update comando com os --safeguards-level sinalizadores e --safeguards-version . Se desejar receber avisos de não conformidade, defina como --safeguards-level Warning. Se você quiser negar ou mutar todas as implantações não compatíveis, defina-o como Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0

Se desejar atualizar o nível de proteção de implantação de um cluster existente, use o az aks update comando com o sinalizador --safeguards-level definido como Warning ou Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement

Excluindo namespaces

Você também pode excluir determinados namespaces das salvaguardas de implantação. Quando você exclui um namespace, a atividade nesse namespace não é afetada por avisos ou imposição de salvaguardas de implantação.

Por exemplo, para excluir os namespaces ns1 e ns2, use uma lista separada por vírgulas de namespaces com o --safeguards-excluded-ns sinalizador, conforme mostrado no exemplo a seguir:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0 --safeguards-excluded-ns ns1,ns2 

Atualize sua versão de proteção de implantação

Nota

v2.0.0 é a versão mais recente das salvaguardas de implantação.

Atualize sua versão de salvaguardas de implantação usando o az aks update comando com o sinalizador --safeguards-version definido para a nova versão. O exemplo a seguir atualiza um cluster existente para usar a versão 2.0.0:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0

Verificar a conformidade entre clusters

Depois de implantar seu manifesto do Kubernetes, você verá avisos ou uma possível mensagem de negação em sua CLI ou terminal se o cluster não estiver em conformidade com as salvaguardas de implantação, conforme mostrado nos exemplos a seguir:

Aviso

$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created

Execução

Com as mutações de proteção de implantação, o Enforcement nível muta seus recursos do Kubernetes quando aplicável. No entanto, seus recursos do Kubernetes ainda precisam passar por todas as proteções para serem implantados com êxito. Se alguma política de salvaguarda falhar, seu recurso será negado e não será implantado.

$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.

Se seus recursos do Kubernetes estiverem em conformidade com as proteções de mutação aplicáveis e atenderem a todos os outros requisitos de proteção, eles serão implantados com êxito, conforme mostrado no exemplo a seguir:

$ kubectl apply -f pod.yml
pod/my-pod created

Verificar a conformidade entre clusters usando o painel da Política do Azure

Para verificar se as proteções de implantação foram aplicadas e verificar a conformidade do cluster, navegue até a página do portal do Azure para seu cluster e selecione Políticas, em seguida, selecione ir para Política do Azure.

Na lista de políticas e iniciativas, selecione a iniciativa associada às salvaguardas de implantação. Você vê um painel mostrando o estado de conformidade em todo o cluster AKS.

Nota

Para avaliar corretamente a conformidade em todo o cluster AKS, a iniciativa Política do Azure deve ter como escopo o grupo de recursos do cluster.

Desabilitar proteções de implantação

Desative as proteções de implantação no cluster usando o az aks update comando e defina como --safeguards-level Off.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off

--

FAQ

Ativei as proteções de implantação com a Política do Azure pela primeira vez. Por que não vejo nenhum aviso? Porque é que os meus pods não estão a ser recusados?

O Azure Policy pode levar até 35 minutos para ser sincronizado com seu cluster depois que ele é habilitado pela primeira vez.

Acabei de mudar de Advertência para Fiscalização. Isso entrará em vigor imediatamente?

Ao alternar os níveis de proteção de implantação, talvez seja necessário aguardar até 15 minutos para que o novo nível entre em vigor.

Posso criar as minhas próprias mutações?

N.º Se você tiver uma ideia para uma salvaguarda, abra um problema no repositório AKS GitHub e adicione [deployment safeguards request] ao início do título.

Posso escolher quais mutações quero no Enforcement?

N.º As salvaguardas de implantação são tudo ou nada. Depois de ativar o Aviso ou a Aplicação, todas as proteções estarão ativas.

Por que meu recurso de implantação foi admitido mesmo não seguindo as práticas recomendadas?

As salvaguardas de implantação impõem padrões de práticas recomendadas por meio de controles de Política do Azure e têm políticas que validam em relação aos recursos do Kubernetes. Para avaliar e impor componentes de cluster, a Política do Azure estende o Gatekeeper. Atualmente, a aplicação do Gatekeeper também opera em um fail-open modelo. Como não há garantia de que o Gatekeeper responderá à nossa chamada de rede, garantimos que, nesse caso, a validação seja ignorada para que a negação não bloqueie suas implantações.

Para saber mais, consulte Validação de carga de trabalho no Gatekeeper.

Próximos passos

  • Saiba mais sobre as práticas recomendadas para operar um cluster AKS.