Diagnosi dei problemi relativi ai sistemi di protezione

Panoramica dei guardrail

Apigee hybrid Guardrails è un meccanismo che avviserà i clienti di un potenziale problema prima che il problema possa interessare un'istanza ibrida. In altre parole, Hybrid Guardrail arresta un comando nei suoi canali se il comando rischia la stabilità di un'istanza ibrida. Che si tratti di una configurazione errata o di risorse insufficienti, Hybrid Guardrails impedirà qualsiasi modifica a un'istanza ibrida fino a quando il rischio del problema non verrà rimosso. In questo modo il cliente non potrà dedicare tempo a risolvere problemi che normalmente richiederebbero ore o giorni.

Utilizzo di Guardrail con Apigee hybrid

Per utilizzare Helm ibrido, esegui gli stessi comandi per l'installazione di Helm ibrido o per l'upgrade di Helm ibrido documentati nelle istruzioni per l'installazione di Helm ibrido. Non sono necessari ulteriori comandi per eseguire Guardrail.

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

  • Helm crea un pod Guardrails temporaneo con la configurazione applicata. Se il pod Guadrails torna in stato integro, testerà la tua istanza ibrida rispetto alla configurazione applicata. Se il test ha esito positivo, il pod Guardrails viene terminato e la configurazione viene quindi applicata all'istanza ibrida Apigee.
  • Se il test non va a buon fine, il pod Guardails viene lasciato in uno stato non integro per consentire la diagnosi. Il comando helm mostra un messaggio di errore che segnala un guasto del pod Guardrail.

L'esempio seguente mostra l'uso 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 indica che i controlli di Guardrails non sono 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 vedere quale controllo non è riuscito e perché, controlla i log del 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 parte:

{"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"}

Il provisioning del pod Guardrails viene eseguito automaticamente quando invii il comando helm. Se il test di connettività del piano di controllo Apigee viene superato, 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, a indicare che 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 al seguente output di esempio:

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 di Guardrail, 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 di override

A partire dalla versione ibrida di Apigee 1.12, Guardrail è configurato per impostazione predefinita in ogni grafico. Puoi sostituire solo l'URL immagine, il tag e il criterio per il pull delle immagini nel file overrides.

Ad esempio, il criterio di pull, tag e URL dell'immagine Guardrails riportato di seguito verrà aggiunto al file di override:

# 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