Comment spécifier l'adresse IP statique pour Kubernetes load balancer?

j'ai un cluster Kubernetes tournant sur Google Compute Engine et je voudrais assigner des adresses IP statiques à mes services externes ( type: LoadBalancer ). Je ne suis pas certain que cela soit possible pour le moment. J'ai trouvé les sources suivantes sur ce sujet:

  • Kubernetes Service Documentation vous permet de définir une adresse IP externe, mais elle échoue avec ne peut pas démonter l'objet Go valeur de type [] v1.Balance des paiements courants 151990920"
  • le champ publicIPs semble me permettre de spécifier des IPs externes, mais il ne semble pas fonctionner non plus
  • Cette Github question , ce que je suis en train de faire n'est pas encore pris en charge, mais sera dans Kubernetes v1.1
  • le champ clusterIP me permet également de spécifier une adresse IP, mais échoue avec" pourvu que L'IP ne soit pas dans la gamme valide "

j'ai l'impression que l'utilisation des IPs statiques est très importante lors de la mise en place de services web. Suis-je manqué quelque chose? Je serais très reconnaissant si quelqu'un pouvait m'éclairer ici!

Modifier: pour la clarification: Je n'utilise pas de moteur de conteneur, j'ai mis en place un cluster moi-même en utilisant les instructions d'installation officielles pour moteur de calcul. Toutes les adresses IP associées à mes services k8s sont marquées comme "éphémère"", ce qui signifie recréer un service kubernetes peut conduire à une adresse IP externe différente (c'est pourquoi j'ai besoin qu'ils soient statiques).

21
demandé sur Community 2015-08-28 10:55:56

3 réponses

Kubernetes v1.1 vais faire quelques changements.

tout d'abord, tous les équilibreurs de charge en GCE auront des IPs statiques. Cela nous permet de simuler des opérations de "mise à jour" que GCE ne supporte pas.

Second, 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 adresse IP "éphémère" est la vôtre aussi longtemps que votre Service existe. C'est à peu près ce que fait AWS avec les noms D'Elbe (attribués au hasard, les vôtres jusqu'à ce que vous le relâchiez).

Les publications

(ou les publications obsolètes EN v1) seront remplacées par des publications externes à sémantique très similaire. Ceux - ci sont" non gérés " IPs-kubernetes ne établira pas un équilibreur de charge en les utilisant, mais il acceptera le trafic pour eux.

clusterIP est une adresse de cluster et n'est généralement pas disponibles en dehors du cluster ou de "projet" ou VPC (en GCE or AWS terms)

9
répondu Tim Hockin 2015-09-01 17:16:53

TL;DR Google Container Engine running Kubernetes v1.1 supporte loadBalancerIP il suffit de marquer l'IP auto-assignée comme statique d'abord.

Kubernetes v1.1 supports externalIPs :

apiVersion: v1
kind: Service
spec:
  type: LoadBalancer
  loadBalancerIP: 10.10.10.10
  ...

jusqu'à présent, il n'y a pas vraiment de 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'un de vos pré-allocation statique IPs.

la documentation cross-region load balancing est principalement pour moteur de calcul et non Kubernetes/conteneur moteur, mais il est encore utile surtout la partie "configurer le service d'équilibrage de charge".

si vous créez simplement un LoadBalancer Kubernetes sur GCE, il créera un moteur de calcul réseau > Network > Network > Network load balancing > Forwarding Rule pointing vers une cible piscine faite de vos machines sur votre cluster (normalement seulement ceux qui exécutent les gousses correspondant au sélecteur de service). Il semble que supprimer un namespace ne nettoie pas bien les règles créées.


mise à Jour

il est en fait maintenant supporté (même si sous documenté):

  1. vérifiez que vous utilisez Kubernetes 1.1 ou plus tard (sous GKE éditez votre cluster et cochez la case "Nœud version")
  2. attribuer des adresses IP statiques sous mise en réseau > adresses IP externes , soit:
    • déployez-vous une fois sans loadBalancerIP , attendez d'avoir une IP externe attribuée lorsque vous lancez kubectl get svc , et cherchez cette IP dans la liste sur cette page et changez celles de éphémère en statique .
    • clic" Réserver a static adresse " régional dans la région de votre cluster, attaché à aucun.
  3. modifier votre LoadBalancer pour avoir loadBalancerIP=10.10.10.10 comme ci-dessus (adapter à L'IP qui vous a été donnée par Google).

maintenant, si vous supprimez votre LoadBalancer ou même votre espace de noms, il préservera cette adresse IP lors du redéploiement sur ce cluster.


mise à jour 2016-11-14

Voir aussi Kubernetes l'article , qui décrit comment configurer une adresse IP statique pour un ou plusieurs domaines sur Kubernetes.

37
répondu Wernight 2017-09-27 08:18:16

si vous utilisez Google Container Engine, et que vous utilisez type: LoadBalancer , alors la plate-forme Cloud de Google devrait avoir fait un équilibreur de charge réseau pour vous avec une adresse IP statique qui vous permettra d'accéder à ce service. Vous n'avez pas besoin de spécifier d'adresse IP.

pour trouver L'IP du répartiteur de charge réseau, Lancez:

gcloud compute forwarding-rules list --project "YOUR-PROJECT-ID"

vous devriez aussi pouvoir exécuter:

kubectl get services

qui retournera à la fois le cluster et IP externe et port pour vos services.

1
répondu Sandeep Dinesh 2015-08-28 18:59:21