As cargas de trabalho privilegiadas nos clusters do Google Kubernetes Engine (GKE) Autopilot têm de ser configuradas corretamente para evitar problemas. As configurações incorretas podem levar a falhas de sincronização com as listas de autorizações ou fazer com que a carga de trabalho seja rejeitada. Estes problemas podem impedir a execução de agentes ou serviços essenciais com as autorizações necessárias.
Use este documento para resolver problemas com a implementação de cargas de trabalho privilegiadas no Autopilot. Encontre orientações sobre como resolver erros de sincronização da lista de autorizações e diagnosticar o motivo pelo qual uma carga de trabalho privilegiada pode ser rejeitada.
Estas informações são importantes para os administradores e os operadores da plataforma, bem como para as equipas de segurança que implementam cargas de trabalho com autorizações elevadas em clusters do Autopilot. Para mais informações sobre as funções comuns e as tarefas de exemplo a que fazemos referência no conteúdo, consulte o artigo Funções de utilizador e tarefas comuns do GKE. Cloud de Confiance by S3NS
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.
Vários AllowlistSynchronizers
Nos clusters do GKE em versões anteriores a 1.33.4-gke.1035000, a instalação do WorkloadAllowlists pode falhar se estiver presente mais do que um AllowlistSynchronizer.
Para resolver o problema, use apenas um único AllowlistSynchronizer que contenha
vários allowlistPaths.
Em alternativa, pode atualizar o cluster para uma versão mais recente.
Ordenação de contentores de carga de trabalho
Nos clusters do GKE em versões anteriores a 1.34.0-gke.0000000, se uma ou mais imagens de contentores de cargas de trabalho corresponderem a uma imagem de contentor especificada numa WorkloadAllowlist no cluster, os contentores de cargas de trabalho podem ser criados e ordenados por ordem alfabética inversa.
Para resolver este problema, experimente as seguintes opções:
- Atualize o cluster para a versão 1.34.0-gke.0000000 ou posterior.
- Mude o nome dos contentores da carga de trabalho para que sejam ordenados pela ordem correta.
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:
Obtenha uma lista das listas de autorizações instaladas no cluster:
kubectl get workloadallowlistEncontre o nome da lista de autorizações que deve aplicar-se à carga de trabalho privilegiada.
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.
Adicione a seguinte etiqueta à secção
spec.metadata.labelsda especificação do pod de carga de trabalho privilegiada:labels: cloud.google.com/matching-allowlist: ALLOWLIST_NAMESubstitua
ALLOWLIST_NAMEpelo nome da lista de autorizações que obteve no passo anterior. Use o nome da saída do comandokubectl get workloadallowliste não o caminho para o ficheiro da lista de autorizações.Guarde o manifesto e aplique a carga de trabalho ao cluster:
kubectl apply -f WORKLOAD_MANIFEST_FILESubstitua
WORKLOAD_MANIFEST_FILEpelo 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 especificahostNetwork: true. - A carga de trabalho especifica
hostPID: true, mas a lista de autorizações não especificahostPID: true. - A carga de trabalho especifica um volume denominado
data, mas a lista de autorizações não especifica um volume denominadodata. - O contentor especifica variáveis de ambiente denominadas
ENV_VAR1eENV_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 permissões especificak8s.gcr.io/pause2. - O contentor adiciona as capacidades
SYS_ADMINeSYS_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 denominadadata.
- A carga de trabalho especifica
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?
Se não conseguir encontrar uma solução para o seu problema na documentação, consulte a secção Obtenha apoio técnico para receber mais ajuda, incluindo aconselhamento sobre os seguintes tópicos:
- Abrindo um registo de apoio técnico através do contacto com o Cloud Customer Care.
- Receber apoio técnico da comunidade fazendo perguntas no StackOverflow e usando a etiqueta
google-kubernetes-enginepara pesquisar problemas semelhantes. Também pode juntar-se ao#kubernetes-enginecanal do Slack para receber mais apoio técnico da comunidade. - Abrir erros ou pedidos de funcionalidades através do rastreador de problemas público.