Resolver problemas de implantação de cargas de trabalho privilegiadas do Autopilot


Nesta página, mostramos como resolver problemas com cargas de trabalho privilegiadas implantadas em clusters do Autopilot do Google Kubernetes Engine (GKE).

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

Quando você implanta um AllowlistSynchronizer, o GKE tenta instalar e sincronizar os arquivos de lista de permissões especificados. Se essa sincronização falhar, o campo status do AllowlistSynchronizer vai informar o erro.

Conseguir o status do objeto AllowlistSynchronizer:

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

O resultado será assim:

...
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"

Os campos conditions.message e managedAllowlistStatus.lastError fornecem informações detalhadas sobre o erro. Use essas informações para resolver o problema.

Problemas de implantação de cargas de trabalho privilegiadas

Depois de instalar uma lista de permissões, implante a carga de trabalho privilegiada correspondente no cluster. Em alguns casos, o GKE pode rejeitar a carga de trabalho.

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

  • Verifique se a versão do GKE do cluster atende ao requisito de versão da carga de trabalho.
  • Verifique se a carga de trabalho que você está implantando é a que se aplica ao arquivo de lista de permissões.

Para saber por que uma carga de trabalho privilegiada foi rejeitada, solicite informações detalhadas do GKE sobre violações de lista de permissões:

  1. Confira uma lista das listas de permissões instaladas no cluster:

    kubectl get workloadallowlist
    

    Encontre o nome da lista de permissões que deve ser aplicada à carga de trabalho privilegiada.

  2. Abra o manifesto YAML da carga de trabalho privilegiada em um editor de texto. Se você não conseguir acessar os manifestos YAML, por exemplo, se o processo de implantação de carga de trabalho usar outras ferramentas, entre em contato com o provedor de carga de trabalho para abrir um problema. Ignore as demais etapas.

  3. Adicione o seguinte rótulo à seçã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 permissões que você recebeu na etapa anterior. Use o nome da saída do comando kubectl get workloadallowlist, não o caminho para o arquivo de lista de permissões.

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

    kubectl apply -f WORKLOAD_MANIFEST_FILE
    

    Substitua WORKLOAD_MANIFEST_FILE pelo caminho para o arquivo de manifesto.

    A saída fornece informações detalhadas sobre quais campos na carga de trabalho não correspondem à lista de permissões especificada, como no exemplo a seguir:

    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 permissões não especifica hostNetwork: true.
    • A carga de trabalho especifica hostPID: true, mas a lista de permissões não especifica hostPID: true.
    • A carga de trabalho especifica um volume chamado data, mas a lista de permissões não especifica um volume chamado data.
    • O contêiner especifica variáveis de ambiente com os nomes ENV_VAR1 e ENV_VAR2, mas a lista de permissões não especifica essas variáveis.
    • O contêiner especifica a imagem k8s.gcr.io/diff/image, mas a lista de permissões especifica k8s.gcr.io/pause2.
    • O contêiner adiciona os recursos SYS_ADMIN e SYS_PTRACE, mas a lista de permissões não permite adicionar esses recursos.
    • O contêiner especifica um ponto de montagem de volume chamado data, mas a lista de permissões não especifica um ponto de montagem de volume chamado data.

Se você estiver implantando uma carga de trabalho fornecida por um provedor externo, abra um problema com esse provedor para resolver as violações. Informe a saída da etapa anterior no problema.

Bugs e solicitações de recursos para cargas de trabalho privilegiadas e listas de permissões

Os parceiros são responsáveis por criar, desenvolver e manter as listas de permissões e cargas de trabalho privilegiadas. Se você encontrar um bug ou tiver uma solicitação de recurso para uma carga de trabalho privilegiada ou lista de permissões, entre em contato com o parceiro correspondente.