Equilibrio de carga entre regiones + routing en Google Container Engine

¿Cómo logro el equilibrio de carga entre regiones en Google Container Engine?

Tendré un clúster de Kubernetes por región en varias regiones y debo enrutar el tráfico desde un solo nombre de dominio al clúster más cercano geográficamente.

Algunas opciones que he investigado:

  • Los LoadBalancers de Kubernetes parecen estar restringidos a un clúster.
  • No estoy seguro de cómo conseguir Kubernetes Ingress para hablar con diferentes clusters. (Parece que este object está respaldado por equilibradores de carga HTTP de Compute Engine).
  • Los equilibradores de carga de Compute Engine HTTP que hablan con clusters expuestos suenan bien , pero el enlace al que hice reference parece tener algunos términos antiguos, como gcloud beta .
  • En lugar de todo esto, ¿puedo realmente get un clúster de Kubernetes para abarcar diferentes regiones?

Ahora, si quiero enrutar diferentes routes URL a diferentes contenedores dentro de un pod, ¿dónde hago eso? Si está en el nivel de Entrada o de Equilibrio de carga HTTP, entonces no tengo suficiente granularidad para abordar contenedores particulares. ¿Eso significa que tendría que usar un service pod + diferente para cada ruta de URL diferente?

El equilibrio de carga de equilibrio de carga de networking de Google (L3) es específicamente por región (estos son los equilibradores de carga que se configuran automáticamente si crea un service de tipo LoadBalancer ). Como Alex mencionó en su respuesta, si usa el balanceo de carga de networking, necesitará configurar un equilibrador de carga por región y luego usar DNS para distribuir las requestes de los usuarios a cada uno de sus equilibradores de carga.

El equilibrio de carga HTTP (S) de Google es una región cruzada (por ejemplo, global). Esto significa que obtendrá una única dirección IP que se equilibrará en todos sus backends HTTP (S), que pueden distribuirse a través de múltiples clusters en múltiples regiones. Para el equilibrio de carga de clúster cruzado, debe configurar el equilibrador de carga HTTP (S) como se describe en ¿Es posible utilizar 1 object de ingreso de Kubernetes para enrutar el tráfico a los services de k8s en diferentes clústeres? .

En cualquier caso, deberá crear un service diferente para cada ruta de URL que desee enrutar a un back-end único. Los services no tienen que usar diferentes pods, aunque es posible que desee si reciben diferentes cantidades de tráfico y desea escalar de forma independiente.

Si usa el equilibrador de carga HTTP (S), puede definir estos services y la asignación de URL como parte de la configuration del equilibrador de carga y dejar que el equilibrador de HTTP (S) realice la inspección / routing de la request por usted. Si usa el equilibrador de carga de la networking, necesitará ejecutar un server HTTP (S) usted mismo que finaliza la connection, inspecciona la request y la enruta al service apropiado.

En lugar de todo esto, ¿puedo realmente get un clúster de Kubernetes para abarcar diferentes regiones?

No fuera de la caja. Puede configurar un clúster de varias zonas (dentro de una región), pero no ofrecemos soporte explícito para configurar un clúster que abarque regiones. Si bien puede hacerlo usted mismo manualmente, no lo recomendamos ya que hay muchos parameters horneados en el software de administración del clúster que se han ajustado con la suposition de una comunicación de baja latencia entre el maestro y los nodos dentro del clúster.

En este momento, la opción más sencilla es ejecutar réplicas fungibles en cada clúster, configurar un equilibrador de carga para cada clúster y configurar manualmente su logging DNS para apuntar a los equilibradores de carga.

Sin embargo, eso no es genial. Se está trabajando en una solución mejor para la próxima versión 1.3: https://github.com/kubernetes/kubernetes/issues/23848