Início rápido: implantar um cluster do 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 AKS (Serviço de Kubernetes do Azure) com nós de VM (DCsv2/DCSv3) com reconhecimento de enclave. Em seguida, você executará um aplicativo Olá, Mundo simples em um enclave. Você também pode provisionar um cluster e adicionar nós de computação confidencial por meio do portal do Azure, mas esse início rápido se concentra na CLI do Azure.

O AKS é um serviço Kubernetes gerenciado que permite aos desenvolvedores ou aos operadores de cluster implantar e gerenciar 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 confidencial incluem:

Observação

As VMs DCsv2/DCsv3 usam hardware especializado que estão sujeitos à disponibilidade por região. Para obter mais informações, confira os SKUs disponíveis e as regiões com suporte.

Pré-requisitos

Este início rápido requer:

  • Há pelo menos oito núcleos DCsv2/DCSv3/DCdsv3 disponíveis na sua assinatura.

    Por padrão, não há cota pré-atribuída para tamanhos de VM Do Intel SGX para suas assinaturas do Azure. Você deve seguir estas instruções para solicitar a cota principal da VM para suas assinaturas.

Criar um cluster do AKS com nós e complemento Intel SGX de computação confidenciais com reconhecimento de enclave

Use as instruções a seguir para criar um cluster AKS com o complemento Intel SGX de computação confidencial habilitado, adicionar um pool de nós ao cluster e verificar o que você criou com o aplicativo Olá, Mundo enclave.

Criar um cluster do AKS com um pool de nós do sistema e um Complemento Intel SGX do AKS

Observação

Se você já tem um cluster do AKS que atende aos critérios pré-requisitos listados acima, vá diretamente para a próxima seção para adicionar um pool de nós de computação confidencial.

A "configuração" do Complemento do Intel SGX AKS expõe os drivers de dispositivo Intel SGX para seus contêineres para evitar alterações adicionadas ao seu yaml de pod.

Primeiro, crie um grupo de recursos para o cluster usando o comando az group create. O seguinte exemplo cria um grupo de recursos chamado myResourceGroup na região eastus2:

az group create --name myResourceGroup --location eastus2

Agora, crie um cluster do AKS com o complemento de computação confidencial habilitado, 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 do AKS com o pool de nós do sistema de nó de computação não confidencial. Nós Intel SGX de computação confidencial não são recomendados para pools de nós do sistema.

Adicione um pool de nós de usuário com funcionalidades de computação confidencial ao cluster do AKS

Execute o comando a seguir para adicionar um pool de nós de usuário de tamanho Standard_DC4s_v3 com três nós ao cluster do AKS. Você pode escolher outro SKU de tamanho maior na lista de SKUs e regiões DCsv2/DCsv3 com suporte.

az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-vm-size Standard_DC4s_v3 --node-count 2

Após a execução do comando, um novo pool de nós com DCsv3 deverá ficar visível com os DaemonSets do complemento de computação confidencial (Plug-in de dispositivo da SGX).

Verificar o pool de nós e o complemento

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

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

Use o comando kubectl get pods para verificar se os nós foram criados corretamente e se os DaemonSets relacionados a SGX estão em execução 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 do AKS estará pronto para executar aplicativos confidenciais.

Você pode ir para a seção Implantar Olá, Mundo de um aplicativo 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 ao AKS. (O AKS dá suporte à combinação 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 do AKS existente

Esta seção pressupõe que você já está executando um cluster AKS que atende aos critérios de pré-requisito listados anteriormente neste início rápido.

Habilitar o complemento de computação confidencial do AKS no cluster existente

Execute o seguinte comando para habilitar 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

Observação

Para usar a funcionalidade de computação confidencial, o cluster do AKS existente precisa ter pelo menos um pool de nós baseado em um SKU de VM DCsv2/DCsv3. Para saber mais sobre os SKUs de VMs DCs-v2/DCs-v3 para computação confidencial, confira SKUs disponíveis e regiões com suporte.

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

Verificar se os DaemonSets estão em execução nos pools de nós confidenciais

Entre no cluster do AKS existente para executar a seguinte verificação:

kubectl get nodes

A saída deve mostrar o pool confcompool1 recém-adicionado no cluster do AKS. Você também poderá 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 do AKS estará pronto para executar aplicativos confidenciais.

Implantar o Olá, Mundo de um aplicativo enclave isolado

Agora você está pronto para implantar um aplicativo de teste.

Crie um arquivo chamado hello-world-enclave.yaml e cole no manifesto YAML a seguir. Você pode encontrar esse código de aplicativo de exemplo no projeto de enclave aberto. Essa implantação pressupõe que você implantou o complemento confcom.

Observação

O exemplo a seguir efetua pull de uma imagem de contêiner público do Docker Hub. É recomendável configurar um segredo de pull para autenticar-se usando uma conta do Docker Hub em vez de fazer uma solicitação de pull anônima. Para melhorar a confiabilidade ao trabalhar com o 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 comando kubectl apply para criar um trabalho de exemplo que será aberto em um enclave seguro, conforme mostrado na seguinte saída de exemplo:

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

Você pode confirmar se a carga de trabalho criou com sucesso um enclave (Ambiente de Execução Confiável) 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!

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 do AKS, use o seguinte comando:

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

Próximas etapas