Je crée un déploiement qui se traduit par 4 pods existant sur 2 nœuds.
J'expose ensuite ces pods via un service qui se traduit par les points de terminaison IP et pod de cluster suivants:
Name: s-flask
......
IP: 10.110.201.8
Port: <unset> 9080/TCP
TargetPort: 5000/TCP
NodePort: <unset> 30817/TCP
Endpoints:
192.168.251.131:5000,192.168.251.132:5000,192.168.251.134:5000 + 1 more...
Si vous accédez au service en interne via l'IP du cluster, les demandes sont équilibrées entre les nœuds et tous les pods, pas seulement les pods sur un seul nœud (par exemple, comme l'accès via un nodePort).
Je sais que kubernetes utilise des tables IP pour équilibrer les demandes entre les pods sur un seul nœud, mais je ne trouve aucune documentation qui explique comment kubernetes équilibre les demandes de service internes sur plusieurs nœuds (nous n'utilisons pas d'équilibreurs de charge ou d'entrée pour la charge de service interne équilibrage).
L'IP du cluster lui-même est virtuel, la seule façon dont je pense que cela peut fonctionner, c'est si l'IP du cluster est mappé à une adresse IP de point de terminaison de service, où le client devrait rechercher l'IP/service de cluster et sélectionner une IP de point de terminaison ?
Tout ce dont vous avez besoin est expliqué dans le deuxième paragraphe "IP virtuelles et proxy de service" de cette documentation: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
En bref: actuellement, selon le mode proxy, pour ClusterIP, c'est juste round robin/random. Cela se fait par kube-proxy, qui s'exécute sur chaque noeud, proxy UDP et TCP et fournit un équilibrage de charge.
Il vaut mieux penser aux kubernetes dans leur ensemble plutôt qu'aux nœuds spécifiques. L'abstraction fait sa chose ici.
J'espère que cela répond à votre question.