pricing precios network elb balancer load-balancing google-compute-engine kubernetes

load balancing - precios - ¿Cómo especificar la dirección IP estática para el equilibrador de carga Kubernetes?



load balancer (3)

Tengo un clúster Kubernetes que se ejecuta en Google Compute Engine y me gustaría asignar direcciones IP estáticas a mis servicios externos ( type: LoadBalancer ). No estoy seguro de si esto es posible en este momento o no. Encontré las siguientes fuentes sobre ese tema:

  • La Documentación de servicio de Kubernetes le permite definir una dirección IP externa, pero falla al no poder desmarcar el objeto en el valor Go de tipo [] v1.LoadBalancerIngress
  • El campo publicIPs parece permitirme especificar direcciones IP externas, pero tampoco parece funcionar
  • Este problema de Github indica que lo que estoy tratando de hacer aún no está soportado, pero estará en Kubernetes v1.1
  • El campo clusterIP también me permite especificar una dirección IP, pero falla con "la IP proporcionada no está en el rango válido "

Siento que el uso de IP estáticas es muy importante al configurar servicios web. ¿Me estoy perdiendo de algo? ¡Estaría muy agradecido si alguien me pudiera iluminar aquí!

EDITAR: Para aclarar: no estoy usando Container Engine, configuré un grupo usando las instrucciones de instalación oficiales de Compute Engine. Todas las direcciones IP asociadas con los servicios de mi k8s están marcadas como "efímeras", lo que significa que la recreación de un servicio kubernetes puede llevar a una dirección IP externa diferente (razón por la cual necesito que sean estáticas).


Kubernetes v1.1 hará algunos cambios.

Primero, todos los balanceadores de carga en GCE obtendrán IP estáticas. Esto nos permite simular operaciones de "actualización" que GCE no admite.

En segundo lugar, https://github.com/kubernetes/kubernetes/pull/13005 propone un nuevo campo para establecer explícitamente la IP de un equilibrador de carga.

Sin embargo, tenga en cuenta que su IP "efímera" es suya mientras exista su Servicio. Esto es más o menos parecido a lo que hace AWS con los nombres de ELB (asignados al azar, los suyos hasta que los libere).

publicIPs (o deprecatedPublicIPs en v1) serán reemplazados por externalIPs con semánticas muy similares. Estas son direcciones IP "no administradas": kubernetes no establecerá un equilibrador de carga al usarlas, pero aceptará tráfico para ellas.

clusterIP es una dirección dentro del clúster y generalmente no está disponible fuera del clúster o "proyecto" o VPC (en términos de GCE o AWS)


Si está ejecutando en Google Container Engine y está utilizando el type: LoadBalancer , entonces Google Cloud Platform debería haber creado un equilibrador de carga de red para usted con una dirección IP estática que se enrutará a este servicio. No es necesario especificar ninguna dirección IP.

Para encontrar la IP del equilibrador de carga de red, ejecute:

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

También deberías poder ejecutar:

kubectl get services

Lo que devolverá tanto el clúster como la IP externa y el puerto para sus servicios.


TL; DR . El motor de contenedor de Google que ejecuta Kubernetes v1.1 admite loadBalancerIP simplemente marca la IP asignada automáticamente como estática primero.

Kubernetes v1.1 soporta externalIPs :

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

Hasta ahora no hay una buena documentación consistente sobre cómo usarla en GCE. Lo que es seguro es que esta IP primero debe ser una de sus IP estáticas asignadas previamente.

La documentación de equilibrio de carga entre regiones es principalmente para Compute Engine y no Kubernetes / Container Engine, pero sigue siendo útil especialmente en la parte "Configurar el servicio de equilibrio de carga".

Si solo crea un Kubernetes LoadBalancer en GCE, creará un motor de proceso de red> Red> Equilibrio de carga de red> Regla de reenvío que apunta a un grupo objetivo de sus máquinas en su grupo (normalmente solo aquellos que ejecutan los Pods que coinciden con el selector de servicios) . Parece que eliminar un espacio de nombres no limpia las reglas creadas.

Actualizar

En realidad ahora es compatible (aunque esté documentado):

  1. Compruebe que está ejecutando Kubernetes 1.1 o posterior (en GKE edite su grupo y marque "Versión de nodo")
  2. Asigne direcciones IP estáticas en Redes> Direcciones IP externas , ya sea:
    • Implemente una vez sin loadBalancerIP , espere hasta que tenga una IP externa asignada cuando ejecute kubectl get svc , busque esa IP en la lista en esa página y cambie las de Efímero a Estática .
    • Haga clic en "Reservar una dirección estática" regional en la región de su grupo, adjunta a Ninguno.
  3. Edite su LoadBalancer para que tenga loadBalancerIP=10.10.10.10 como se loadBalancerIP=10.10.10.10 anteriormente (adapte a la IP que le proporcionó Google).

Ahora, si elimina su LoadBalancer o incluso su espacio de nombres, conservará esa dirección IP cuando vuelva a implementar en ese clúster.

Actualización 2016-11-14

Consulte también el artículo de Kubernetes que describe cómo configurar una IP estática para dominios únicos o múltiples en Kubernetes.