Cómo elegir la dirección IP externa de un equilibrador de carga de Kubernetes en Google Kubernetes Engine


16

Estoy implementando una aplicación web con Google Kubernetes Engine y quiero que sea accesible a través de un equilibrador de carga en una dirección IP estática existente que controlo como parte del mismo proyecto en Google Cloud Platform, porque el nombre de dominio que quiero usar Ya apunta a esta IP.

El archivo yaml que utilicé para el pod es:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: gcr.io/my-project/my-app:latest

Puedo configurar un equilibrador de carga usando:

apiVersion: v1
kind: Service
metadata:
  name: my-load-balancer
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: my-app
  type: LoadBalancer

Esto proporciona una IP externa en la que se puede acceder a la aplicación, pero no puedo encontrar ninguna forma de configurarla para usar la IP que quiero. La documentación de servicios menciona una configuración spec.clusterIP, pero esto no parece estar relacionado con la IP externa. Del mismo modo, una vez que se configura el equilibrador de carga, el campo status.loadBalancer.ingress.ip del servicio se establece en su dirección IP externa, pero esto no parece ser una configuración configurable.

Como alternativa, intenté crear manualmente una regla de reenvío en la consola de Google Compute Engine para dirigir el tráfico desde mi dirección IP estática al grupo objetivo configurado por Kubernetes, pero cuando intento conectarme, la conexión se rechaza.

¿Hay alguna forma de hacer lo que quiero: exponer un pod Kubernetes (o controlador de replicación) en el motor Google Kubernetes en una dirección IP estática elegida?

Respuestas:


9

TL; DR Google Container Engine que ejecuta Kubernetes v1.1 admite loadBalancerIPsimplemente marcar primero la IP asignada automáticamente como estática .

Kubernetes v1.1 admite IP externos :

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

Hasta el momento no hay una muy buena documentación consistente sobre cómo usarlo en GCE. Lo que es seguro es que esta IP primero debe ser una de sus IP estáticas preasignadas .

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

Si usted acaba de crear un Kubernetes LoadBalancer de la CME, se creará una red de Compute Engine> Red> equilibrio de carga de red> Regla de reenvío que apunta a un grupo de destino hecho de sus máquinas en el clúster (normalmente sólo los que dirigen las vainas que coincida con el selector de servicio) . Parece que la eliminación de un espacio de nombres no lo hace muy bien las reglas de esos limpieza creadas.


Actualizar

En realidad, es ahora compatible (aunque bajo documentado):

  1. Comprobar que se está ejecutando Kubernetes 1.1 o posterior (bajo GKE editar el clúster, y marca "versión nodo")
  2. En Redes> Direcciones IP externas, ya debería tener algunos Efímeros marcados como apuntando a la instancia de VM de su clúster (si no está seguro o no, despliegue una vez sin loadBalancerIP, espere hasta que tenga una IP externa asignada cuando se ejecuta kubectl get svc, y busque esa IP en el lista en esa página). Marque uno de ellos como estático , digamos que es Dirección externa10.10.10.10 .
  3. Edite su LoadBalancer para que tenga el loadBalancerIP=10.10.10.10anterior (adáptese a la IP que le proporcionó Google).

Ahora, si elimina su LoadBalancer o incluso su espacio de nombres, debería conservar esa dirección IP al volver a reproducir en ese clúster. Si necesita cambiar el clúster, debería ser posible realizar algunos ajustes manuales:

  1. En la sección "Equilibrio de carga de red", pestaña "Grupos de destino" , haga clic en el botón "Crear grupo de destino":
    • Nombre: cluster-pool(o cualquier otro nombre)
    • Región: seleccione la región de uno de sus grupos
    • Control de salud: opcional, si lo desea
    • Seleccione grupos de instancias existentes: su clúster de Kubernetes
  2. En la sección "Equilibrio de carga de red", pestaña "Reglas de reenvío" , haga clic en el botón "Crear regla de reenvío":
    • Nombre: http-cross-region-gfr(o cualquier otro nombre)
    • Región: seleccione la región de uno de sus grupos
    • IP externa: Seleccione loadbalancer-ip-crossregionque acaba de reservar
    • Grupo objetivo: seleccione el cluster-poolque acaba de crear

¿Siguen siendo relevantes?
Ben

8

Buenas noticias. Esto se solucionará en Kubernetes v1.1. Puede establecer el service.spec.loadBalancerIPcampo en una IP que sepa que posee.


Anterior:

Esta es una característica que cayó por las grietas. Se suponía que debía funcionar (e incluso podría haber funcionado en algún momento), pero no se probó bien y se rompió en el camino y luego se diseñó accidentalmente (temporalmente).

Está en mi lista de cosas para solucionar después de 1.0.

https://github.com/GoogleCloudPlatform/kubernetes/issues/10323


Esto probablemente debería ser un comentario, no una respuesta.
Ward - Restablece a Monica

55
@Ward: "No es posible" del desarrollador es una respuesta, en mi humilde opinión, y fue aceptado como tal.
Sven
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.