Compartilhar via


Restrição de Área de Pod (versão prévia) com o Serviço de Kubernetes do Azure (AKS)

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 Restrição de Área de Pod fornece um limite de isolamento entre o aplicativo de contêiner e os recursos compartilhados de kernel e computação do host do contêiner. Por exemplo, 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.

  • O Microsoft Defender para Contêineres não dá suporte à avaliação de pods de runtime do Kata.

  • Não há suporte para o host-rede do Kata.

Como ele funciona

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

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

    az aks create 
        --name myAKSCluster \
        --resource-group myResourceGroup \
        --os-sku AzureLinux \
        --workload-runtime KataMshvVmIsolation \
        --node-vm-size Standard_D4s_v3 \
        --node-count 1 \
        --generate-ssh-keys
    
  2. 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
    
  3. 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:

  • Siga as etapas para registrar o sinalizador do recurso KataVMIsolationPreview.
  • 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.

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

  1. Crie um arquivo chamado trusted-app.yaml para descrever um pod confiável e, a seguir, cole o seguinte manifesto.

    kind: Pod
    apiVersion: v1
    metadata:
      name: trusted
    spec:
      containers:
      - name: trusted
        image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
        command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
    
  2. Implante o pod do Kubernetes executando o comando kubectl apply e especifique o arquivo do seu trusted-app.yaml:

    kubectl apply -f trusted-app.yaml
    

    A saída do comando é semelhante ao seguinte exemplo:

    pod/trusted created
    

Implantar um aplicativo não confiável

Para demonstrar a implantação de um aplicativo confiável no kernel compartilhado no cluster do AKS, execute as etapas a seguir.

  1. Crie um arquivo chamado untrusted-app.yaml para descrever um pod não confiável e, a seguir, cole o seguinte manifesto.

    kind: Pod
    apiVersion: v1
    metadata:
      name: untrusted
    spec:
      runtimeClassName: kata-mshv-vm-isolation
      containers:
      - name: untrusted
        image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
        command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
    

    O valor de runtimeClassNameSpec é kata-mhsv-vm-isolation.

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

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

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