Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Para ajudar a proteger suas cargas de trabalho de contêiner contra códigos não confiáveis ou potencialmente mal-intencionados, o AKS agora inclui um mecanismo chamado Pod Sandboxing. 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. Os aplicativos são transformados em VMs (máquinas virtuais) de pods leves isoladas. 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
A CLI do Azure versão 2.80.0 ou posterior. Execute
az --versionpara localizar a versão da CLI do Azure e executeaz upgradepara atualizar. Para obter mais detalhes, consulte as etapas na instalação da CLI do Azure.O AKS dá suporte ao Pod Sandboxing no Kubernetes versão 1.27.0 e superior.
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.
Limitações
Veja a seguir as restrições aplicáveis ao Pod Sandboxing:
Os Kata Containers podem não atingir os limites de desempenho de IOPS que os contêineres tradicionais conseguem alcançar nos Azure Files e no SSD local 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 acesso à rede de host kata. Não é possível acessar diretamente a configuração de rede de host de dentro da VM.
A alocação de CPU e memória com o Pod Sandboxing tem outras considerações em comparação com
runc. Faça referência às seções de gerenciamento de memória na página considerações.
Como ele funciona
O Pod Sandboxing no AKS baseia-se no projeto kata containers de software livre. Kata Containers em execução no host de contêiner Linux do Azure para AKS fornece isolamento baseado em máquina virtual (VM) e um kernel separado para cada pod. O Pod Sandboxing permite que os usuários aloquem recursos para cada pod e não os compartilham com outros contêineres kata ou contêineres de namespace em execução no mesmo host.
A arquitetura da solução baseia-se nos seguintes componentes principais:
- O host de contêiner do Azure Linux para AKS
- Hipervisor Hyper-V da Microsoft
- Monitor de Máquina Virtual (VMM) de código aberto do Hipervisor de Nuvem
- Integração com o Kata Container para o tempo de execução
Implantar o Pod Sandboxing usando contêineres Kata é semelhante ao fluxo de trabalho padrão containerd para implantar contêineres. Os clusters com o Pod Sandboxing habilitado vêm com uma classe de runtime específica que pode ser referenciada em um manifesto de pod (runtimeClassName: kata-vm-isolation).
Para usar esse recurso com um pod, a única diferença é adicionar o runtimeClassNamekata-vm-isolation à especificação do pod. Quando um pod usa o kata-vm-isolation runtimeClass, o hipervisor cria uma máquina virtual leve com seu próprio kernel, para que a carga de trabalho opere.
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 KataVmIsolation para habilitar o recurso Pod em área restrita no pool de nós. Com esse parâmetro, esses outros parâmetros devem atender aos requisitos a seguir. Caso contrário, o comando falhará e relatará um problema com os parâmetros correspondentes.
- --os-sku: AzureLinux. Somente o sistema operacional Linux do Azure dá suporte a esse recurso.
- --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 KataVmIsolation \ --node-vm-size Standard_D4s_v3 \ --node-count 3 \ --generate-ssh-keysExecute 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 myAKSClusterListe 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 versão 1.27.0 e superior.
Use o comando a seguir para habilitar o Pod Sandboxing criando um pool de nós para hospedá-lo.
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 KataVmIsolation para habilitar o recurso Pod em área restrita no pool de nós. Paralelamente ao parâmetro
--workload-runtime, esses outros parâmetros devem cumprir os requisitos a seguir. Caso contrário, o comando falhará e relatará um problema com o parâmetro correspondente.- --os-sku: AzureLinux. Somente o sistema operacional Linux do Azure dá suporte a esse recurso.
- --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 KataVmIsolation --node-vm-size Standard_D4s_v3Execute o comando az aks update para habilitar o pod em área restrita no cluster.
az aks update --name myAKSCluster --resource-group myResourceGroup
Implantando seus aplicativos
Com o Pod em área restrita, você pode implantar uma combinação de pods "normais" que não utilizam o runtime Kata ao lado de pods Kata que utilizam o runtime. A principal diferença entre os dois, ao implantar, reside no fato de que um pod Kata tem a linha runtimeClassName: kata-vm-isolation em sua especificação.
Implantar um aplicativo com o runtime do Kata
Para implantar um pod com o runtime Kata no cluster do AKS, execute as etapas a seguir.
Crie um arquivo chamado kata-app.yaml para descrever seu pod kata e então cole o manifesto a seguir.
kind: Pod apiVersion: v1 metadata: name: isolated-pod spec: runtimeClassName: kata-vm-isolation containers: - name: kata 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-vm-isolation.Implante o pod kubernetes executando o comando kubectl apply e especifique o arquivo kata-app.yaml :
kubectl apply -f kata-app.yamlA saída do comando é semelhante ao seguinte exemplo:
pod/isolated-pod created
(Opcional) Verificar a configuração de isolamento do kernel
Se você quiser verificar a diferença entre o kernel de um pod Kata e um que não utiliza Kata, poderá iniciar outra carga de trabalho que não tenha o tempo de execução Kata.
kind: Pod
apiVersion: v1
metadata:
name: normal-pod
spec:
containers:
- name: non-kata
image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
Para acessar um contêiner dentro do cluster do AKS, inicie uma sessão de shell executando o comando kubectl exec. Neste exemplo, você está acessando o contêiner dentro do kata-pod.
kubectl exec -it isolated-pod -- /bin/shO kubectl se conecta ao seu cluster, executa
/bin/shdentro do primeiro contêiner emisolated-pod, 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 no contêiner que hospeda o pod não-Kata para ver as diferenças.Depois de iniciar uma sessão de shell para o contêiner do kata-pod, você pode executar comandos para verificar se o contêiner kata está em execução em uma sandbox de pod. Observe que ele tem uma versão de kernel diferente em comparação com o contêiner não Kata fora do sandbox.
Para conferir a versão do kernel, execute o seguinte comando:
uname -rO exemplo a seguir se assemelha à saída do kernel da área restrita do pod:
[user]/# uname -r 6.6.96.mshv1Inicie uma sessão de shell para o contêiner do pod normal para verificar a saída do kernel:
kubectl exec -it normal-pod -- /bin/bashPara conferir a versão do kernel, execute o seguinte comando:
uname -rO exemplo a seguir se assemelha à saída da VM que está executando o pod normal, que é um kernel diferente do pod Kata em execução no pod em área restrita.
6.6.100.mshv1-1.azl3
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 você implantou o Pod Sandboxing em um cluster existente, poderá remover os pods usando o comando kubectl delete pod.
kubectl get pods
kubectl delete pod <kata-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.
- Para explorar ainda mais o isolamento do Pod Sandboxing e explorar cenários de carga de trabalho, experimente os laboratórios de Pod Sandboxing.