Resolva problemas de implementação de cargas de trabalho privilegiadas do Autopilot


Esta página mostra como resolver problemas com cargas de trabalho privilegiadas que implementa em clusters do Autopilot do Google Kubernetes Engine (GKE).

Problemas de sincronização da lista de autorizações

Quando implementa um AllowlistSynchronizer, o GKE tenta instalar e sincronizar os ficheiros da lista de autorizações que especificar. Se esta sincronização falhar, o campo status de AllowlistSynchronizer comunica o erro.

Obtenha o estado do objeto AllowlistSynchronizer:

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

O resultado é semelhante ao seguinte:

...
status:
  conditions:
  - type: Ready
    status: "False"
    reason: "SyncError"
    message: "some allowlists failed to sync: example-allowlist-1.yaml"
    lastTransitionTime: "2024-10-12T10:00:00Z"
    observedGeneration: 2
  managedAllowlistStatus:
    - filePath: "gs://path/to/allowlist1.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/allowlist2.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

O campo conditions.message e o campo managedAllowlistStatus.lastError fornecem informações detalhadas sobre o erro. Use estas informações para resolver o problema.

Problemas de implementação de cargas de trabalho privilegiadas

Depois de instalar com êxito uma lista de autorizações, implemente a carga de trabalho privilegiada correspondente no cluster. Em alguns casos, o GKE pode rejeitar a carga de trabalho.

Experimente as seguintes opções de resolução:

  • Certifique-se de que a versão do GKE do seu cluster cumpre o requisito de versão da carga de trabalho.
  • Certifique-se de que a carga de trabalho que está a implementar é a carga de trabalho à qual o ficheiro da lista de autorizações se aplica.

Para ver o motivo pelo qual uma carga de trabalho privilegiada foi rejeitada, peça informações detalhadas ao GKE sobre violações da lista de autorizações:

  1. Obtenha uma lista das listas de autorizações instaladas no cluster:

    kubectl get workloadallowlist
    

    Encontre o nome da lista de autorizações que deve aplicar-se à carga de trabalho privilegiada.

  2. Abra o manifesto YAML da carga de trabalho privilegiada num editor de texto. Se não conseguir aceder aos manifestos YAML, por exemplo, se o processo de implementação da carga de trabalho usar outras ferramentas, contacte o fornecedor da carga de trabalho para abrir um problema. Ignore os passos restantes.

  3. Adicione a seguinte etiqueta à secção spec.metadata.labels da especificação do pod de carga de trabalho privilegiada:

    labels:
      cloud.google.com/matching-allowlist: ALLOWLIST_NAME
    

    Substitua ALLOWLIST_NAME pelo nome da lista de autorizações que obteve no passo anterior. Use o nome da saída do comando kubectl get workloadallowlist e não o caminho para o ficheiro da lista de autorizações.

  4. Guarde o manifesto e aplique a carga de trabalho ao cluster:

    kubectl apply -f WORKLOAD_MANIFEST_FILE
    

    Substitua WORKLOAD_MANIFEST_FILE pelo caminho para o ficheiro de manifesto.

    O resultado fornece informações detalhadas sobre os campos na carga de trabalho que não corresponderam à lista de autorizações especificada, como no exemplo seguinte:

    Error from server (GKE Warden constraints violations): error when creating "STDIN": admission webhook "warden-validating.common-webhooks.networking.gke.io" denied the request:
    
    ===========================================================================
    Workload Mismatches Found for Allowlist (example-allowlist-1):
    ===========================================================================
    HostNetwork Mismatch: Workload=true, Allowlist=false
    HostPID Mismatch: Workload=true, Allowlist=false
    Volume[0]: data
             - data not found in allowlist. Verify volume with matching name exists in allowlist.
    Container[0]:
    - Envs Mismatch:
            - env[0]: 'ENV_VAR1' has no matching string or regex pattern in allowlist.
            - env[1]: 'ENV_VAR2' has no matching string or regex pattern in allowlist.
    - Image Mismatch: Workload=k8s.gcr.io/diff/image, Allowlist=k8s.gcr.io/pause2. Verify that image string or regex match.
    - SecurityContext:
            - Capabilities.Add Mismatch: the following added capabilities are not permitted by the allowlist: [SYS_ADMIN SYS_PTRACE]
    - VolumeMount[0]: data
            - data not found in allowlist. Verify volumeMount with matching name exists in allowlist.
    

    Neste exemplo, ocorrem as seguintes violações:

    • A carga de trabalho especifica hostNetwork: true, mas a lista de autorizações não especifica hostNetwork: true.
    • A carga de trabalho especifica hostPID: true, mas a lista de autorizações não especifica hostPID: true.
    • A carga de trabalho especifica um volume denominado data, mas a lista de autorizações não especifica um volume denominado data.
    • O contentor especifica variáveis de ambiente denominadas ENV_VAR1 e ENV_VAR2, mas a lista de autorizações não especifica estas variáveis de ambiente.
    • O contentor especifica a imagem k8s.gcr.io/diff/image, mas a lista de autorizações especifica k8s.gcr.io/pause2.
    • O contentor adiciona as capacidades SYS_ADMIN e SYS_PTRACE, mas a lista de autorizações não permite a adição destas capacidades.
    • O contentor especifica uma montagem de volume denominada data, mas a lista de autorizações não especifica uma montagem de volume denominada data.

Se estiver a implementar uma carga de trabalho fornecida por um fornecedor externo, abra um problema com esse fornecedor para resolver as violações. Indique o resultado do passo anterior no problema.

Erros e pedidos de funcionalidades para cargas de trabalho privilegiadas e listas de autorizações

Os parceiros são responsáveis pela criação, desenvolvimento e manutenção das respetivas cargas de trabalho privilegiadas e listas de autorizações. Se encontrar um erro ou tiver um pedido de funcionalidade para uma carga de trabalho privilegiada ou uma lista de autorizações, contacte o parceiro correspondente.

O que se segue?