Questo documento descrive gli errori e i codici corrispondenti che potresti riscontrare quando utilizzi Backup per GKE per eseguire operazioni di ripristino. In ogni sezione sono inclusi aspetti da considerare quando esegui azioni per risolvere gli errori di ripristino e istruzioni su come risolvere gli errori dell'operazione di ripristino.
Errore 200010301: impossibile completare l'operazione di ripristino a causa del servizio webhook di ammissione non disponibile
L'errore 200010301
si verifica quando un tentativo di completare un'operazione di ripristino non va a buon fine
perché un servizio webhook di ammissione, chiamato anche callback HTTP, non è disponibile, il che genera il seguente messaggio di errore. Il messaggio di errore
indica che il server API GKE ha tentato di contattare un
webhook di controllo dell'ammissione durante il tentativo di ripristinare una risorsa, ma il servizio che supporta il webhook non era disponibile o non è stato trovato:
resource [/example-group/ClusterSecretStore/example-store] restore failed:
Internal error occurred: failed calling webhook "example-webhook.io":
failed to call webhook: Post "https://example-webhook.example-namespace.svc:443/validate-example": service "example-webhook" not found.
Questo errore si verifica quando una risorsa GKE ValidatingAdmissionWebhook
o MutatingAdmissionWebhook
è attiva nel cluster di destinazione, ma il server API GKE non riesce a raggiungere l'endpoint configurato nel webhook. Gli webhook di controllo degli accessi intercettano le richieste al server API GKE e la loro configurazione specifica il modo in cui il server API GKE deve eseguire query sulle richieste.
clientConfig
del webhook specifica il backend che gestisce le richieste di ammissione, che può essere un servizio cluster interno o un URL esterno. La
scelta tra queste due opzioni dipende dai requisiti operativi e architetturali specifici del webhook. A seconda del tipo di opzione,
l'operazione di ripristino potrebbe non essere riuscita per i seguenti motivi:
Servizi nel cluster: il servizio GKE e i relativi pod di supporto non vengono ripristinati o non sono pronti quando il server API GKE ha tentato di chiamare il webhook. Ciò si verifica durante le operazioni di ripristino in cui le configurazioni webhook con ambito cluster vengono applicate prima che i servizi con spazio dei nomi si trovino completamente nello stato
ready
.URL esterni: l'endpoint esterno non è temporaneamente disponibile a causa di problemi di connettività di rete tra il cluster GKE e l'endpoint esterno oppure a causa di problemi di risoluzione DNS o regole firewall.
Per risolvere questo errore, segui queste istruzioni:
Identifica il webhook non riuscito menzionato nel messaggio di errore. Ad esempio:
failed calling webhook "..."
.Ispeziona il webhook eseguendo il comando
kubectl get validatingwebhookconfigurations
:kubectl get validatingwebhookconfigurations WEBHOOK_NAME -o yaml
Sostituisci
WEBHOOK_NAME
con il nome del webhook identificato nel messaggio di errore.Puoi anche utilizzare il comando
kubectl get mutatingwebhookconfigurations
per esaminare il webhook:kubectl get mutatingwebhookconfigurations WEBHOOK_NAME -o yaml
Sostituisci
WEBHOOK_NAME
con il nome del webhook identificato nel messaggio di errore.Esegui la seguente procedura per la risoluzione dei problemi in base al tipo di configurazione:
Basato sul servizio
clientConfig
Definisci un ordine di ripristino personalizzato modificando la risorsa
RestorePlan
in modo da includere unRestoreOrder
con vociGroupKindDependency
. In questo modo, i componenti che supportano il webhook, comeDeployment
,StatefulSet
oService
, vengono ripristinati e sono pronti prima diValidatingWebhookConfiguration
oMutatingWebhookConfiguration
.Per istruzioni su come definire un ordine di ripristino personalizzato, vedi Specifica l'ordine di ripristino delle risorse durante il ripristino.
Questo approccio può non riuscire perché i pod del servizio non entrano in uno stato
ready
completo anche dopo la creazione dell'oggettoService
. Un altro motivo del mancato funzionamento potrebbe essere che la configurazione del webhook è stata creata in modo imprevisto da un'altra applicazione. In alternativa, puoi eseguire un'operazione di ripristino in due fasi seguendo questi passaggi:Crea una risorsa
Restore
utilizzando il backup configurando l'operazione di ripristino con un filtro di ripristino granulare che includa le risorse specifiche necessarie per il funzionamento del webhook, ad esempioNamespaces
,Deployments
,StatefulSets
oServices
.Per ulteriori informazioni su come configurare il ripristino con un filtro di ripristino granulare, consulta Abilita il ripristino granulare.
Crea un'altra risorsa
Restore
per l'operazione di backup e configura le altre risorse che scegli.
Basato sull'URL
clientConfig
Verifica l'endpoint HTTPS esterno e assicurati che sia attivo, raggiungibile e funzionante correttamente.
Verifica che esista una connettività di rete dai nodi e dal control plane del cluster GKE all'URL esterno. Potresti anche dover controllare le regole firewall, ad esempio se utilizzi Virtual Private Cloud, on-premise o un provider cloud che ospita il webhook, i criteri di rete e la risoluzione DNS.
Riprova l'operazione di ripristino. Se l'operazione continua a non riuscire, contatta l'assistenza clienti Google Cloud per ulteriore assistenza.
Errore 200010302: Impossibile completare l'operazione di ripristino a causa della richiesta di creazione della risorsa negata
L'errore 200010302
si verifica quando un tentativo di completare un'operazione di ripristino non va a buon fine perché un webhook di controllo degli accessi nega una richiesta di creazione di risorse, il che comporta il seguente messaggio di errore che indica che una risorsa del backup non è stato possibile creare nel cluster di destinazione perché un webhook di controllo degli accessi attivo ha intercettato la richiesta e l'ha rifiutata in base a un criterio personalizzato:
[KubeError]; e.g. resource
[/example-namespace/example-api/ExampleResource/example-name]
restore failed: admission webhook "example-webhook.example.com" denied the request: {reason for denial}
Questo errore è causato dalla configurazione impostata nel cluster GKE di destinazione, che ha un ValidatingAdmissionWebhook
o un MutatingAdmissionWebhook
che applica regole specifiche alla creazione e alla modifica delle risorse, bloccando la richiesta di creazione della risorsa.
Ad esempio, un webhook impedisce la creazione di una risorsa perché nel cluster esiste già una risorsa correlata ma in conflitto. Ad esempio, un webhook
potrebbe negare la creazione di un deployment se è già gestito da una risorsa API GKE HorizontalPodAutoscaler
.
Per risolvere questo errore, segui queste istruzioni:
Identifica il webhook che nega la richiesta utilizzando il messaggio di errore che si verifica quando l'operazione di ripristino non va a buon fine. Ad esempio,
webhook WEBHOOK_NAME denied the request
Il messaggio di errore contiene le seguenti informazioni:Nome webhook: il nome del webhook che nega la richiesta.
Motivo del rifiuto: il motivo specifico del rifiuto della richiesta.
Ispeziona il webhook utilizzando il comando
kubectl get validatingwebhookconfigurations
:kubectl get validatingwebhookconfigurations WEBHOOK_NAME -o yaml
Sostituisci
WEBHOOK_NAME
con il nome del webhook che hai identificato nel messaggio di errore.Puoi anche utilizzare il comando
kubectl get mutatingwebhookconfigurations
per ispezionare il webhook:kubectl get mutatingwebhookconfigurations WEBHOOK_NAME -o yaml
Sostituisci
WEBHOOK_NAME
con il nome del webhook che hai identificato dal messaggio di errore.Risolvi il problema sottostante nel cluster di destinazione. L'azione corretta dipende dall'errore specifico. Per l'esempio, se si verifica un conflitto
HorizontalPodAutoscaler
, devi eliminare l'HorizontalPodAutoscaler
esistente nel cluster di destinazione prima di eseguire il ripristino per consentire la creazione dei carichi di lavoro di cui è stato eseguito il backup e delle risorse associate.Riprova l'operazione di ripristino. Se l'operazione di ripristino continua a non riuscire, contatta l'assistenza clienti Google Cloud per ulteriore assistenza.
Errore 200060202: impossibile completare l'operazione di ripristino a causa della risorsa GKE mancante durante la convalida del workload
L'errore 200060202
si verifica durante la fase di convalida del workload di un'operazione di ripristino quando una risorsa GKE che Backup per GKE prevede di convalidare non viene trovata nel cluster di destinazione, il che genera il seguente messaggio di errore:
Workload Validation Error: [KIND] "[NAME]" not found
Ad esempio, Example: Workload Validation Error: pods "jenkins-0" not found
Questo errore si verifica quando Backup per GKE crea o aggiorna correttamente la risorsa GKE nell'ambito del processo di operazione di ripristino, ma quando inizia la fase di convalida, una o più risorse GKE non sono più presenti nel cluster di destinazione perché sono state eliminate dopo la creazione o l'aggiornamento iniziale da parte del processo di ripristino, ma prima che la convalida del workload per la risorsa GKE potesse essere completata. Un errore di questo tipo può verificarsi per i seguenti motivi:
Eliminazione manuale: un utente o un amministratore ha eliminato manualmente la risorsa utilizzando
kubectl
o altri strumenti Google Cloud .Automazione esterna: i controller GitOps, ad esempio Config Sync, ArgoCD, Flux, script personalizzati o altri strumenti di gestione dei cluster hanno ripristinato o eliminato la risorsa in modo che corrisponda a uno stato desiderato in un repository.
Controller GKE: un controller GKE ha eliminato una risorsa perché è in conflitto con altre risorse o criteri oppure una catena
OwnerReference
porta alla garbage collection o al processo di pulizia automatizzato di GKE che elimina le risorse dipendenti quando viene eliminata la risorsaowner
.
Per risolvere questo errore, segui queste istruzioni:
Identifica la risorsa mancante utilizzando il messaggio di errore visualizzato quando l'operazione di ripristino non viene completata.
Individua lo spazio dei nomi a cui appartiene la risorsa utilizzando uno dei seguenti metodi:
Audit log di GKE: esamina gli audit log di GKE generati quando hai tentato l'operazione di ripristino. Puoi filtrare i log per le operazioni di eliminazione sulla risorsa
Kind
eName
. La voce di log di controllo contiene lo spazio dei nomi originale.Dettagli backup: rivedi l'ambito dell'operazione di ripristino e i contenuti del backup. L'indice di backup mostra lo spazio dei nomi originale della risorsa. Puoi anche verificare se
RestorePlan
contiene unTransformationRule
che specifica le regole per ripristinare la risorsa nello spazio dei nomi che scegli.Cerca negli spazi dei nomi: utilizza il comando
kubectl get
per cercare la risorsa in tutti gli spazi dei nomi:kubectl get KIND --all-namespaces | grep NAME
Sostituisci
KIND
eNAME
con i valori del messaggio di errore. Se la risorsa esiste ancora, questo comando mostrerà il suo spazio dei nomi.
Verifica l'eliminazione utilizzando il comando
kubectl get
:kubectl get KIND NAME -n [NAMESPACE]
Sostituisci
KIND
eNAME
con i valori del messaggio di errore. Dovresti ricevere un messaggio di errorenot found
.Indaga sulla causa dell'eliminazione utilizzando uno dei seguenti metodi:
Audit log di GKE: identificano l'entità che ha emesso la richiesta di eliminazione. Ad esempio, l'utente, il account di servizio o il controller.
Controlla le automazioni configurate: se utilizzi GitOps o altri strumenti di automazione, controlla i log e lo stato per verificare se hanno interferito con le risorse ripristinate.
Esamina gli eventi correlati: controlla gli eventi GKE nello spazio dei nomi determinato utilizzando il comando
kubectl get events
:kubectl get events -n NAMESPACE --sort-by='.lastTimestamp'
Sostituisci
NAMESPACE
con il nome dello spazio dei nomi.
Risolvi la causa dell'eliminazione della risorsa in base ai risultati del passaggio precedente. Ad esempio, metti in pausa le automazioni in conflitto, correggi le configurazioni errate o modifica le autorizzazioni utente.
Recupera la risorsa mancante utilizzando uno dei seguenti metodi:
Riapplica i file manifest: se hai il manifest per la risorsa mancante, puoi riapplicarlo allo spazio dei nomi corretto.
Esegui un ripristino granulare: esegui un'operazione di ripristino granulare per ripristinare in modo selettivo solo la risorsa mancante dallo stesso backup, il che ti consente di specificare lo spazio dei nomi corretto. Per ulteriori informazioni su come eseguire un'operazione di ripristino granulare, vedi Abilita il ripristino granulare.
Riprova l'operazione di ripristino. Se l'operazione di ripristino continua a non riuscire, contatta l'assistenza clienti Google Cloud per ulteriore assistenza.