Esta página mostra como resolver problemas relacionados com a encriptação de segredos da camada de aplicação no Google Kubernetes Engine (GKE).
Falha na atualização
Quando atualiza a configuração de encriptação de segredos da camada de aplicação, o GKE tem de reescrever todos os objetos Secret no cluster do Kubernetes. O GKE faz isto para garantir que todos os segredos são encriptados pela nova chave do Cloud KMS ou são escritos sem encriptação, se for essa a configuração.
Esta operação de atualização pode falhar devido a qualquer uma das seguintes condições:
- O plano de controlo do Kubernetes está temporariamente indisponível enquanto a atualização está em curso.
- Um
AdmissionWebhook
definido pelo utilizador impede que o GKE consiga atualizar objetos Secret. - A chave do Cloud KMS atualizada ou anterior está desativada antes da conclusão da operação de atualização.
Até que a operação de atualização seja bem-sucedida, não interaja com as chaves do Cloud KMS atualizadas nem anteriores.
Campos de depuração
Os clusters do GKE novos com a versão 1.29 e posteriores contêm
campos adicionais que ajudam a monitorizar as atualizações de Cluster.DatabaseEncryption
e a recuperar de falhas.
Os passos seguintes aplicam-se apenas a clusters em que o campo DatabaseEncryption.CurrentState
não está vazio. Se o campo CurrentState
estiver vazio, a funcionalidade ainda não está ativada nesta versão do cluster.
Os seguintes limites aplicam-se a estes campos:
- São apenas de saída, o que significa que não os pode definir durante os pedidos de criação ou atualização de clusters.
CurrentState
campo
Pode inspecionar o estado atual de uma DatabaseEncryption
operação de atualização
examinando o campo CurrentState
em Cluster.DatabaseEncryption
.
Valor de CurrentState |
Descrição |
---|---|
|
A operação de atualização mais recente foi bem-sucedida. Não é necessária nenhuma ação adicional. Pode eliminar todas as chaves usadas anteriormente. |
|
A atualização está em curso. |
|
Ocorreu um erro com a atualização mais recente. Não desative nem destrua nenhuma chave do Cloud KMS usada anteriormente, uma vez que podem ainda estar a ser usadas pelo GKE.
Consulte o campo |
LastOperationErrors
campo
Quando uma operação de atualização falha, o erro subjacente do plano de controlo do GKE é apresentado no resultado de gcloud container clusters update
.
As mensagens de erro das duas operações de atualização com falhas mais recentes também estão
disponíveis em Cluster.DatabaseEncryption.LastOperationErrors
.
DecryptionKeys
campo
A chave do Cloud KMS usada para novas operações de encriptação é apresentada em
DatabaseEncryption.KeyName
. Normalmente, esta é a única chave usada pelo cluster.
No entanto, DatabaseEncryption.DecryptionKeys
contém chaves adicionais que também são usadas pelo cluster se uma atualização estiver em curso ou após uma falha.
Recupere-se de uma atualização com falha
Para recuperar de uma atualização com falha, faça o seguinte:
- Examine a mensagem de erro e resolva os problemas indicados.
- Volte a tentar o pedido de atualização executando o comando com falha, como
gcloud container clusters update ... --database-encryption-key
. Recomendamos que tente novamente com o mesmo pedido de atualização que emitiu originalmente ou atualize o cluster para o estado anterior. O GKE pode não conseguir fazer a transição para uma chave ou um estado de encriptação diferente se não conseguir ler um ou mais segredos.
As secções seguintes indicam motivos comuns para os erros.
Erro de chave do Cloud KMS
Se a mensagem de erro contiver uma referência a uma ou mais chaves do Cloud KMS, examine a configuração das chaves do Cloud KMS para se certificar de que as versões das chaves relevantes são utilizáveis.
Se o erro indicar que uma chave do Cloud KMS foi desativada ou destruída, reative a chave ou a versão da chave.
Erro: não é possível usar a chave do CloudKMS configurada para a encriptação ao nível da aplicação
A seguinte mensagem de erro ocorre se a conta de serviço predefinida do GKE não conseguir aceder à chave do Cloud KMS:
Cluster problem detected (Kubernetes Engine Service Agent account unable to use CloudKMS key configured for Application Level encryption).
Para resolver este problema, reative a chave desativada.
Não é possível atualizar o segredo
O seguinte erro pode ocorrer se a API Kubernetes rejeitar o pedido de atualização devido a um webhook de admissão:
error admission webhook WEBHOOK_NAME denied the request
Para resolver este erro, remova o webhook ou modifique-o para que o GKE possa atualizar os segredos em todos os espaços de nomes durante as atualizações de chaves.
Erro: o espaço de nomes é gerido
O seguinte erro ocorre quando tenta voltar a encriptar segredos que estão num espaço de nomes gerido pelo GKE, como kube-system
, num cluster do Autopilot. A mensagem de erro é semelhante à seguinte:
Error from server (Forbidden): secrets "alertmanager" is
forbidden: User cannot patch resource "secrets" in API group "" in the namespace "gke-gmp-system":
GKE Warden authz [denied by managed-namespaces-limitation]: the namespace "gke-gmp-system"
is managed and the request's verb "patch" is denied'
Os clusters do GKE Autopilot não lhe permitem modificar os recursos do Kubernetes, incluindo os segredos, nos espaços de nomes geridos.
Para resolver este erro, faça o seguinte:
- Se usar comandos
kubectl
para voltar a encriptar segredos, use a flag--namespace
para restringir o comando aos espaços de nomes que gere. - Se usar um CronJob para voltar a encriptar segredos, implemente-o apenas nos espaços de nomes que gere.
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 ao cliente 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.