Diagnostica dei problemi relativi ai guardrail

Panoramica delle contromisure

Le contromisure di Apigee hybrid sono un meccanismo che avvisa i clienti di un potenziale problema prima che possa influire su un'istanza di Hybrid. In altre parole, le contromisure di Hybrid interrompono un comando se questo rischia la stabilità di un'istanza di Hybrid. Che si tratti di una configurazione errata o di risorse insufficienti, le contromisure di Hybrid impediscono qualsiasi modifica a un'istanza di Hybrid finché il rischio del problema non viene rimosso. In questo modo, il cliente non deve dedicare tempo a problemi che normalmente richiederebbero ore o giorni per essere risolti.

Utilizzare le contromisure con Apigee hybrid

Per utilizzare le contromisure di Hybrid, esegui gli stessi comandi di installazione o upgrade di Helm di Hybrid documentati nelle istruzioni di installazione di Hybrid. Non sono necessari comandi aggiuntivi per eseguire le contromisure.

Quando esegui un comando Helm per Apigee hybrid, prima che il comando Helm applichi la configurazione all'istanza di Hybrid, si verificano due eventi:

  • Helm crea un pod di contromisure temporaneo con la configurazione applicata. Se il pod di contromisure raggiunge uno stato integro, testerà l'istanza di Hybrid in base alla configurazione applicata. Se il test viene superato, il pod di contromisure viene terminato e la configurazione viene applicata all'istanza di Apigee hybrid.
  • Se il test non viene superato, il pod di contromisure rimane in uno stato non integro per consentirne la diagnosi. Il comando Helm visualizzerà un messaggio di errore che indica che il pod di contromisure non è riuscito.

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

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 delle contromisure 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 di contromisure, 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 non riuscito 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 di contromisure viene eseguito automaticamente il provisioning quando esegui il comando Helm. Se il test di connettività del piano di controllo Apigee viene superato, il pod di contromisure viene terminato al termine dell'esecuzione.

Controlla rapidamente lo stato dei pod dopo aver eseguito il comando helm install. L'output di esempio seguente mostra i pod di contromisure in uno stato integro, 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 piano di controllo Apigee non viene superato, il pod di contromisure rimarrà nello 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

Disattivare temporaneamente le contromisure

Se devi disattivare i controlli delle contromisure, 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 overrides.yaml \
  --no-hooks

Controlli delle contromisure

La tabella seguente elenca i dettagli di alcuni dei controlli delle contromisure forniti come parte di Apigee hybrid versione 1.16.
Nome Checkpoint Descrizione
cassandra_backup_enabled upgrade Introdotto nella versione: 1.14.0

Gravità: error

Un controllo che richiede l'attivazione del backup prima dell'upgrade. I backup sono necessari prima dell'upgrade per supportare il ripristino alla versione precedente, se necessario. Per i dettagli sulle opzioni di backup disponibili, consulta Backup e ripristino di Cassandra.

cassandra_recent_backup_csi upgrade Introdotto nella versione: 1.14.0

Gravità: error

Un controllo che richiede la presenza del backup nelle ultime 24 ore prima di eseguire l'upgrade se il backup CSI è attivato. In questo modo, la potenziale perdita di dati viene ridotta al minimo se è necessario eseguire il ripristino alla versione precedente. Per i dettagli sul backup e sul ripristino CSI, consulta Backup CSI.

Configurare le contromisure nel file di sostituzioni

A partire da Apigee hybrid versione 1.12, le contromisure vengono configurate per impostazione predefinita in ogni grafico. Puoi sostituire l'URL dell'immagine, il tag e la policy di pull dell'immagine nel file overrides.

Ad esempio, l'URL dell'immagine, il tag e la policy di pull delle contromisure riportati di seguito verranno aggiunti al file di 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: "1.16.9"
    pullPolicy: Always

Utilizzare le tolleranze di Kubernetes con le contromisure

Puoi anche aggiungere tolleranze alle contromisure nel file overrides. Se non sono definite tolleranze nella configurazione overrides delle contromisure, le contromisure utilizzeranno le tolleranze definite a livello globale.

Ad esempio, per includere le tolleranze specificamente nella sezione delle contromisure del file overrides, devi aggiungere un elemento simile alla seguente sezione:

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