Restrição de Área de Pod (versão prévia) com o Serviço de Kubernetes do Azure (AKS)
Artigo
Para ajudar a proteger suas cargas de trabalho de contêiner contra códigos não confiáveis ou possivelmente mal-intencionados, o AKS agora inclui um mecanismo chamado Restrição de Área de Pod (versão prévia). A Área restrita de Pods fornece um limite de isolamento entre o aplicativo de contêiner e o kernel compartilhado e os recursos de computação do host do contêiner, como CPU, memória e rede. A Restrição de Área de Pod complementa outras medidas de segurança ou controles de proteção de dados da sua arquitetura de modo geral para ajudar você a cumprir os requisitos de conformidade regulatória, do setor ou de governança para a proteção de informações confidenciais.
Este artigo irá ajudar você a entender esse novo recurso e como implementá-lo.
Pré-requisitos
CLI do Azure versão 2.44.1 ou posterior. Execute az --version para localizar a versão e az upgrade para atualizar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.
A extensão da CLI do Azure aks-preview versão 0.5.123 ou posterior.
Registre o recurso KataVMIsolationPreview na sua assinatura do Azure.
O AKS é compatível com a Área Restrita de Pod (versão prévia) na versão 1.24.0 e superior com todos os plugins de rede do AKS.
Para gerenciar um cluster do Kubernetes, use o cliente de linha de comando kubectl do Kubernetes. O Azure Cloud Shell vem com o kubectl. Você pode instalar o kubectl localmente usando o comando az aks install-cli.
Instalar a extensão aks-preview da CLI do Azure
Importante
As versões prévias do recurso AKS estão disponíveis em uma base de autoatendimento e aceitação. As visualizações são fornecidas "como estão" e "conforme disponíveis" e estão excluídas dos acordos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:
Para instalar a extensão aks-preview, execute o seguinte comando:
az extension add --name aks-preview
Execute o seguinte comando para atualizar para a versão mais recente da extensão lançada:
az extension update --name aks-preview
Registre o sinalizador do recurso KataVMIsolationPreview
Registre o sinalizador de recursos KataVMIsolationPreview usando o comando az feature register, conforme mostrado no seguinte exemplo:
az feature register --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"
Demora alguns minutos para o status exibir Registrado. Verifique o status do registro usando o comando az feature show:
az feature show --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"
Quando o status reflete Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService usando o comando az provider register:
az provider register --namespace "Microsoft.ContainerService"
Limitações
Veja a seguir as restrições inerentes a essa versão prévia da Restrição de Área de Pod (versão prévia):
Os contêineres Kata podem não atingir os limites de desempenho de IOPS que os contêineres tradicionais conseguem atingir nos Arquivos do Azure e em SSDs locais de alto desempenho.
Para obter essa funcionalidade no AKS, os Contêineres Kata em execução na pilha de host de contêiner do Azure Linux para AKS fornecem um isolamento implementado por hardware. A Restrição de Área de Pod amplia os benefícios do isolamento de hardware, como, por exemplo, um kernel separado para cada pod do Kata. O isolamento de hardware aloca recursos para cada pod e não os compartilha com outros Contêineres Kata ou contêineres de namespace em execução no mesmo host.
A arquitetura da solução se baseia nos seguintes componentes:
A implantação da Restrição de Área de Pod usando Contêineres Kata é semelhante ao fluxo de trabalho padrão dentro de contêineres para implantar contêineres. A implantação inclui opções de runtime do Kata que você pode configurar no modelo de pod.
Para usar esse recurso com um pod, a única diferença é a adição de runtimeClassNamekata-mshv-vm-isolation às especificações do pod.
Quando usa a runtimeClass kata-mshv-vm-isolation, o pod cria uma VM para atuar como área restrita do pod e hospedar os contêineres. A memória padrão da VM é de 2 GB e a CPU padrão será de um núcleo se o Manifesto do recurso do contêiner (containers[].resources.limits) não especificar um limite para a CPU e a memória. Quando você especifica um limite para a CPU ou a memória no manifesto do recurso do contêiner, a VM tem containers[].resources.limits.cpu com o argumento 1 para usar um + xCPU e containers[].resources.limits.memory com o argumento 2 para especificar 2 GB + yMemory. Os contêineres só podem usar a CPU e a memória até os limites dos contêineres. Os containers[].resources.requests são ignorados nessa versão prévia, enquanto trabalhamos para reduzir a sobrecarga da CPU e da memória.
Implantar um novo cluster
Execute as etapas a seguir para implantar um cluster do AKS do Azure Linux usando a CLI do Azure.
Crie um cluster do AKS usando o comando az aks create e especificando os seguintes parâmetros:
--workload-runtime: especifique KataMshvVmIsolation para habilitar o recurso Restrição de Área de Pod no pool do nós. Com esse parâmetro, esses outros parâmetros devem cumprir os requisitos a seguir. Caso contrário, o comando irá falhar e notificar um problema com os parâmetros correspondentes.
--os-sku: AzureLinux. Somente a SKU do SO do Azure Linux dá suporte a esse recurso nessa versão prévia.
--node-vm-size: qualquer tamanho de VM do Azure que seja uma VM de geração 2 e compatível com virtualização aninhada irá funcionar. Por exemplo, VMs Dsv3.
O exemplo a seguir cria um cluster nomeado myAKSCluster com um nó no myResourceGroup:
Execute o comando a seguir para obter credenciais de acesso para o cluster do Kubernetes. Use o comando az aks get-credentials e substitua os valores pelo nome do cluster e o nome do grupo de recursos.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Liste todos os Pods em todos os namespaces usando o comando kubectl get pods.
kubectl get pods --all-namespaces
Implantar em um cluster existente
Para usar esse recurso com um cluster existente do AKS, os seguintes requisitos devem ser cumpridos:
Verifique se o cluster está executando o Kubernetes na versão 1.24.0 e superior.
Use o comando a seguir para habilitar a Restrição de Área de Pod (versão prévia) criando um pool de nós para hospedar o recurso.
Adicione um pool de nós ao seu cluster do AKS usando o comando az aks nodepool add. Especifique os seguintes parâmetros:
--resource-group: insira o nome de um grupo de recursos existente para criar o cluster do AKS dentro dele.
--cluster-name: insira um nome exclusivo para o cluster do AKS, como myAKSCluster.
--name: insira um nome exclusivo para o seu pool de nós do cluster, como nodepool2.
--workload-runtime: especifique KataMshvVmIsolation para habilitar o recurso Restrição de Área de Pod no pool do nós. Paralelamente ao parâmetro --workload-runtime, esses outros parâmetros devem cumprir os requisitos a seguir. Caso contrário, o comando irá falhar e notificar um problema com os parâmetros correspondentes.
--os-sku: AzureLinux. Somente a SKU do SO do Azure Linux dá suporte a esse recurso na versão prévia.
--node-vm-size: qualquer tamanho de VM do Azure que seja uma VM de geração 2 e compatível com virtualização aninhada irá funcionar. Por exemplo, VMs Dsv3.
O exemplo a seguir adiciona um pool de nós ao myAKSCluster com um nó no nodepool2 dentro do myResourceGroup:
az aks nodepool add --cluster-name myAKSCluster --resource-group myResourceGroup --name nodepool2 --os-sku AzureLinux --workload-runtime KataMshvVmIsolation --node-vm-size Standard_D4s_v3
Execute o comando az aks update para habilitar a Restrição de Área de Pod (versão prévia) no cluster.
az aks update --name myAKSCluster --resource-group myResourceGroup
Implantar um aplicativo confiável
Para demonstrar a implantação de um aplicativo confiável no kernel compartilhado no cluster do AKS, execute as etapas a seguir.
Crie um arquivo chamado trusted-app.yaml para descrever um pod confiável e, a seguir, cole o seguinte manifesto.
O valor de runtimeClassNameSpec é kata-mhsv-vm-isolation.
Implante o pod do Kubernetes executando o comando kubectl apply e especifique o arquivo do seu untrusted-app.yaml:
kubectl apply -f untrusted-app.yaml
A saída do comando é semelhante ao seguinte exemplo:
pod/untrusted created
Verificar a configuração do Isolamento do Kernel
Para acessar um contêiner dentro do cluster do AKS, inicie uma sessão de shell executando o comando kubectl exec. Nesse exemplo, você está acessando o contêiner dentro do pod não confiável.
kubectl exec -it untrusted -- /bin/bash
O kubectl se conecta ao cluster, executa o /bin/sh dentro do primeiro contêiner dentro do pod não confiável e encaminha os fluxos de entrada e saída do seu terminal para o processo do contêiner. Você também pode iniciar uma sessão de shell para o contêiner que está hospedando o pod confiável.
Após iniciar uma sessão de shell para o contêiner do pod não confiável, você pode executar comandos para verificar se o contêiner não confiável está em execução em uma área restrita de pod. Você irá perceber que o contêiner tem uma versão de kernel diferente se comparado ao contêiner confiável fora da área restrita.
Para conferir a versão do kernel, execute o seguinte comando:
uname -r
O exemplo a seguir se assemelha à saída do kernel da área restrita do pod:
root@untrusted:/# uname -r
5.15.48.1-8.cm2
Inicie uma sessão de shell para o contêiner do pod confiável para verificar a saída do kernel:
kubectl exec -it trusted -- /bin/bash
Para conferir a versão do kernel, execute o seguinte comando:
uname -r
O exemplo a seguir se assemelha à saída da VM que está executando o pod confiável, que é um kernel diferente do pod não confiável em execução na área restrita do pod:
5.15.80.mshv2-hvl1.m2
Limpeza
Quando terminar de avaliar esse recurso, limpe seus recursos desnecessários para evitar uma cobrança do Azure. Se tiver implantado um novo cluster como parte de sua avaliação ou teste, você poderá excluir o cluster usando o comando az aks delete.
az aks delete --resource-group myResourceGroup --name myAKSCluster
Se tiver habilitado a Restrição de Área de Pod (versão prévia) em um cluster existente, você poderá remover o(s) pod(s) usando o comando kubectl delete pod.
kubectl delete pod pod-name
Próximas etapas
Saiba mais sobre Hosts Dedicados do Azure para nós com seu cluster do AKS para usar o isolamento de hardware e o controle sobre eventos de manutenção da plataforma do Azure.
Colaborar conosco no GitHub
A fonte deste conteúdo pode ser encontrada no GitHub, onde você também pode criar e revisar problemas e solicitações de pull. Para obter mais informações, confira o nosso guia para colaboradores.
Comentários do Azure Kubernetes Service
O Azure Kubernetes Service é um projeto código aberto. Selecione um link para fornecer comentários:
Use o Azure Policy para implementar políticas e proteções nos seus clusters do Kubernetes em larga escala. O Azure Policy garante que seu cluster se mantenha seguro, em conformidade e consistente em toda a sua organização.
Demonstre as habilidades necessárias para implementar controles de segurança, manter a postura de segurança de uma organização e identificar e corrigir vulnerabilidades de segurança.