Diagnostica dei problemi relativi ai guardrail

Panoramica dei guardrail

I Guardrail di Apigee Hybrid sono un meccanismo che avvisa i clienti di un potenziale problema prima che possa influire su un'istanza Hybrid. In altre parole, Hybrid Guardrails interrompe un comando se rischia di compromettere la stabilità di un'istanza ibrida. Che si tratti di una configurazione errata o di una risorsa insufficiente, Hybrid Guardrails impedirà qualsiasi modifica a un'istanza ibrida finché il rischio del problema non sarà stato rimosso. In questo modo, il cliente non deve perdere tempo a risolvere problemi che normalmente richiederebbero ore o giorni.

Utilizzo di Guardrails con Apigee hybrid

Per utilizzare Hybrid Guardrails, esegui gli stessi comandi di installazione o di upgrade di Helm per Hybrid descritti nelle istruzioni di installazione di Hybrid. Non sono necessari altri comandi per eseguire Guardrails.

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

  • Helm crea un pod Guardrails temporaneo con la configurazione applicata. Se il pod Guardrails viene avviato in uno stato integro, eseguirà il test dell'istanza ibrida in base alla configurazione applicata. Se il test viene superato, il pod Guardrails viene terminato e la configurazione viene applicata all'istanza Apigee hybrid.
  • Se il test non va a buon fine, 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 indica che il pod Guardrails non è riuscito.

L'esempio seguente mostra l'utilizzo di Guardrails per testare la connettività di rete da un'istanza ibrida al Control Plane di Apigee nell'ambito dell'installazione del componente apigee-datastore. Puoi utilizzare la stessa sequenza per tutti i componenti ibride 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 dei guardrail 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 di errore del test effettivo è 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 pod Guardrails viene eseguito automaticamente quando emetti il comando Helm. Se il test di connettività del piano di controllo Apigee supera il test, il pod Guardrails viene terminato al termine dell'esecuzione.

Controlla rapidamente lo stato dei pod dopo aver emesso il comando helm install. L'esempio di output seguente mostra i pod Guardrail in uno stato corretto, il che significa 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 Control Plane di Apigee non va a buon fine, il pod Guardrails rimarrà nello stato Errore, come nell'esempio di output 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 dei guardrail

Se devi disattivare i controlli di 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

Configurare i sistemi di protezione nel file delle sostituzioni

A partire dalla versione 1.12 di Apigee Hybrid, i guardrail sono configurati per impostazione predefinita in ogni grafico. Puoi sostituire l'URL immagine, il tag e le norme di estrazione delle immagini nel file overrides.

Ad esempio, le norme relative a URL, tag e pull delle immagini di Guardrails riportate di seguito verranno aggiunte al file delle sostituzioni:

# 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

Utilizzo delle tolleranze Kubernetes con Guardrails

Puoi anche aggiungere tolleranze ai limiti nel file overrides. Se non sono definite tolleranze nella configurazione di Guardrails overrides, Guardrails utilizzerà le tolleranze definite a livello globale.

Ad esempio, per includere le tolleranze specificamente nella sezione Limiti del file overrides, devi aggiungere qualcosa di simile alla seguente strofa:

  # Apigee Guardrails
  guardrails:
    image:
      url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
      tag: "12345_6789abcde"
      pullPolicy: Always
    tolerations:
    - key: "say"
      operator: "Equal"
      value: "taunt"
      effect: "NoSchedule"