Início Rápido: Implementar um cluster do AKS com nós de agente Intel SGX de computação confidencial com a CLI do Azure

Neste início rápido, irá utilizar a CLI do Azure para implementar um cluster de Azure Kubernetes Service (AKS) com nós de VM com suporte para enclaves (DCsv2/DCSv3). Em seguida, irá executar uma aplicação Hello World simples num enclave. Também pode aprovisionar um cluster e adicionar nós de computação confidenciais do portal do Azure, mas este início rápido foca-se na CLI do Azure.

O AKS é um serviço do Kubernetes gerido que permite aos programadores ou operadores de cluster implementar e gerir rapidamente clusters. Para saber mais, leia a introdução do AKS e a descrição geral dos nós confidenciais do AKS.

As funcionalidades dos nós de computação confidenciais incluem:

Nota

As VMs DCsv2/DCsv3 utilizam hardware especializado que está sujeito à disponibilidade da região. Para obter mais informações, veja os 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 predefinição, não existe uma quota pré-atribuída para tamanhos de VM Intel SGX para as suas subscrições do Azure. Deve seguir estas instruções para pedir quota de núcleo de VM para as suas subscrições.

Criar um cluster do AKS com nós de computação confidenciais com suporte para enclaves e suplemento Intel SGX

Utilize as seguintes instruções para criar um cluster do AKS com o suplemento Intel SGX ativado, adicione um conjunto de nós ao cluster e verifique o que criou com a aplicação hello world enclave.

Criar um cluster do AKS com um conjunto de nós de sistema e o AKS Intel SGX Addon

Nota

Se já tiver um cluster do AKS que cumpra os critérios de pré-requisito listados anteriormente, avance para a secção seguinte para adicionar um conjunto de nós de computação confidencial.

O "confcom" do Intel SGX AKS Addon expõe os controladores de dispositivo Intel SGX aos seus contentores para evitar alterações adicionais ao yaml do pod.

Em primeiro lugar, crie um grupo de recursos para o cluster com o comando az group create . O exemplo seguinte cria um grupo de recursos com o nome myResourceGroup na região eastus2 :

az group create --name myResourceGroup --location eastus2

Agora, crie um cluster do AKS, com o suplemento de computação confidencial ativado, com o comando az aks create :

az aks create -g myResourceGroup --name myAKSCluster --generate-ssh-keys --enable-addons confcom

O comando acima irá implementar um novo cluster do AKS com um conjunto de nós de sistema de nó de computação não confidencial. Os nós Intel SGX de computação confidencial não são recomendados para conjuntos de nós de sistema.

Adicionar um conjunto de nós de utilizador com capacidades de computação confidenciais ao cluster do AKS

Execute o seguinte comando para adicionar um conjunto de nós de utilizador com Standard_DC4s_v3 três nós ao cluster do AKS. 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 conjunto de nós com DCsv3 deve estar visível com o suplemento de computação confidencial DaemonSets (plug-in de dispositivo SGX).

Verificar o conjunto de nós e o suplemento

Obtenha as credenciais do cluster do AKS com o comando az aks get-credentials :

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Utilize o kubectl get pods comando para verificar se os nós são criados corretamente e que os DaemonSets relacionados com SGX estão em execução em conjuntos de nós DCsv2:

kubectl get pods --all-namespaces
kube-system     sgx-device-plugin-xxxx     1/1     Running

Se o resultado corresponder ao código anterior, o cluster do AKS está agora pronto para executar aplicações confidenciais.

Pode aceder à secção Implementar Hello World a partir de uma aplicação de enclave isolada neste início rápido para testar uma aplicação num enclave. Em alternativa, utilize as seguintes instruções para adicionar mais conjuntos de nós no AKS. (O AKS suporta a mistura de conjuntos de nós SGX e conjuntos de nós não SGX.)

Adicionar um conjunto de nós de computação confidencial a um cluster do AKS existente

Esta secção pressupõe que já está a executar um cluster do AKS que cumpre os critérios de pré-requisito listados anteriormente neste início rápido.

Ativar o suplemento do AKS de computação confidencial no cluster existente

Execute o seguinte comando para ativar o suplemento de computação confidencial:

az aks enable-addons --addons confcom --name MyManagedCluster --resource-group MyResourceGroup

Adicionar um conjunto de nós de utilizador DCsv3 ao cluster

Nota

Para utilizar a capacidade de computação confidencial, o cluster do AKS existente tem de ter um mínimo de um conjunto de nós baseado num SKU de VM DCsv2/DCsv3. Para saber mais sobre os SKUs de VMs DCs-v2/Dcs-v3 para computação confidencial, veja os SKUs disponíveis e as regiões suportadas.

Execute o seguinte comando para criar um conjunto 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 conjunto de nós com o nome confcompool1 foi criado:

az aks nodepool list --cluster-name myAKSCluster --resource-group myResourceGroup

Verifique se o DaemonSets está em execução em conjuntos de nós confidenciais

Inicie sessão no cluster do AKS existente para efetuar a seguinte verificação:

kubectl get nodes

O resultado deve mostrar o conjunto confcompool1 recentemente adicionado no cluster do AKS. Também poderá ver outros DaemonSets.

kubectl get pods --all-namespaces
kube-system     sgx-device-plugin-xxxx     1/1     Running

Se o resultado corresponder ao código anterior, o cluster do AKS está agora pronto para executar aplicações confidenciais.

Implementar Hello World a partir de uma aplicação de enclave isolada

Está agora pronto para implementar uma aplicação de teste.

Crie um ficheiro com o nome hello-world-enclave.yaml e cole o seguinte manifesto YAML. Pode encontrar este código de aplicação de exemplo no projeto Abrir Enclave. Esta implementação pressupõe que implementou o suplemento confcom .

Nota

O exemplo seguinte extrai uma imagem de contentor público do Docker Hub. Recomendamos que configure um segredo pull para autenticar com uma conta Docker Hub em vez de fazer um pedido Pull anónimo. Para melhorar a fiabilidade ao trabalhar com conteúdo público, importe e faça a gestão da imagem num registo de contentor 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

Em alternativa, também pode efetuar uma implementação de seleção de conjuntos de nós para as implementações de contentores, 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, utilize o kubectl apply comando para criar uma tarefa de exemplo que será aberta num enclave seguro, conforme mostrado na seguinte saída de exemplo:

kubectl apply -f hello-world-enclave.yaml
job "oe-helloworld" created

Pode confirmar que a carga de trabalho criou com êxito um Ambiente de Execução Fidedigna (enclave) ao executar 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!

Limpar os recursos

Para remover o conjunto de nós de computação confidencial que criou neste início rápido, utilize o seguinte comando:

az aks nodepool delete --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup

Para eliminar o cluster do AKS, utilize o seguinte comando:

az aks delete --resource-group myResourceGroup --cluster-name myAKSCluster

Passos seguintes