Configura el balanceo manual de cargas

En esta página, se explican los requisitos del balanceo de cargas cuando se usa el balanceo de cargas manual. A diferencia del balanceo de cargas agrupadas, en el que Google Distributed Cloud implementa balanceadores de cargas en los nodos del clúster para el tráfico del plano de control y el plano de datos, con el balanceo de cargas manual puedes configurar tus propias soluciones de balanceo para el tráfico del plano de control y el plano de datos.

Debes configurar un balanceador de cargas externo para el plano de control antes de crear un clúster de equipos físicos. El balanceador de cargas del plano de control externo también se puede usar para el tráfico del plano de datos, o puedes configurar un balanceador de cargas por separado para el plano de datos. Por ejemplo, puedes usar un balanceador de cargas en el clúster como MetalLB para el tráfico del plano de datos.

Además de explicar los requisitos del balanceo de cargas, en esta página se describe cómo configurar el balanceo de cargas manual con BIG-IP de F5.

Requisitos previos

En las siguientes secciones, se describen los requisitos para configurar el balanceo de cargas manual.

Dirección IP obligatoria

Debes planificar tus VIP antes de crear un clúster. Todos los clústeres necesitan una VIP para el plano de control. Todos los clústeres de usuario necesitan una segunda VIP para el servicio de entrada.

Estas VIP pueden estar en cualquier subred IPv4 que se pueda enrutar desde el balanceador de cargas. Se debe poder acceder a la VIP del plano de control desde todos los nodos del clúster y desde la estación de trabajo del administrador en la que se ejecuta bmctl.

Cuando creas el clúster, el servicio de entrada se implementa con la VIP que especificas en el archivo de configuración del clúster. Puedes configurar el balanceo de cargas para esta dirección IP después de crear el clúster.

Debes conocer las direcciones IP que usarás para los nodos que se usarán como nodos del plano de control.

Requisitos del balanceador de cargas del plano de control externo

El balanceador de cargas del plano de control debe configurarse antes de crear el clúster. El balanceador de cargas del plano de control debe cumplir con estos requisitos:

  • Un servicio virtual (frontend) para la VIP del plano de control. El puerto de escucha predeterminado del plano de control es 443. Sin embargo, si especificas un puerto diferente, el campo loadBalancer.ports.controlPlaneLBPort del archivo de configuración del clúster usará ese puerto para el servicio virtual.
  • Un grupo de backend que contiene todas las direcciones IP de los nodos del plano de control del clúster. El puerto de backend que escucha el plano de control es 6444.
  • Una verificación de estado que supervisa los nodos de backend. La verificación de estado debe usar HTTPS y comprobar el extremo /readyz en el puerto 6444. La verificación de estado debe verificar que este extremo muestre el código de estado 200 para considerar que el nodo está en buen estado.

Si el balanceador de cargas externo no se configuró de forma correcta, es probable que el arranque del clúster falle. Una verificación de comprobación previa comprueba que el balanceador de cargas externo esté configurado de forma correcta, lo que incluye verificar que el balanceador de cargas verifique el extremo /readyz.

Restablece las conexiones a los nodos con errores (recomendado)

Además de los requisitos anteriores, te recomendamos configurar el balanceador de cargas para restablecer las conexiones de los clientes cuando detecte una falla en el nodo de backend. Sin esta configuración, los clientes del servidor de la API de Kubernetes pueden dejar de responder durante varios minutos cuando una instancia de servidor falla, lo que puede causar inestabilidad en el plano de control de Kubernetes.

  • Con BIG-IP de F5, esta configuración se llama Action On Service Down en la página de configuración del grupo de backend.
  • Con HAProxy, esta configuración se llama on-marked-down shutdown-sessions en la configuración del servidor de backend.
  • Si usas un balanceador de cargas diferente, debes consultar la documentación para encontrar la configuración equivalente.

Configura tu clúster

Antes de crear un clúster de Google Distributed Cloud, debes crear un archivo de configuración de clúster con bmctl. Edita este archivo para habilitar el balanceo de cargas manual en el clúster:

  1. Configura el campo loadBalancer.mode como manual.
  2. Establece el campo loadBalancer.vips.controlPlaneVIP en la VIP que configuraste en el balanceador de cargas.
  3. Quita la sección loadBalancer.addressPools o márcala como comentario.

Una vez que termines de editar el archivo de configuración, incluidos los campos no relacionados con el balanceo de cargas, verifica que la VIP del plano de control esté configurada de forma correcta en el balanceador de cargas mediante la ejecución de las verificaciones previas:

bmctl check preflight -c CLUSTER_NAME

Reemplaza CLUSTER_NAME por el nombre del clúster.

Admite servicios LoadBalancer en clústeres de usuario

Debes configurar el balanceo de cargas para admitir los servicios LoadBalancer de Kubernetes. En el modo de balanceo manual de cargas, Google Distributed Cloud no aprovisiona automáticamente los balanceadores de cargas, por lo que los servicios LoadBalancer no funcionan, a menos que aprovisiones y configures los balanceadores de cargas para apuntar a los servicios.

Además, Google Distributed Cloud implementa de forma automática un servicio de entrada en todos los clústeres de usuarios mediante un servicio LoadBalancer. Para tener acceso externo, este servicio LoadBalancer requiere un balanceador de cargas configurado a fin de que apunte al servicio.

Sus opciones para admitir servicios LoadBalancer incluyen las siguientes:

  • Configurar manualmente el balanceador de cargas para cada servicio LoadBalancer en el clúster. Consulta la sección Configura la compatibilidad para servicios LoadBalancer a fin de ver un ejemplo con F5 BIG-IP.
  • Instalar un controlador de balanceador de cargas en el clúster que configure el balanceador de cargas externo cuando se creen los servicios LoadBalancer.
  • Instalar una solución de balanceo de cargas en el clúster como MetalLB.

Balanceo manual de cargas con F5 BIG-IP

En esta sección, se describe cómo configurar el balanceo de cargas manual con BIG-IP de F5 como el balanceador de cargas externo. Si usas un balanceador de cargas diferente, consulta la documentación de ese balanceador de cargas y usa estos pasos como modelo.

Configura el balanceador de cargas del plano de control

Debes configurar el balanceador de cargas del plano de control antes de crear un clúster. Después de seguir estos pasos, puedes configurar tu clúster y crearlo.

Crea una partición para tu clúster

Cada clúster debe tener su propia partición. Usa la utilidad de configuración BIG-IP para crear una partición:

  1. Ve a Sistema > Usuarios > Lista de particiones.
  2. Haz clic en Crear.
  3. Ingresa un nombre para la partición.
  4. Haz clic en Finalizado.

En los siguientes pasos, crearás objetos en esta partición. Asegúrate de que esta partición esté seleccionada en el menú desplegable de la esquina superior derecha de la IU para cada una de las siguientes tareas, de modo que cada objeto se cree en esta partición.

Crea un monitor

Crea una supervisión para realizar verificaciones de estado en los nodos del plano de control:

  1. Ve a Tráfico local > Supervisores.
  2. Haz clic en Crear.
  3. Ingresa un nombre para el supervisor (por ejemplo, https_readyz).
  4. Configura el Tipo como HTTPS.
  5. En Enviar string, ingresa GET /readyz HTTP/1.1\r\nHost: \r\nConnection: close.
  6. En Recibir string, ingresa HTTP/1.1 200.
  7. Haz clic en Finalizado.

Crea nodos

Crea un nodo que apunte a los nodos del plano de control. Si tu clúster tiene un plano de control con alta disponibilidad (HA) con varios nodos del plano de control, crea un objeto de nodo para cada nodo del plano de control.

  1. Ve a Tráfico local > Nodos > Lista de nodos.
  2. Haz clic en Crear.
  3. Ingresa un nombre para el nodo.
  4. Ingresa la dirección IP del nodo en el campo Dirección.
  5. Haz clic en Finalizado.

Crea un grupo de backend

Crea un grupo para los nodos del plano de control:

  1. Ve a Tráfico local > Grupos > Lista de grupos.
  2. Haz clic en Crear.
  3. Selecciona Avanzado en el menú desplegable Configuración.
  4. Ingresa un nombre para el grupo.
  5. Selecciona la supervisión de estado que creaste antes.
  6. Configura Action On Service Down como Pause (consulta el debate sobre esta configuración en la sección Reset connections to noized nodes).
  7. Agrega el nodo de plano de control al grupo. Si tu clúster tiene múltiples nodos del plano de control, repite estos pasos para cada nodo:
    1. En la sección Miembros nuevos, haz clic en Lista de nodos y, luego, selecciona el nodo del plano de control que se creó antes.
    2. En el campo Puerto de servicio, ingresa 6444.
    3. Haz clic en Agregar.

Crea un servidor virtual

Crea un servidor virtual para el plano de control:

  1. Ve a Tráfico local > Servidores virtuales > Lista de servidores virtuales.
  2. Haz clic en Crear.
  3. Ingresa un nombre para el servidor virtual.
  4. Configura Tipo como Estándar.
  5. Ingresa 0.0.0.0/0 en el campo Dirección de origen para permitir el tráfico desde cualquier fuente.
  6. Ingresa la VIP del plano de control como la Dirección de destino.
  7. Ingresa el puerto del plano de control como el Puerto de servicio. El valor predeterminado es 443, pero se puede configurar y debe coincidir con lo que configuraste en la configuración del clúster para loadBalancer.ports.controlPlaneLBPort.
  8. En el campo Traducción de direcciones de origen, selecciona Asignación automática.
  9. En Grupo predeterminado, selecciona el grupo que creaste antes en el menú desplegable.
  10. Haz clic en Finalizado.

Configura la compatibilidad con los servicios de LoadBalancer

En el modo de balanceo de cargas manual, Google Distributed Cloud no aprovisiona de forma automática los balanceadores de cargas para admitir los servicios LoadBalancer. Consulta Compatibilidad con los servicios de LoadBalancer en clústeres de usuario para obtener más información.

En esta sección, se muestra cómo configurar de forma manual un balanceador de cargas de BIG-IP de F5 para un servicio LoadBalancer. Repite estos pasos para cada servicio LoadBalancer que quieras exponer.

Requisitos previos

Para configurar un servicio LoadBalancer, debes conocer el VIP que quieres exponer a través del balanceador de cargas, el puerto en el que deseas exponerlo y el NodePort que usa el servicio LoadBalancer en Kubernetes.

Después de implementar un servicio LoadBalancer en tu clúster, determina el NodePort que se usó para el servicio LoadBalancer. El siguiente comando mostrará los puertos del servicio:

kubectl --kubeconfig KUBECONFIG get service SERVICE_NAME -oyaml

Reemplaza lo siguiente:

  • KUBECONFIG por la ruta al archivo kubeconfig que se usará.
  • SERVICE_NAME por el nombre del servicio LoadBalancer.

El resultado de kubctl get service incluye una sección ports. Cada entrada de puerto muestra el nodePort expuesto para el puerto en el servicio, y dicho nodePort es el que configuras para que sea al que apunte el backend del balanceador de cargas. En el siguiente resultado de ejemplo, se muestra la estructura de la sección ports:

spec:
  clusterIP: 172.26.232.107
  externalTrafficPolicy: Cluster
  loadBalancerIP: 21.0.101.77
  ports:
  - name: status-port
    nodePort: 30281
    port: 15021
    protocol: TCP
    targetPort: 15021
  - name: http
    nodePort: 30124
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    nodePort: 31858
    port: 443
    protocol: TCP
    targetPort: 443

Hay puertos para tráfico HTTP y HTTPS. Puedes exponer uno o ambos puertos a través de tu balanceador de cargas.

Si expones el servicio de Ingress que se implementa de forma automática en todos los clústeres, el servicio LoadBalancer se llama istio-ingress y está en el espacio de nombres gke-system. Encuentra sus puertos con el siguiente comando:

kubectl --kubeconfig KUBECONFIG -n gke-system get service istio-ingress -oyaml

El servicio de Ingress se configura con loadLoadrIP, que es la IP proporcionada en el campo loadBalancer.vips.ingressVIP de la configuración inicial del clúster. Debes exponer esta VIP para exponer el servicio de entrada en el balanceador de cargas externo.

Crea un grupo de backend

  1. Ve a Tráfico local > Grupos > Lista de grupos.
  2. Haz clic en Crear.
  3. Ingresa un nombre para el grupo.
  4. Selecciona tcp como monitor de estado.
  5. Agrega nodos trabajadores al grupo de nodos. Repite estos pasos para cada nodo. Puedes agregar planos de control y nodos trabajadores como recursos NodePort de Kubernetes a los que se puede acceder en cualquier nodo del clúster.
    1. En la sección Miembros nuevos, haz clic en Lista de nodos y, luego, selecciona uno de los nodos creados anteriormente.
    2. En el campo Puerto de servicio, ingresa el valor NodePort del servicio.
    3. Haz clic en Agregar.

Crea un servidor virtual

  1. Ve a Tráfico local > Servidores virtuales > Lista de servidores virtuales.
  2. Haz clic en Crear.
  3. Ingresa un nombre para el servidor virtual.
  4. Configura Tipo como Estándar.
  5. Ingresa 0.0.0.0/0 en el campo Dirección de origen para permitir el tráfico desde cualquier fuente.
  6. Ingresa la VIP del servicio del balanceador de cargas como la dirección de destino.
  7. Ingresa el puerto que se expone para el servicio del balanceador de cargas como el Puerto de servicio.
  8. En el campo Traducción de direcciones de origen, selecciona Asignación automática.
  9. En Grupo predeterminado, selecciona el grupo que creaste antes en el menú desplegable.
  10. Haz clic en Finalizado.