Diagnostiquer les problèmes liés aux garde-fous

Présentation des garde-fous

Les garde-fous d'Apigee hybrid sont un mécanisme qui avertit les clients d'un problème potentiel avant qu'il n'affecte une instance Hybrid. En d'autres termes, ils arrêtent une commande si elle risque de compromettre la stabilité d'une instance Hybrid. Qu'il s'agisse d'une configuration incorrecte ou d'une quantité insuffisante d'une ressource, les garde-fous d'Apigee hybrid empêchent toute modification d'une instance Hybrid tant que le risque lié au problème n'est pas éliminé. Cela évite au client de consacrer plusieurs heures, voire plusieurs jours, à la résolution de problèmes.

Utiliser les garde-fous avec Apigee hybrid

Pour utiliser les garde-fous d'Apigee hybrid, exécutez les mêmes commandes d'installation ou de mise à niveau Hybrid Helm que celles indiquées dans les instructions d'installation Apigee hybrid. Aucune commande supplémentaire n'est nécessaire pour exécuter les garde-fous.

Lorsque vous exécutez une commande Helm pour Apigee hybrid, deux choses se produisent avant que la commande Helm n'applique la configuration à votre instance Apigee hybrid :

  • Helm crée un pod de garde-fous temporaire avec la configuration appliquée. Si le pod de garde-fous fonctionne correctement, il teste votre instance Apigee hybrid par rapport à la configuration appliquée. Si le test réussit, le pod de garde-fous est arrêté et votre configuration est alors appliquée à votre instance Apigee hybrid.
  • Si le test échoue, le pod de garde-fous est laissé dans un état non opérationnel, ce qui permet le diagnostic du pod. La commande Helm affiche un message d'erreur indiquant que le pod de garde-fous a échoué.

L'exemple suivant montre comment utiliser les garde-fous pour tester la connectivité réseau d'une instance Apigee hybrid au plan de contrôle Apigee lors de l'installation du composant apigee-datastore. Vous pouvez utiliser la même séquence pour tous les composants Apigee hybrid :

Installez le composant apigee-datastore à l'aide de la commande suivante :

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

Si une erreur se produit immédiatement, la commande Helm affiche également un message d'erreur indiquant l'échec de la vérification des garde-fous, comme dans l'exemple suivant :

 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

Pour savoir quelle vérification a échoué et pourquoi, consultez les journaux du pod de garde-fous comme dans l'exemple suivant :

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

Dans cet exemple, le message d'échec de test réel est la partie suivante :

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

Le pod de garde-fous est automatiquement provisionné lorsque vous exécutez la commande Helm. Si le test de connectivité du plan de contrôle Apigee réussit, le pod de garde-fous est arrêté à la fin de l'exécution.

Vérifiez rapidement l'état des pods après avoir exécuté la commande helm install. L'exemple de résultat suivant présente des pods de garde-fous dans un état opérationnel, ce qui signifie que le test de connectivité du plan de contrôle a réussi :

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

Si le test de connectivité du plan de contrôle Apigee échoue, le pod de garde-fous reste à l'état d'erreur, comme dans l'exemple de résultat suivant :

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

Désactiver temporairement les garde-fous

Si vous devez désactiver les vérifications de garde-fous, ajoutez l'option --no-hooks à la commande Helm. L'exemple suivant montre l'option --no-hooks dans une commande Helm :

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

Vérifications de garde-fous

Le tableau suivant fournit des informations sur certaines des vérifications de garde-fous fournies avec Apigee hybrid version 1.14.
Nom Point de contrôle Description
cassandra_backup_enabled upgrade Introduit dans la version : 1.14.0

Gravité : error

Vérification qui nécessite l'activation de la sauvegarde avant la mise à niveau. Des sauvegardes sont nécessaires avant la mise à niveau pour permettre la restauration vers la version précédente, si nécessaire. Pour en savoir plus sur les options de sauvegarde disponibles, consultez Sauvegarde et récupération Cassandra.

cassandra_recent_backup_csi upgrade Introduit dans la version : 1.14.0

Gravité : error

Vérification qui nécessite que la sauvegarde des 24 dernières heures soit présente avant la mise à niveau si la sauvegarde CSI est activée. Cela permet de minimiser le risque de perte de données si une restauration vers la version précédente est nécessaire. Pour en savoir plus sur la sauvegarde et la restauration CSI, consultez Sauvegarde CSI.

Configurer des garde-fous dans le fichier de remplacement

À partir de la version 1.12 d'Apigee hybrid, les garde-fous sont configurés par défaut dans chaque chart. Vous pouvez remplacer l'URL de l'image, le tag et la règle d'extraction d'image dans votre fichier overrides.

Par exemple, l'URL, le tag et la règle d'extraction d'image des garde-fous ci-dessous seraient ajoutés à votre fichier de remplacement :

# 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.14.2"
    pullPolicy: Always

Utiliser les tolérances Kubernetes avec des garde-fous

Vous pouvez également ajouter des tolérances aux garde-fous dans votre fichier overrides. Si aucune tolérance n'est définie dans la configuration overrides des garde-fous, les garde-fous utilisent toutes les tolérances définies de manière globale.

Par exemple, pour inclure des tolérances spécifiquement dans la section des garde-fous de votre fichier overrides, vous pouvez ajouter un stanza semblable à celui-ci :

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