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 failedPour 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 3sSi 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 6sDé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.
- Créez un fichier YAML avec le contenu suivant. Vous pouvez choisir le nom du fichier yaml.
- Appliquez le nouveau fichier yaml avec la commande suivante:
- Exécutez la commande suivante dans le pod:
- Exécutez la commande suivante dans le pod
apigee-simple-clientet vérifiez la sortie:
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
kubectl apply -n apigee-system -f name of the yaml file
kubectl exec -it -n apigee-system apigee-simple-client -- /bin/bash
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.