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

Résoudre les problèmes liés aux règles de sécurité

Point de contrôle de la variable d'environnement manquant ou vide

Si l'erreur Client.Timeout exceeded s'affiche dans le journal du pod de pare-feu de l'opérateur Apigee, voici quelques étapes de dépannage pour déterminer si le problème se situe du côté des pare-feu ou de l'infrastructure.

  1. Créez un fichier YAML avec le contenu suivant. Vous pouvez choisir le nom du fichier yaml.
  2.     apiVersion: v1
        kind: Pod
        metadata:
          labels:
          name: apigee-simple-client  
        spec:
          containers:
          - name: apigee-simple-client
            image: "gcr.io/apigee-release/hybrid/apigee-hybrid-cassandra-client:1.10.1"
            imagePullPolicy: Always
            command:
            - sleep
            - "3650d"
          restartPolicy: Never
          hostNetwork: false
      
  3. Appliquez le nouveau fichier yaml avec la commande suivante:
  4.     kubectl apply -n apigee-system -f name of the yaml file
      
  5. Exécutez la commande suivante dans le pod:
  6.     kubectl exec -it -n apigee-system apigee-simple-client -- /bin/bash
        
  7. Exécutez la commande suivante dans le pod apigee-simple-client et vérifiez la sortie:
  8.     curl -v -I --proxy http://cspnaproxy1.wlb2.nam.nsroot.net:8882 https://apigee.googleapis.com
        

    cspnaproxy1.wlb2.nam.nsroot.net correspond à l'adresse du proxy. Vous pouvez utiliser n'importe quelle adresse de proxy à laquelle vous avez accès. Si vous n'avez pas accès à un proxy, vous pouvez utiliser la commande suivante pour tester la connectivité réseau:

        curl -v -I https://apigee.googleapis.com
        

    Si la commande curl se connecte correctement au proxy HTTP et atteint apigee.googleapis.com, elle doit renvoyer un code de réponse HTTP. Si la commande curl ne parvient pas à atteindre le proxy ou ne parvient pas à se connecter à apigee.googleapis.com via le proxy, elle doit afficher une erreur.