Dans les scénarios d'informatique en périphérie (edge computing), des conflits peuvent survenir si plusieurs pools de nœuds exposent le même port via des services NodePort. L'isolation des services NodePort permet de restreindre les pools de nœuds autorisés à écouter sur les ports d'un service NodePort, évitant ainsi les conflits entre les différents pools.
Fonctionnement
Le composant edge-hub intègre un framework de filtrage de données programmable qui intercepte et transforme les réponses du kube-apiserver avant de les transmettre aux nœuds périphériques. Un filtre nommé nodeportisolation fonctionne conjointement avec l'annotation nodeport.openyurt.io/listen pour contrôler quels pools de nœuds écoutent sur les ports d'un service NodePort.

Prérequis
Avant de commencer, vérifiez que vous disposez des éléments suivants :
Une version 0.11.0 ou ultérieure du composant edge-hub
Un service NodePort ou LoadBalancer à configurer
Configurer l'écoute NodePort par pool de nœuds
Ajoutez l'annotation nodeport.openyurt.io/listen à votre service NodePort ou LoadBalancer.
Clé d'annotation : nodeport.openyurt.io/listen
Valeur d'annotation : liste de noms de pools de nœuds séparés par des virgules, selon la syntaxe suivante :
foo: active l'écoute sur les nœuds du pool de nœuds nomméfoo.-foo: désactive l'écoute sur les nœuds du pool de nœuds nomméfoo.*: active l'écoute sur les nœuds de tous les pools de nœuds.
Règles de comportement :
Si un nom de pool de nœuds apparaît plusieurs fois dans les valeurs d'annotation, seule la première entrée est prise en compte.
L'écoute NodePort est désactivée pour les pools de nœuds non répertoriés dans l'annotation.
Les nœuds orphelins (n'appartenant à aucun pool de nœuds) se comportent comme dans Kubernetes standard : l'écoute NodePort est activée.
Exemples d'annotations
nodeport.openyurt.io/listen=foo,bar # Listen on nodes in foo and bar
nodeport.openyurt.io/listen=foo,* # Listen on nodes in all node pools
nodeport.openyurt.io/listen=-foo,-bar # Disable listening on nodes in all node pools
nodeport.openyurt.io/listen=-foo,* # Disable listening only on nodes in foo
nodeport.openyurt.io/listen=foo,-foo # Listen on nodes in foo
nodeport.openyurt.io/listen=-foo # Disable listening on nodes in all node pools (including foo)
Les annotations nodeport.openyurt.io/listen=foo,* et nodeport.openyurt.io/listen=foo,-foo activent toutes deux l'écoute sur foo, car foo apparaît avant l'entrée contradictoire et a donc priorité.
Remarques d'utilisation
Ajoutez l'annotation
nodeport.openyurt.io/listenlors de la création du service. Si vous l'ajoutez après la création du service, redémarrez toutes les instances kube-proxy pour que la modification prenne effet.Lorsque vous ajoutez un nouveau pool de nœuds, mettez à jour l'annotation pour inclure ce nouveau pool avant d'y ajouter des nœuds. Cela garantit que l'écoute NodePort est active sur tous les nœuds dès leur intégration au pool.
Utilisez l'ID du pool de nœuds (format :
npxxxx) plutôt que son nom, car les noms de pools de nœuds sont personnalisables et susceptibles de changer. Vous trouverez l'ID du pool de nœuds dans la console ACK.