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 hybride. En d'autres termes, les garde-fous hybrides arrêtent une commande si elle risque de compromettre la stabilité d'une instance hybride. Qu'il s'agisse d'une configuration incorrecte ou d'une ressource insuffisante, les garde-fous hybrides 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 hybrides, exécutez les mêmes commandes d'installation ou de mise à niveau Hybrid Helm que celles indiquées dans les instructions d'installation 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 hybride :

  • Helm crée un pod de garde-fous temporaire avec la configuration appliquée. Si le pod du garde-fou fonctionne correctement, il teste votre instance hybride 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 les tests échouent, le pod de garde-fou est laissé dans un état non opérationnel pour permettre un diagnostic du pod. La commande Helm affiche un message d'erreur indiquant que le pod de garde-fou a échoué.

L'exemple suivant montre comment utiliser les garde-fous pour tester la connectivité réseau d'une instance hybride au plan de contrôle Apigee dans le cadre 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-fou 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 du test réel consiste en 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 affiche les pods de garde-fous dans un état sain, 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 "Error" (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 ../my-overrides.yaml \
  --no-hooks

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 graphique. Vous pouvez remplacer l'URL de l'image, le tag et la règle de récupération d'image dans votre fichier overrides.

Par exemple, l'URL, le tag et la règle d'extraction de l'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: "12345_6789abcde"
    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 "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: "12345_6789abcde"
      pullPolicy: Always
    tolerations:
    - key: "say"
      operator: "Equal"
      value: "taunt"
      effect: "NoSchedule"