Criptografar dados de carga de trabalho da GPU em uso com Confidential GKE Nodes

É possível criptografar dados de carga de trabalho de GPU em uso executando as cargas de trabalho em nós confidenciais do Google Kubernetes Engine criptografados. Nesta página, mostramos aos engenheiros e operadores de segurança como melhorar a segurança dos dados em cargas de trabalho aceleradas, como tarefas de IA/ML. Você precisa conhecer os seguintes conceitos:

Sobre a execução de cargas de trabalho de GPU em nós confidenciais do GKE

É possível solicitar nós confidenciais do GKE para suas cargas de trabalho de GPU usando um dos seguintes métodos:

Limitações

O modo Autopilot é compatível apenas com GPUs NVIDIA H100 (80 GB) com Confidential GKE Nodes.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ative a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando o comando gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.

Requisitos

Independente do método de configuração dos nós confidenciais do GKE escolhido, você precisa atender a todos os requisitos a seguir:

  • Os nós precisam estar em uma zona compatível com a Computação confidencial da NVIDIA. Para mais informações, consulte Ver zonas compatíveis.
  • Os nós precisam usar um tipo de máquina, uma tecnologia de computação confidencial e uma GPU compatíveis. Para mais informações, consulte Configurações compatíveis.
  • Você precisa ter cota preemptiva para as GPUs que quer usar nos locais dos nós. Por exemplo, se você usar GPUs NVIDIA H100 (80 GB), precisará ter cota para compute.googleapis.com/preemptible_nvidia_h100_gpus. Para mais informações sobre como gerenciar sua cota, consulte Visualizar e gerenciar cotas.

Além desses requisitos, você precisa atender a condições específicas dependendo do método de configuração dos nós confidenciais do GKE escolhido, conforme descrito na tabela a seguir:

Método de configuração Requisitos Limitações
ComputeClasses
  • Não é possível usar o início flexível com o provisionamento em fila com ComputeClasses.
  • Não é possível usar recursos de compartilhamento de GPU, como compartilhamento de tempo ou GPUs de várias instâncias.
Configuração manual no modo padrão
  • Use VMs spot, preemptivas, de início flexível (prévia) ou de início flexível com provisionamento em fila.
  • Use uma das seguintes versões do GKE:
    • Instalação manual do driver de GPU: 1.32.2-gke.1297000 ou mais recente.
    • Instalação automática do driver de GPU: 1.33.3-gke.1392000 ou mais recente.
    • Início flexível com provisionamento em fila: 1.32.2-gke.1652000 ou mais recente.
  • Não é possível usar o flex-start (prévia) se você ativar os Confidential GKE Nodes para todo o cluster.
  • Não é possível usar recursos de compartilhamento de GPU, como compartilhamento de tempo ou GPUs de várias instâncias.

Funções exigidas

Para receber as permissões necessárias para criar nós confidenciais do GKE, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto Cloud de Confiance :

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Usar ComputeClasses para executar cargas de trabalho confidenciais de GPU

É possível definir a configuração dos nós confidenciais do GKE em uma ComputeClass. As ComputeClasses são recursos personalizados do Kubernetes que permitem definir de forma declarativa configurações de nós para escalonamento automático e programação do GKE. Siga as etapas desta seção em qualquer cluster do Autopilot ou Standard que execute a versão 1.33.3-gke.1392000 ou mais recente do GKE.

Para usar uma ComputeClass e executar cargas de trabalho de GPU em nós confidenciais do GKE, siga estas etapas:

  1. Salve o seguinte manifesto ComputeClass como um arquivo YAML:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTECLASS_NAME
    spec:
      nodePoolConfig:
        confidentialNodeType: CONFIDENTIAL_COMPUTE_TECHNOLOGY
      priorityDefaults:
        location:
          zones: ['ZONE1','ZONE2']
      priorities:
      - gpu:
          type: GPU_TYPE
          count: GPU_COUNT
          driverVersion: default
        spot: true
      activeMigration:
        optimizeRulePriority: true
      nodePoolAutoCreation:
        enabled: true
      whenUnsatisfiable: DoNotScaleUp
    

    Substitua:

    • COMPUTECLASS_NAME: um nome para a ComputeClass.
    • CONFIDENTIAL_COMPUTE_TECHNOLOGY: a tecnologia de computação confidencial a ser usada, como TDX. Escolha uma tecnologia compatível com a GPU que você quer usar.

    • ZONE1,ZONE2: uma lista separada por vírgulas de zonas para criar nós, como ['us-central1-a','us-central1-b']. Especifique as zonas que oferecem suporte à tecnologia de computação confidencial e ao tipo de máquina que você quer usar. Para mais informações, consulte Ver zonas compatíveis.

    • GPU_TYPE: o tipo de GPU a ser usado, como nvidia-h100-80gb.

    • GPU_COUNT: o número de GPUs a serem anexadas a cada nó. Especifique um valor compatível com a VM confidencial para o tipo de GPU. Por exemplo, se você escolher o tipo de GPU nvidia-h100-80gb, especifique um valor de 1 neste campo.

  2. Crie a ComputeClass:

    kubectl apply -f PATH_TO_MANIFEST
    

    Substitua PATH_TO_MANIFEST pelo caminho para o arquivo de manifesto ComputeClass.

  3. Para executar sua carga de trabalho de GPU em nós confidenciais do GKE, selecione a ComputeClass no manifesto da carga de trabalho. Por exemplo, salve o seguinte manifesto de implantação, que seleciona uma ComputeClass e GPUs, como um arquivo YAML:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: confidential-gpu-deployment
      labels:
        app: conf-gpu
    spec:
      selector:
        matchLabels:
          app: conf-gpu
      replicas: 1
      template:
        metadata:
          labels:
            app: conf-gpu
        spec:
          nodeSelector:
            cloud.google.com/compute-class: COMPUTECLASS_NAME
          containers:
          - name: example-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            resources:
              limits:
                cpu: "4"
                memory: "16Gi"
                nvidia.com/gpu: GPU_REQUEST
              requests:
                cpu: "4"
                memory: "16Gi"
    

    Substitua:

    • COMPUTECLASS_NAME: o nome da ComputeClass que você criou.
    • GPU_REQUEST: o número de GPUs a serem usadas no contêiner. Especifique um valor menor ou igual ao que você informou no campo gpu.count da ComputeClass.
  4. Crie a implantação:

    kubectl apply -f PATH_TO_DEPLOYMENT_MANIFEST
    

    Substitua PATH_TO_DEPLOYMENT_MANIFEST pelo caminho para o manifesto do Deployment.

Ao criar a carga de trabalho de GPU, o GKE usa a configuração na ComputeClass para criar nós confidenciais do GKE com GPUs anexadas.

Configurar manualmente os Confidential GKE Nodes no GKE Standard

É possível executar cargas de trabalho de GPU em nós confidenciais do GKE em clusters ou pools de nós do modo Standard.

Ativar os Confidential GKE Nodes em novos clusters Standard

É possível ativar os nós confidenciais do GKE para todo o cluster padrão, para que cada pool de nós de GPU criado use a mesma tecnologia de computação confidencial. Ao criar um cluster no modo Standard que usa Confidential GKE Nodes para cargas de trabalho de GPU, especifique as seguintes configurações de cluster:

  • Local: uma região ou zona que oferece suporte à computação confidencial da NVIDIA. Para mais informações, consulte Ver zonas compatíveis.
  • Tipo de computação confidencial: uma tecnologia de computação confidencial que oferece suporte a GPUs. Para mais informações, consulte Configurações compatíveis.
  • Versão do cluster: uma das seguintes versões, dependendo de como você quer instalar os drivers de GPU:

    • Instalação manual do driver de GPU: 1.32.2-gke.1297000 ou mais recente.
    • Instalação automática do driver de GPU: 1.33.3-gke.1392000 ou mais recente.

Se quiser, configure GPUs para o pool de nós padrão que o GKE cria no cluster. No entanto, recomendamos que você use um pool de nós separado para as GPUs, para que pelo menos um pool de nós no cluster possa executar qualquer carga de trabalho.

Para mais informações, consulte Ativar os Confidential GKE Nodes em clusters Standard.

Usar nós confidenciais do GKE com GPUs em pools de nós padrão

Se o cluster não tiver os nós confidenciais do GKE ativados, é possível ativar esses nós em pools de nós da GPU específicos, novos ou atuais. O plano de controle e os pools de nós precisam atender aos requisitos na seção Disponibilidade. Ao configurar o pool de nós, você pode instalar os drivers de GPU automaticamente ou manualmente.

  • Para criar um pool de nós de GPU que usa nós confidenciais do GKE, selecione uma das seguintes opções:

    Console

    1. No console do Cloud de Confiance , acesse a página Clusters do Kubernetes:

      Acessar os clusters do Kubernetes

    2. Clique no nome do cluster no modo padrão que você quer modificar.

    3. Clique na guia Nós.

    4. Clique em Criar pool de nós gerenciado pelo usuário. A página Adicionar um pool de nós é aberta.

    5. No painel Detalhes do pool de nós, faça o seguinte:

      1. Selecione Especificar locais dos nós.
      2. Selecione apenas as zonas com suporte listadas na seção Disponibilidade.
      3. Verifique se a versão do plano de controle é uma das versões listadas na seção Disponibilidade.
    6. No menu de navegação, clique em Nós.

    7. No painel Configurar configurações do nó, faça o seguinte:

      1. Na seção Configuração da máquina, clique em GPUs.
      2. No menu Tipo de GPU, selecione um tipo de GPU compatível com a computação confidencial.
      3. No menu Número de GPUs, selecione o número de GPUs a serem anexadas a cada nó. Selecione um valor compatível com o tipo de GPU escolhido. Por exemplo, se você escolheu GPUs NVIDIA H100 (80 GB), selecione 1.
      4. Confira se a opção Ativar compartilhamento de GPU não está selecionada.
      5. Na seção Instalação do driver da GPU, selecione uma das seguintes opções:

        • Gerenciada pelo Google: o GKE instala automaticamente um driver. Se você selecionar essa opção, na lista suspensa Versão, escolha uma das seguintes versões de driver:

          • Padrão: instale a versão padrão do driver para a versão do GKE do nó. Requer o GKE versão 1.33.3-gke.1392000 ou posterior.
          • Mais recente: instale a versão mais recente do driver para a versão do GKE do nó. Requer o GKE versão 1.33.3-gke.1392000 ou posterior.
        • Gerenciada pelo usuário: pula a instalação automática do driver. Se você selecionar essa opção, será necessário instalar manualmente um driver de GPU compatível. Requer a versão 1.32.2-gke.1297000 ou mais recente.

      6. Na seção Tipo de máquina, verifique se o tipo de máquina é uma máquina com GPU compatível com a VM confidencial para o tipo de GPU selecionado.

      7. Selecione Ativar nós em VMs do Spot ou configure VMs de início flexível com provisionamento em fila.

    8. Quando estiver tudo pronto para criar o pool de nós, clique em Criar.

    gcloud

    É possível criar pools de nós de GPU que executam Confidential GKE Nodes em VMs Spot ou usando VMs de início flexível com provisionamento em fila.

    • Crie um pool de nós de GPU que execute nós confidenciais do GKE em VMs Spot:

      gcloud container node-pools create NODE_POOL_NAME \
          --cluster=CLUSTER_NAME \
          --confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY \
          --location=LOCATION \
          --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \
          --spot \
          --accelerator=type=GPU_TYPE,count=GPU_COUNT,gpu-driver-version=DRIVER_VERSION \
          --machine-type=MACHINE_TYPE
      

      Substitua:

      • NODE_POOL_NAME: um nome para o novo pool de nós.
      • CLUSTER_NAME: o nome do cluster atual.
      • CONFIDENTIAL_COMPUTE_TECHNOLOGY: a tecnologia de computação confidencial a ser usada, como TDX. Escolha uma tecnologia compatível com a GPU que você quer usar.
      • LOCATION: o local do novo pool de nós. O local precisa ser compatível com o uso de GPUs em nós confidenciais do GKE.
      • NODE_LOCATION1,NODE_LOCATION2,...: uma lista separada por vírgulas de zonas em que os nós serão executados. Especifique as zonas que oferecem suporte à tecnologia de Computação confidencial e ao tipo de máquina que você quer usar. Para mais informações, consulte Ver zonas compatíveis.
      • GPU_TYPE: o tipo de GPU a ser usado, como nvidia-h100-80gb.
      • GPU_COUNT: o número de GPUs que serão anexadas a cada nó. Especifique um valor compatível com a VM confidencial para o tipo de GPU. Por exemplo, se você escolher o tipo de GPU nvidia-h100-80gb, especifique um valor de 1 neste campo.

      • DRIVER_VERSION: a versão do driver da GPU a ser instalada. Especifique um dos seguintes valores:

        • default: instale a versão padrão do driver para a versão do GKE do nó. Requer o GKE versão 1.33.3-gke.1392000 ou posterior.
        • latest: instale a versão mais recente do driver para a versão do GKE do nó. Requer o GKE versão 1.33.3-gke.1392000 ou posterior.
        • disabled: pule a instalação automática do driver. Se você especificar esse valor, será necessário instalar manualmente um driver de GPU compatível. Requer a versão 1.32.2-gke.1297000 ou mais recente.
      • MACHINE_TYPE: o tipo de máquina a ser usado para os nós. Especifique um tipo de máquina com GPU compatível com a VM confidencial para o tipo de GPU selecionado.
    • Crie um pool de nós de GPU que execute nós confidenciais do GKE usando VMs de início flexível com provisionamento em fila:

      gcloud container node-pools create NODE_POOL_NAME \
          --cluster=CLUSTER_NAME \
          --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \
          --machine-type=MACHINE_TYPE \
          --confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY \
          --location=LOCATION \
          --flex-start --enable-queued-provisioning \
          --enable-autoscaling --num-nodes=0 --total-max-nodes=TOTAL_MAX_NODES \
          --location-policy=ANY --reservation-affinity=none --no-enable-autorepair \
          --accelerator=type=GPU_TYPE,count=GPU_COUNT,gpu-driver-version=DRIVER_VERSION
      

      Substitua TOTAL_MAX_NODES pelo número máximo de nós que o pool de nós pode escalonar automaticamente.

      Para mais informações sobre as opções de configuração no início flexível com provisionamento em fila, consulte Executar uma carga de trabalho em grande escala com início flexível e provisionamento em fila.

  • Para atualizar os pools de nós atuais para usar o Computação confidencial, consulte Atualizar um pool de nós.

Instalar manualmente drivers de GPU compatíveis com os Confidential GKE Nodes

Se você não ativou a instalação automática de drivers ao criar ou atualizar os pools de nós, instale manualmente um driver de GPU compatível com nós confidenciais do GKE.

Essa mudança exige a recriação dos nós, o que pode causar interrupções nas cargas de trabalho em execução. Para mais detalhes sobre essa mudança específica, encontre a linha correspondente na tabela Alterações manuais que recriam os nós usando uma estratégia de upgrade de nós sem respeitar as políticas de manutenção. Para saber mais sobre atualizações de nós, consulte Planejar interrupções de atualização de nós.

Para instruções, consulte a guia "COS" em Instalar manualmente os drivers de GPU NVIDIA.

Resolver problemas

Para informações sobre solução de problemas, consulte Resolver problemas de GPUs no GKE.

A seguir