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. Google Cloud
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.
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 workloadallowlist
Encontre 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.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 comandokubectl get workloadallowlist
e 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_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 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_VAR1
eENV_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_ADMIN
eSYS_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. Forneça 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-engine
para pesquisar problemas semelhantes. Também pode juntar-se ao#kubernetes-engine
canal do Slack para receber mais apoio técnico da comunidade. - Abrir erros ou pedidos de funcionalidades através do rastreador de problemas público.