Diagnosi dei problemi relativi ai guardrail

Panoramica dei guardrail

Apigee Guardrails ibrido è un meccanismo che avvisa i clienti di un potenziale problema prima che il problema possa interessare un'istanza ibrida. In altre parole, guardrail ibrido arresterà un comando nei suoi percorsi se il comando rischia la stabilità di un'istanza ibrida. Che si tratti di una configurazione errata o di risorse insufficienti, i sistemi di protezione ibrida impediscono qualsiasi modifica a un'istanza ibrida fino a quando il rischio del problema non viene rimosso. In questo modo, il cliente non può dedicare tempo a problemi la cui risoluzione richiede in genere ore o giorni.

Utilizzo di Guardrail con Apigee hybrid

Per usare guardrail ibridi, esegui gli stessi comandi di installazione di Helm ibrida o di upgrade di Helm ibrido documentati nelle istruzioni di installazione ibrida. Non sono necessari comandi aggiuntivi per eseguire i guardrail.

Quando invii un comando Helm per Apigee hybrid, si verificano due cose prima che il comando helm applichi la configurazione all'istanza ibrida:

  • Helm crea un pod Guardrails temporaneo con la configurazione applicata. Se il pod Guadrails raggiunge uno stato integro, testerà l'istanza ibrida in base alla configurazione applicata. Se il test ha esito positivo, il pod Guardrails viene arrestato e la configurazione viene quindi applicata all'istanza Apigee ibrida.
  • Se il test ha esito negativo, il pod Guardails viene lasciato in uno stato non integro per consentire la diagnosi del pod. Il comando helm mostrerà un messaggio di errore che segnala che il pod Guardrails non è riuscito.

L'esempio seguente mostra l'utilizzo di guardrail per testare la connettività di rete da un'istanza ibrida al piano di controllo Apigee nell'ambito dell'installazione del componente apigee-datastore. Puoi utilizzare la stessa sequenza per tutti i componenti ibridi di Apigee:

Installa il componente apigee-datastore utilizzando il seguente comando:

helm upgrade datastore apigee-datastore/ \
  --install \
  --namespace apigee \
  --atomic \
  -f overrides.yaml

Se si verifica un errore immediato, il comando Helm mostrerà anche un messaggio di errore che mostra i controlli Guardrails non riusciti, come nell'esempio seguente:

 helm upgrade datastore apigee-datastore/ \
  --install \
  --namespace apigee \
  -f ../my-overrides.yaml

  . . .
    Error: UPGRADE FAILED: pre-upgrade hooks failed: 1 error occurred:
      * pod apigee-hybrid-helm-guardrail-datastore failed

Per capire quale controllo non è riuscito e perché, controlla i log dei pod Guardrails come nell'esempio seguente:

kubectl logs -n apigee apigee-hybrid-helm-guardrail-datastore
{"level":"INFO","timestamp":"2024-02-01T20:28:55.934Z","msg":"logging enabled","log-level":"INFO"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"","checkpoint":"upgrade","component":"apigee-datastore"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"initiating pre-install checks"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"check validation starting...","check":"controlplane_connectivity"}
{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}

In questo esempio, il messaggio effettivo di errore di test è questa:

{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}

Viene eseguito automaticamente il provisioning del pod Guardrails quando esegui il comando helm. Se il test di connettività del piano di controllo Apigee ha esito positivo, il pod Guardrails viene arrestato alla fine dell'esecuzione.

Controlla rapidamente lo stato dei pod dopo aver inviato il comando helm install. L'output di esempio seguente mostra i pod Guardrail in stato integro, ovvero il test di connettività del piano di controllo è stato superato:

kubectl get pods -n apigee -w
NAME                                      READY    STATUS             RESTARTS    AGE
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           1s
apigee-hybrid-helm-guardrail-datastore    0/1      ContainerCreating  0           1s
apigee-hybrid-helm-guardrail-datastore    0/1      Completed          0           2s
apigee-hybrid-helm-guardrail-datastore    0/1      Completed          0           3s
apigee-hybrid-helm-guardrail-datastore    0/1      Terminating        0           3s
apigee-hybrid-helm-guardrail-datastore    0/1      Terminating        0           3s

Se il test di connettività del piano di controllo Apigee non va a buon fine, il pod Guardrails rimarrà in stato di errore simile all'output di esempio seguente:

kubectl get pods -n apigee -w
NAME                                      READY    STATUS             RESTARTS    AGE
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      ContainerCreating  0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      Error              0           4s
apigee-hybrid-helm-guardrail-datastore    0/1      Error              0           5s
apigee-hybrid-helm-guardrail-datastore    0/1      Error              0           6s

Disattivazione temporanea di guardrail

Se devi disattivare i controlli Guardrails, aggiungi il flag --no-hooks al comando Helm. L'esempio seguente mostra il flag --no-hooks in un comando Helm:

helm upgrade datastore apigee-datastore/ \
  --install \
  --namespace apigee \
  -f ../my-overrides.yaml \
  --no-hooks

Configurazione di guardrail nel file degli override

A partire dalla versione ibrida di Apigee 1.12, i guardrail sono configurati per impostazione predefinita in ogni grafico. Puoi eseguire l'override solo di URL immagine, tag e criterio pull di immagini nel file overrides.

Ad esempio, al file degli override verranno aggiunti i criteri relativi all'URL dell'immagine, al tag e al pull dell'immagine Guardrails riportati di seguito:

# Apigee Ingressgateway
ingressGateway:
  image:
    pullPolicy: Always

## NOTE: The Guardrails config is below. The ingressgateway config above is for position reference only and is NOT required for Guardrails config.

# Apigee Guardrails
guardrails:
  image:
    url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
    tag: "12345_6789abcde"
    pullPolicy: Always