web-dev-qa-db-fra.com

Comment spécifier une adresse IP statique pour l'équilibreur de charge Kubernetes?

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:

  • Kubernetes Service Documentation vous permet de définir une adresse IP externe, mais il échoue avec ne peut pas démarshal objet en valeur Go de type [] v1.LoadBalancerIngress
  • Le champ publicIPs semble me laisser spécifier des IP externes, mais il ne semble pas fonctionner non plus
  • Ce problème Github indique que ce que j'essaie de faire n'est pas encore pris en charge, mais le sera dans Kubernetes v1.1
  • Le champ clusterIP me permet également de spécifier une adresse IP, mais échoue avec " à condition que l'IP ne soit pas dans la plage valide "

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).

25
Marco Lamina

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)

13
Tim Hockin

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.


Mise à jour

Il est actuellement pris en charge (même s'il est sous-documenté):

  1. Vérifiez que vous exécutez Kubernetes 1.1 ou version ultérieure (sous GKE modifiez votre cluster et cochez la case "Node version")
  2. Allouez des adresses IP statiques sous Réseau> Adresses IP externes , soit:
    • Déployez une fois sans 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.
    • Cliquez sur "Reserver une adresse statique" régional dans la région de votre cluster, attaché à None.
  3. Modifiez votre LoadBalancer pour avoir 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.


Mise à jour 2016-11-14

Voir aussi article Kubernetes décrivant comment configurer une adresse IP statique pour un ou plusieurs domaines sur Kubernetes.

44
Wernight

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.

1
Sandeep Dinesh