Guia de início rápido: implantar um cluster AKS com nós de agente Intel SGX de computação confidencial usando a CLI do Azure
Neste início rápido, você usará a CLI do Azure para implantar um cluster do Serviço Kubernetes do Azure (AKS) com nós de VM com reconhecimento de enclave (DCsv2/DCSv3). Em seguida, você executará um aplicativo Hello World simples em um enclave. Você também pode provisionar um cluster e adicionar nós de computação confidenciais do portal do Azure, mas este início rápido se concentra na CLI do Azure.
O AKS é um serviço Kubernetes gerenciado que permite que desenvolvedores ou operadores de cluster implantem e gerenciem clusters rapidamente. Para saber mais, leia a introdução do AKS e a visão geral dos nós confidenciais do AKS.
Os recursos dos nós de computação confidenciais incluem:
- Nós de trabalho Linux que suportam contêineres Linux.
- Máquina virtual (VM) de 2ª geração com nós de VM do Ubuntu 18.04.
- CPU compatível com Intel SGX para ajudar a executar seus contêineres em enclave protegido por confidencialidade aproveitando a memória EPC (Encrypted Page Cache). Para obter mais informações, consulte Perguntas frequentes sobre computação confidencial do Azure.
- Driver Intel SGX DCAP pré-instalado nos nós de computação confidenciais. Para obter mais informações, consulte Perguntas frequentes sobre computação confidencial do Azure.
Nota
As VMs DCsv2/DCsv3 usam hardware especializado que está sujeito à disponibilidade da região. Para obter mais informações, consulte as SKUs disponíveis e as regiões suportadas.
Pré-requisitos
Este início rápido requer:
Um mínimo de oito núcleos DCsv2/DCSv3/DCdsv3 disponíveis na sua subscrição.
Por padrão, não há cota pré-atribuída para tamanhos de VM Intel SGX para suas assinaturas do Azure. Você deve seguir estas instruções para solicitar a cota principal da VM para suas assinaturas.
Crie um cluster AKS com nós de computação confidenciais com reconhecimento de enclave e complemento Intel SGX
Use as instruções a seguir para criar um cluster AKS com o complemento Intel SGX habilitado, adicione um pool de nós ao cluster e verifique o que você criou com o aplicativo hello world enclave.
Crie um cluster AKS com um pool de nós do sistema e o AKS Intel SGX Addon
Nota
Se você já tiver um cluster AKS que atenda aos critérios de pré-requisito listados anteriormente, pule para a próxima seção para adicionar um pool de nós de computação confidencial.
Intel SGX AKS Addon "confcom" expõe os drivers de dispositivo Intel SGX para seus contêineres para evitar alterações adicionais ao seu pod yaml.
Primeiro, crie um grupo de recursos para o cluster usando o comando az group create . O exemplo a seguir cria um grupo de recursos chamado myResourceGroup na região eastus2 :
az group create --name myResourceGroup --location eastus2
Agora crie um cluster AKS, com o complemento de computação confidencial ativado, usando o comando az aks create :
az aks create -g myResourceGroup --name myAKSCluster --generate-ssh-keys --enable-addons confcom
O comando acima implantará um novo cluster AKS com pool de nós do sistema de nó de computação não confidencial. Computação confidencial Os nós Intel SGX não são recomendados para pools de nós do sistema.
Adicionar um pool de nós de usuário com recursos de computação confidenciais ao cluster AKS
Execute o seguinte comando para adicionar um pool de nós de usuário de Standard_DC4s_v3
tamanho com três nós ao cluster AKS. Você pode escolher outro SKU de tamanho maior na lista de SKUs e regiões DCsv2/DCsv3 suportados.
az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-vm-size Standard_DC4s_v3 --node-count 2
Depois de executar o comando, um novo pool de nós com DCsv3 deve estar visível com o complemento de computação confidencial DaemonSets (plug-in de dispositivo SGX).
Verifique o pool de nós e o complemento
Obtenha as credenciais para o seu cluster AKS usando o comando az aks get-credentials :
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Use o kubectl get pods
comando para verificar se os nós foram criados corretamente e se os DaemonSets relacionados ao SGX estão sendo executados em pools de nós DCsv2:
kubectl get pods --all-namespaces
kube-system sgx-device-plugin-xxxx 1/1 Running
Se a saída corresponder ao código anterior, o cluster AKS está agora pronto para executar aplicações confidenciais.
Você pode ir para a seção Implantar Hello World a partir de um aplicativo de enclave isolado neste início rápido para testar um aplicativo em um enclave. Ou use as instruções a seguir para adicionar mais pools de nós no AKS. (O AKS suporta a mistura de pools de nós SGX e pools de nós não SGX.)
Adicionar um pool de nós de computação confidencial a um cluster AKS existente
Esta seção pressupõe que você já esteja executando um cluster AKS que atenda aos critérios de pré-requisito listados anteriormente neste início rápido.
Habilite o complemento AKS de computação confidencial no cluster existente
Execute o seguinte comando para ativar o complemento de computação confidencial:
az aks enable-addons --addons confcom --name MyManagedCluster --resource-group MyResourceGroup
Adicionar um pool de nós de usuário DCsv3 ao cluster
Nota
Para usar o recurso de computação confidencial, seu cluster AKS existente precisa ter um mínimo de um pool de nós baseado em uma SKU de VM DCsv2/DCsv3. Para saber mais sobre SKUs de VMs DCs-v2/Dcs-v3 para computação confidencial, consulte as SKUs disponíveis e as regiões suportadas.
Execute o seguinte comando para criar um pool de nós:
az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-count 2 --node-vm-size Standard_DC4s_v3
Verifique se o novo pool de nós com o nome confcompool1 foi criado:
az aks nodepool list --cluster-name myAKSCluster --resource-group myResourceGroup
Verifique se os DaemonSets estão sendo executados em pools de nós confidenciais
Entre no cluster AKS existente para executar a seguinte verificação:
kubectl get nodes
A saída deve mostrar o pool confcompool1 recém-adicionado no cluster AKS. Você também pode ver outros DaemonSets.
kubectl get pods --all-namespaces
kube-system sgx-device-plugin-xxxx 1/1 Running
Se a saída corresponder ao código anterior, o cluster AKS está agora pronto para executar aplicações confidenciais.
Implantar o Hello World a partir de um aplicativo de enclave isolado
Agora você está pronto para implantar um aplicativo de teste.
Crie um arquivo chamado hello-world-enclave.yaml e cole no seguinte manifesto YAML. Você pode encontrar este código de aplicativo de exemplo no projeto Open Enclave. Essa implantação pressupõe que você tenha implantado o complemento confcom .
Nota
O exemplo a seguir extrai uma imagem de contêiner público do Docker Hub. Recomendamos que você configure um segredo de pull para autenticar usando uma conta do Docker Hub em vez de fazer uma solicitação pull anônima. Para melhorar a confiabilidade ao trabalhar com conteúdo público, importe e gerencie a imagem em um registro de contêiner privado do Azure. Saiba mais sobre como trabalhar com imagens públicas.
apiVersion: batch/v1
kind: Job
metadata:
name: oe-helloworld
namespace: default
spec:
template:
metadata:
labels:
app: oe-helloworld
spec:
containers:
- name: oe-helloworld
image: mcr.microsoft.com/acc/samples/oe-helloworld:latest
resources:
limits:
sgx.intel.com/epc: "10Mi"
requests:
sgx.intel.com/epc: "10Mi"
volumeMounts:
- name: var-run-aesmd
mountPath: /var/run/aesmd
restartPolicy: "Never"
volumes:
- name: var-run-aesmd
hostPath:
path: /var/run/aesmd
backoffLimit: 0
Como alternativa, você também pode fazer uma implantação de seleção de pool de nós para suas implantações de contêiner, conforme mostrado abaixo:
apiVersion: batch/v1
kind: Job
metadata:
name: oe-helloworld
namespace: default
spec:
template:
metadata:
labels:
app: oe-helloworld
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: agentpool
operator: In
values:
- acc # this is the name of your confidential computing nodel pool
- acc_second # this is the name of your confidential computing nodel pool
containers:
- name: oe-helloworld
image: mcr.microsoft.com/acc/samples/oe-helloworld:latest
resources:
limits:
sgx.intel.com/epc: "10Mi"
requests:
sgx.intel.com/epc: "10Mi"
volumeMounts:
- name: var-run-aesmd
mountPath: /var/run/aesmd
restartPolicy: "Never"
volumes:
- name: var-run-aesmd
hostPath:
path: /var/run/aesmd
backoffLimit: 0
Agora, use o kubectl apply
comando para criar um trabalho de exemplo que será aberto em um enclave seguro, conforme mostrado na saída de exemplo a seguir:
kubectl apply -f hello-world-enclave.yaml
job "oe-helloworld" created
Você pode confirmar se a carga de trabalho criou com êxito um Ambiente de Execução Confiável (enclave) executando os seguintes comandos:
kubectl get jobs -l app=oe-helloworld
NAME COMPLETIONS DURATION AGE
oe-helloworld 1/1 1s 23s
kubectl get pods -l app=oe-helloworld
NAME READY STATUS RESTARTS AGE
oe-helloworld-rchvg 0/1 Completed 0 25s
kubectl logs -l app=oe-helloworld
Hello world from the enclave
Enclave called into host to print: Hello World!
Clean up resources (Limpar recursos)
Para remover o pool de nós de computação confidencial que você criou neste início rápido, use o seguinte comando:
az aks nodepool delete --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup
Para excluir o cluster AKS, use o seguinte comando:
az aks delete --resource-group myResourceGroup --cluster-name myAKSCluster
Próximos passos
Execute Python, Node ou outros aplicativos através de contêineres confidenciais usando o software wrapper ISV/OSS SGX. Analise amostras confidenciais de recipientes no GitHub.
Execute aplicativos com reconhecimento de enclave usando os exemplos de contêiner do Azure com reconhecimento de enclave no GitHub.