Le contrôleur d'entrée GKE Enterprise gère les ressources Compute Engine. Les ressources MultiClusterIngress
et MultiClusterService
correspondent à différentes ressources Compute Engine. Par conséquent, comprendre la relation entre ces ressources vous aide à résoudre les problèmes. Par exemple, examinez la ressource MultiClusterIngress
suivante :
apiVersion: extensions/v1beta1
kind: MultiClusterIngress
metadata:
name: foo-ingress
spec:
rules:
- host: store.foo.com
http:
paths:
- backend:
serviceName: store-foo
servicePort: 80
- host: search.foo.com
http:
paths:
- backend:
serviceName: search-foo
servicePort: 80
Mappages de ressources Compute Engine vers un entrée multicluster
Le tableau ci-dessous montre le mappage des ressources Fleet avec les ressources créées dans les clusters Kubernetes et Google Cloud :
Ressource Kubernetes | Ressource Google Cloud | Description |
---|---|---|
MultiClusterIngress | Règle de transfert | IPV de l'équilibreur de charge HTTP(S). |
Proxy cible | Paramètres de terminaison HTTP/S issus des annotations et du bloc TLS. | |
Mappage d'URL | Mappage du chemin de l'hôte virtuel à partir de la section des règles. | |
MultiClusterService | Service Kubernetes | Ressource dérivée du modèle. |
Service de backend | Un service de backend est créé pour chaque paire (Service, ServicePort). | |
Groupes de points de terminaison du réseau | Ensemble de pods backend participant au service. |
Inspecter les ressources de l'équilibreur de charge Compute Engine
Après avoir créé un équilibreur de charge, l'état de l'objet Ingress multicluster contient les noms de chaque ressource Compute Engine créée pour construire l'équilibreur de charge. Exemple :
Name: shopping-service
Namespace: prod
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1beta1
Kind: MultiClusterIngress
Metadata:
Creation Timestamp: 2019-07-16T17:23:14Z
Finalizers:
mci.finalizer.networking.gke.io
Spec:
Template:
Spec:
Backend:
Service Name: shopping-service
Service Port: 80
Status:
VIP: 34.102.212.68
CloudResources:
Firewalls: "mci-l7"
ForwardingRules: "mci-abcdef-myforwardingrule"
TargetProxies: "mci-abcdef-mytargetproxy"
UrlMap: "mci-abcdef-myurlmap"
HealthChecks: "mci-abcdef-80-myhealthcheck"
BackendServices: "mci-abcdef-80-mybackendservice"
NetworkEndpointGroups: "k8s1-neg1", "k8s1-neg2", "k8s1-neg3"
IPV non créée
Si vous ne voyez pas d'adresse IPV, une erreur s'est peut-être produite lors de sa création. Pour voir si une erreur s'est produite, exécutez la commande suivante :
kubectl describe mci shopping-service
Le résultat peut ressembler à ceci :
Name: shopping-service
Namespace: prod
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1beta1
Kind: MultiClusterIngress
Metadata:
Creation Timestamp: 2019-07-16T17:23:14Z
Finalizers:
mci.finalizer.networking.gke.io
Spec:
Template:
Spec:
Backend:
Service Name: shopping-service
Service Port: 80
Status:
VIP: 34.102.212.68
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning SYNC 29s multi-cluster-ingress-controller error translating MCI prod/shopping-service: exceeded 4 retries with final error: error translating MCI prod/shopping-service: multiclusterservice prod/shopping-service does not exist
Dans cet exemple, l'erreur vient du fait que l'utilisateur n'a pas créé la ressource MultiClusterService
référencée par un objet MultiClusterIngress
.
Réponse 502
Si votre équilibreur de charge possède une adresse IPV, mais génère systématiquement une réponse 502, cela peut indiquer que les vérifications d'état de l'équilibrage de charge échouent. Les vérifications d'état peuvent échouer pour deux raisons :
- Les pods d'application ne sont pas opérationnels. Pour en savoir plus, consultez la section Débogage de Cloud Console.
- Un pare-feu mal configuré empêche les vérificateurs d'état de Google d'effectuer des vérifications d'état.
Dans le cas numéro 1, assurez-vous que votre application diffuse bien une réponse 200 sur le chemin d'accès "/".
Dans le cas numéro 2, assurez-vous qu'un pare-feu nommé "mci-default-l7" existe dans votre VPC. Le contrôleur d'entrée crée le pare-feu dans votre VPC afin de garantir que les vérificateurs d'état de Google peuvent bien atteindre vos backends. Si le pare-feu n'existe pas, assurez-vous qu'aucun processus automatique externe ne le supprime à l'issue de sa création.
Trafic non ajouté au cluster ou supprimé de celui-ci
Lors de l'ajout d'un membre, le trafic doit atteindre les backends du cluster sous-jacent, le cas échéant. De même, si un membre est supprimé, aucun trafic ne doit atteindre les backends dans le cluster sous-jacent. Si vous n'observez pas ce comportement, recherchez des erreurs sur les ressources MultiClusterIngress
et MultiClusterService
.
Cette erreur se produit généralement lorsque vous ajoutez un membre à un cluster GKE qui n'est pas en mode VPC natif ou que vous en ajoutez un sans déployer d'application dans le cluster GKE.
Décrivez la ressource
MultiClusterService
:kubectl describe mcs zone-svc
Décrivez la ressource
MultiClusterIngress
:kubectl describe mci zone-mci
Migration du cluster de configuration
Pour en savoir plus sur les cas d'utilisation de la migration, consultez la page Principes de conception du cluster de configuration.
La migration du cluster de configuration peut être une opération perturbatrice si elle n'est pas gérée correctement. Suivez ces consignes lors de la migration d'un cluster de configuration :
- Assurez-vous d'utiliser l'annotation static-ip sur vos ressources
MultiClusterIngress
. À défaut, le trafic sera interrompu lors de la migration. Les adresses IP éphémères seront recréées lors de la migration des clusters de configuration. - Les ressources
MultiClusterIngress
etMultiClusterService
doivent être déployées de manière identique sur le cluster de configuration existant et le nouveau cluster de configuration. Des différences de déploiement entraîneront le rapprochement des ressourcesMultiClusterService
etMultiClusterIngress
qui sont différentes dans le nouveau cluster de configuration. - Un seul cluster de configuration est actif à tout moment. Tant que le cluster de configuration n'est pas modifié, les ressources
MultiClusterIngress
etMultiClusterService
du nouveau cluster de configuration n'ont pas d'incidence sur les ressources de l'équilibreur de charge.
Pour migrer le cluster de configuration, exécutez la commande suivante :
gcloud container fleet ingress update \
--config-membership=projects/project_id/locations/global/memberships/new_config_cluster
Vérifiez que la commande a fonctionné en vérifiant qu'aucune erreur n'est visible dans l'état de la fonctionnalité :
gcloud container fleet ingress describe
Débogage de Cloud Console
Dans la plupart des cas, vérifier l'état exact de l'équilibreur de charge lors du débogage d'un problème s'avère utile. Pour examiner l'équilibreur de charge, accédez à la page Équilibrage de charge dans Google Cloud Console.
Codes d'erreur/d'avertissement
L'objet Ingress multicluster émet des codes d'erreur et d'avertissement sur les ressources MultiClusterIngress
et MultiClusterService
, ainsi que le champ de description gcloud multiclusteringress
pour les problèmes connus. Ces messages contiennent des codes d'erreur et d'avertissement pour faciliter votre compréhension lorsque quelque chose ne fonctionne pas comme prévu. Chaque code est constitué d'un identifiant d'erreur au format AVMBR123
, où 123
est un nombre unique qui correspond à une erreur ou un avertissement, accompagné de suggestions pour résoudre le problème.
AVMBR101 : Annotation [NAME] not recognized
Cette erreur s'affiche lorsqu'une annotation est indiquée dans un objet MultiClusterIngress
ou un fichier manifeste MultiClusterService
non reconnu. L'annotation peut ne pas être reconnue pour plusieurs raisons :
L'annotation n'est pas compatible avec l'objet Ingress multicluster. Cela peut se produire si vous annotez des ressources qui ne devraient pas être utilisées par le contrôleur d'entrée GKE Enterprise.
L'annotation est acceptée, mais elle est mal orthographiée et n'est donc pas reconnue.
Dans les deux cas, reportez-vous à la documentation pour comprendre les annotations compatibles et leur spécification.
AVMBR102 : [RESOURCE_NAME] not found
Cette erreur s'affiche lorsqu'une ressource supplémentaire est spécifiée dans un objet MultiClusterIngress
, mais introuvable dans la configuration de l'appartenance. Par exemple, cette erreur est générée lorsqu'un MultiClusterIngress
fait référence à un MultiClusterService
introuvable ou qu'un MultiClusterService
fait référence à un BackendConfig introuvable. Une ressource est introuvable pour plusieurs raisons :
- Elle ne se trouve pas dans l'espace de noms approprié. Assurez-vous que les ressources qui font référence les unes aux autres se trouvent dans le même espace de noms.
- Le nom de la ressource est mal orthographié.
- La ressource n'existe pas avec l'espace de noms et le nom appropriés. Dans ce cas, vous devez la créer.
AVMBR103 : [CLUSTER_SELECTOR] is invalid
Cette erreur s'affiche lorsqu'un sélecteur de cluster spécifié sur un MultiClusterService
n'est pas valide. Ce sélecteur peut être incorrect pour plusieurs raisons :
- La chaîne fournie contient une faute de frappe.
- La chaîne fournie fait référence à une appartenance du cluster qui n'existe plus dans le parc.
AVMBR104 : Cannot find NEGs for Service Port [SERVICE_PORT]
Cette erreur est renvoyée lorsque les éléments NEG (NetworkEndpointGroup) d'un MultiClusterService
et d'une
paire service/port donnés sont introuvables. Les NEG sont les
ressources qui contiennent les points de terminaison du pod dans chacun de vos clusters de backend. La
principale raison pour laquelle les NEG peuvent ne pas exister est qu'une erreur s'est produite lors de la création
ou de la mise à jour des services dérivés dans vos clusters de backend. Consultez les événements
de votre ressource MultiClusterService
pour en savoir plus.
AVMBR105 : Missing GKE Enterprise license.
Cette erreur s'affiche sous "État de la fonctionnalité" et indique que l'API GKE Enterprise (anthos.googleapis.com) n'est pas activée.
AVMBR106 : Derived service is invalid: [REASON].
Cette erreur s'affiche sous les événements de la ressource MultiClusterService
. L'une
des raisons courantes de cette erreur est que la ressource Service dérivée de
MultiClusterService
a une spécification non valide.
Par exemple, ce service MultiClusterService
ne bénéficie d'aucun ServicePort
dans ses spécifications.
apiVersion: networking.gke.io/v1
kind: MultiClusterService
metadata:
name: zone-mcs
namespace: whereami
spec:
clusters:
- link: "us-central1-a/gke-us"
- link: "europe-west1-c/gke-eu"
AVMBR107 : Missing GKE cluster resource link in Membership.
Cette erreur s'affiche sous "État de la fonctionnalité" et se produit parce qu'aucun cluster GKE n'est sous-jacent à la ressource Membership. Vous pouvez le vérifier en exécutant la commande suivante :
gcloud container fleet memberships describe membership-name
et en vérifiant qu'il n'y a pas de lien de ressource de cluster GKE sous le champ du point de terminaison.
AVMBR108 : GKE cluster [NAME] not found.
Cette erreur s'affiche sous "État de la fonctionnalité" et survient si le cluster GKE sous-jacent de Membership n'existe pas.
AVMBR109 : [NAME] is not a VPC-native GKE cluster.
Cette erreur s'affiche sous "État de la fonctionnalité". Cette erreur est générée si le cluster GKE spécifié est un cluster basé sur le routage. Le contrôleur d'entrée multicluster crée un équilibreur de charge natif en conteneurs à l'aide des NEG. Les clusters doivent être de type VPC natif pour utiliser un équilibreur de charge natif en conteneurs.
Pour en savoir plus, consultez la page Créer un cluster de VPC natif.
AVMBR110 : [IAM_PERMISSION] permission missing for GKE cluster [NAME].
Cette erreur s'affiche sous "État de la fonctionnalité". Plusieurs raisons peuvent expliquer cette erreur :
- Le cluster GKE sous-jacent de Membership se trouve dans un projet différent de la ressource Membership elle-même.
- L'autorisation IAM spécifiée a été supprimée de l'agent de service
MultiClusterIngress
.
AVMBR111 : Failed to get Config Membership: [REASON].
Cette erreur s'affiche sous "État de la fonctionnalité". Cette erreur est principalement due au fait que l'abonnement Config a été supprimé alors que la fonctionnalité est activée.
Vous ne devriez jamais avoir à supprimer la configuration de l'appartenance. Si vous souhaitez la modifier, suivez les étapes de migration du cluster de configuration.
AVMBR112 : HTTPLoadBalancing Addon is disabled in GKE Cluster [NAME].
Cette erreur s'affiche sous "État de la fonctionnalité" et se produit lorsque le module complémentaire HTTPLoadBalancing
est désactivé dans un cluster GKE. Vous pouvez mettre à jour votre cluster GKE pour activer le module complémentaire HTTPLoadBalancing
:
gcloud container clusters update name --update-addons=HttpLoadBalancing=ENABLED
AVMBR113 : This resource is orphaned.
Dans certains cas, l'utilité d'une ressource dépend de sa référence à une autre ressource. Cette erreur est générée lorsqu'une ressource Kubernetes est créée mais
n'est pas référencée par une autre ressource. Par exemple, cette erreur s'affiche si
vous créez une ressource BackendConfig
qui n'est pas référencée par un
MultiClusterService
.