Configurar el balanceo de carga manual

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

Debes configurar un balanceador de carga externo para el plano de control antes de crear un clúster de hardware desnudo. El balanceador de carga del plano de control externo también se puede usar para el tráfico del plano de datos, o bien puedes configurar un balanceador de carga independiente para el plano de datos. Por ejemplo, puedes usar un balanceador de carga en el clúster, como MetalLB, para el tráfico del plano de datos.

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

Requisitos previos

En las siguientes secciones se describen los requisitos previos para configurar el balanceo de carga manual.

Dirección IP obligatoria

Debes planificar tus IPs virtuales antes de crear un clúster. Todos los clústeres necesitan una IP virtual para el plano de control. Todos los clústeres de usuarios necesitan un segundo VIP para el servicio de entrada.

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

Cuando creas el clúster, el servicio de entrada se implementa con la dirección IP virtual que especificas en el archivo de configuración del clúster. Puedes configurar el balanceo de carga 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 utilizarán como nodos del plano de control.

Requisitos del balanceador de carga del plano de control externo

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

  • Un servicio virtual (frontend) para la IP virtual del plano de control. El puerto de escucha predeterminado del plano de control es el 443. Sin embargo, si especifica otro puerto, 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 backend en el que escucha el plano de control es 6444.
  • Una comprobación del estado que monitoriza los nodos de backend. La comprobación del estado debe usar HTTPS y comprobar el endpoint /readyz en el puerto 6444. La comprobación del estado debe verificar que este endpoint devuelve el código de estado 200 para considerar que el nodo está en buen estado.

Si el balanceador de carga externo no está configurado correctamente, es probable que falle el bootstrapping del clúster. Una comprobación previa verifica que el balanceador de carga externo esté configurado correctamente, lo que incluye comprobar que el balanceador de carga esté comprobando el estado del endpoint /readyz.

Restablecer las conexiones a los nodos con errores (opción recomendada)

Además de los requisitos anteriores, te recomendamos que configures el balanceador de carga para que restablezca las conexiones de los clientes cuando detecte un fallo en un nodo backend. Sin esta configuración, los clientes del servidor de la API de Kubernetes pueden dejar de responder durante varios minutos cuando una instancia del servidor deja de funcionar, lo que puede provocar inestabilidad en el plano de control de Kubernetes.

  • En F5 BIG-IP, este ajuste se denomina "Action On Service Down" (Acción cuando el servicio no funciona) en la página de configuración del grupo de backend.
  • En HAProxy, esta opción se llama on-marked-down shutdown-sessions en la configuración del servidor backend.
  • Si usas otro balanceador de carga, consulta la documentación para encontrar el ajuste equivalente.

Configura el 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 carga manual en el clúster:

  1. Asigna el valor manual al campo loadBalancer.mode.
  2. Define el campo loadBalancer.vips.controlPlaneVIP con la IP virtual que hayas configurado en el balanceador de carga.
  3. Elimina o comenta la sección loadBalancer.addressPools.

Cuando hayas terminado de editar el archivo de configuración, incluidos los campos que no estén relacionados con el balanceo de carga, verifica que la IP virtual del plano de control esté configurada correctamente en el balanceador de carga ejecutando las comprobaciones previas:

bmctl check preflight -c CLUSTER_NAME

Sustituye CLUSTER_NAME por el nombre del clúster.

Admite servicios de tipo LoadBalancer en clústeres de usuario

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

Además, Google Distributed Cloud despliega automáticamente un servicio de entrada en todos los clústeres de usuarios mediante un servicio LoadBalancer. Para que se pueda acceder a este servicio LoadBalancer desde el exterior, se necesita un balanceador de carga configurado para que apunte al servicio.

Estas son las opciones que tienes para admitir servicios LoadBalancer:

  • Configura manualmente el balanceador de carga para cada servicio LoadBalancer del clúster. Consulta un ejemplo con F5 BIG-IP en Configurar la compatibilidad con servicios LoadBalancer.
  • Instala un controlador de balanceador de carga en el clúster que configure el balanceador de carga externo cuando se creen servicios de tipo LoadBalancer.
  • Instala una solución de balanceo de carga en el clúster, como MetalLB.

Balanceo de carga manual con F5 BIG-IP

En esta sección se describe cómo configurar el balanceo de carga manual con F5 BIG-IP como balanceador de carga externo. Si usas otro balanceador de carga, consulta su documentación y sigue estos pasos como modelo.

Configurar el balanceador de carga del plano de control

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

Crear una partición para el clúster

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

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

En los pasos siguientes, creará 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 interfaz de usuario para cada una de las siguientes tareas, de modo que cada objeto se cree en esta partición.

Crear un monitor

Crea un monitor para realizar comprobaciones del estado en los nodos del plano de control:

  1. Vaya a Tráfico local > Monitorizaciones.
  2. Haz clic en Crear.
  3. Introduce un nombre para la monitorización (por ejemplo, https_readyz).
  4. En Tipo, selecciona HTTPS.
  5. En Cadena de envío, introduce GET /readyz HTTP/1.1\r\nHost: \r\nConnection: close.
  6. En Cadena de recepción, escribe HTTP/1.1 200.
  7. Haz clic en Finalizar.

Crear nodos

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

  1. Vaya a Tráfico local > Nodos > Lista de nodos.
  2. Haz clic en Crear.
  3. Da un nombre al nodo.
  4. Introduce la dirección IP del nodo en el campo Dirección.
  5. Haz clic en Finalizar.

Crear un grupo de backends

Crea un grupo para los nodos del plano de control:

  1. Vaya a Tráfico local > Grupos > Lista de grupos.
  2. Haz clic en Crear.
  3. Selecciona Avanzada en el menú desplegable Configuración.
  4. Introduce un nombre para el grupo.
  5. Selecciona el monitor de estado que has creado antes.
  6. Define Action On Service Down como Reject (consulta la descripción de este ajuste en la sección Restablecer conexiones a nodos fallidos).
  7. Añade el nodo del plano de control al grupo. Si tu clúster tiene varios nodos del plano de control, repite estos pasos con cada nodo:
    1. En la sección Nuevos miembros, haz clic en Lista de nodos y, a continuación, selecciona el nodo del plano de control que has creado anteriormente.
    2. En el campo Puerto de servicio, introduce 6444.
    3. Haz clic en Añadir.

Crear un servidor virtual

Crea un servidor virtual para el plano de control:

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

Configurar la compatibilidad con servicios LoadBalancer

En el modo de balanceo de carga manual, Google Distributed Cloud no aprovisiona automáticamente balanceadores de carga para admitir servicios LoadBalancer. Consulta más información en el artículo sobre compatibilidad con servicios LoadBalancer en clústeres de usuario.

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

Requisitos previos

Para configurar un servicio LoadBalancer, debes conocer la dirección IP virtual que quieres exponer a través del balanceador de carga, el puerto en el que quieres exponerla y el NodePort que está usando el servicio LoadBalancer en Kubernetes.

Una vez que hayas desplegado un servicio LoadBalancer en tu clúster, determina el NodePort que se usa para el servicio LoadBalancer. El siguiente comando mostrará los puertos del servicio:

kubectl --kubeconfig KUBECONFIG get service SERVICE_NAME -oyaml

Haz los cambios siguientes:

  • KUBECONFIG con la ruta del archivo kubeconfig que se va a usar.
  • SERVICE_NAME con 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 del servicio. Este nodePort es el que configura el backend del balanceador de carga para que apunte a él. En el siguiente ejemplo de salida 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 el tráfico HTTP y HTTPS. Puedes exponer uno o ambos puertos a través de tu balanceador de carga.

Si expones el servicio de entrada que se despliega automáticamente en todos los clústeres, el servicio LoadBalancer se llama istio-ingress y está en el espacio de nombres gke-system. Busca sus puertos con este comando:

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

El servicio de entrada se configura con un valor de loadBalancerIP, que es la IP proporcionada en el campo loadBalancer.vips.ingressVIP de la configuración inicial del clúster. Debes exponer esta IP virtual para exponer el servicio de entrada en el balanceador de carga externo.

Crear un grupo de backends

  1. Vaya a Tráfico local > Grupos > Lista de grupos.
  2. Haz clic en Crear.
  3. Introduce un nombre para el grupo.
  4. Selecciona tcp como monitor de estado.
  5. Añade nodos de trabajo al grupo de nodos. Repite estos pasos con cada nodo. Puedes añadir planos de control y nodos de trabajador, ya que se puede acceder a los NodePorts de Kubernetes en cualquier nodo del clúster.
    1. En la sección Nuevos miembros, haz clic en Lista de nodos y, a continuación, selecciona uno de los nodos creados anteriormente.
    2. En el campo Puerto de servicio, introduce el valor de NodePort del servicio.
    3. Haz clic en Añadir.

Crear un servidor virtual

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