J'ai un cluster Kubernetes en cours d'exécution sur Google Compute Engine et je voudrais attribuer des adresses IP statiques à mes services externes (type: LoadBalancer
). Je ne sais pas si cela est possible pour le moment ou non. J'ai trouvé les sources suivantes sur ce sujet:
J'ai l'impression que l'utilisation d'adresses IP statiques est assez importante lors de la configuration des services Web. Est-ce que j'ai râté quelque chose? Je serais très reconnaissant si quelqu'un pouvait m'éclairer ici!
EDIT: Pour plus de précision: je n'utilise pas Container Engine, j'ai configuré moi-même un cluster en utilisant les instructions d'installation officielles de Compute Engine. Toutes les adresses IP associées à mes services k8s sont marquées comme "éphémères", ce qui signifie que recréer un service kubernetes peut conduire à une adresse IP externe différente (c'est pourquoi j'ai besoin qu'elles soient statiques).
Kubernetes v1.1 apportera quelques modifications.
Tout d'abord, tous les équilibreurs de charge dans GCE obtiendront des adresses IP statiques. Cela nous permet de simuler des opérations de "mise à jour" que GCE ne prend pas en charge.
Deuxièmement, https://github.com/kubernetes/kubernetes/pull/13005 propose un nouveau champ pour définir explicitement l'IP d'un équilibreur de charge.
Notez cependant que votre IP "éphémère" est la vôtre tant que votre Service existe. Cela ressemble à peu près à ce que fait AWS avec les noms ELB (attribués au hasard, le vôtre jusqu'à ce que vous le libériez).
publicIPs (ou deprecatedPublicIPs dans v1) sera remplacé par des externalIPs avec une sémantique très similaire. Ce sont des adresses IP "non gérées" - kubernetes n'établira pas d'équilibreur de charge en les utilisant, mais il acceptera le trafic pour elles.
clusterIP est une adresse dans le cluster et n'est généralement pas disponible en dehors du cluster ou du "projet" ou du VPC (en termes GCE ou AWS)
TL; DR Google Container Engine exécutant Kubernetes v1.1 prend en charge loadBalancerIP
marquez simplement l'adresse IP attribuée automatiquement comme statique en premier.
Kubernetes v1.1 prend en charge externalIPs :
apiVersion: v1
kind: Service
spec:
type: LoadBalancer
loadBalancerIP: 10.10.10.10
...
Jusqu'à présent, il n'y a pas vraiment de bonne documentation cohérente sur la façon de l'utiliser sur GCE. Ce qui est sûr, c'est que cette IP doit d'abord être l'une de vos IP statiques préétablies .
La documentation équilibrage de charge entre régions concerne principalement Compute Engine et non Kubernetes/Container Engine, mais elle est toujours utile, en particulier la partie "Configurer le service d'équilibrage de charge".
Si vous venez de créer un Kubernetes LoadBalancer sur GCE, il créera un réseau Compute Engine> Réseau> Équilibrage de la charge réseau> Règle de transfert pointant vers un pool cible composé de vos machines sur votre cluster (normalement uniquement celles qui exécutent les pods correspondant au sélecteur de service) . Il semble que la suppression d'un espace de noms ne nettoie pas bien les règles créées.
Il est actuellement pris en charge (même s'il est sous-documenté):
loadBalancerIP
, attendez d'avoir une IP externe allouée lorsque vous exécutez kubectl get svc
, et recherchez cette adresse IP dans la liste sur cette page et changez ceux de Ephemeral à Static.loadBalancerIP=10.10.10.10
comme ci-dessus (adaptez-vous à l'adresse IP qui vous a été donnée par Google).Maintenant, si vous supprimez votre LoadBalancer ou même votre espace de noms, il conservera cette adresse IP lors du re-rechargement sur ce cluster.
Voir aussi article Kubernetes décrivant comment configurer une adresse IP statique pour un ou plusieurs domaines sur Kubernetes.
Si vous utilisez Google Container Engine et utilisez type: LoadBalancer
, alors Google Cloud Platform aurait dû créer un équilibreur de charge réseau pour vous avec une adresse IP statique qui sera acheminée vers ce service. Vous n'avez pas besoin de spécifier d'adresse IP.
Pour trouver l'IP de l'équilibreur de charge réseau, exécutez:
gcloud compute forwarding-rules list --project "YOUR-PROJECT-ID"
Vous devriez également pouvoir exécuter:
kubectl get services
Qui renverra à la fois le cluster et l'IP externe et le port pour vos services.