Migrar la configuración del balanceador de carga F5 BIG-IP

1.29: Vista previa
1.28: No disponible

En este documento se explica cómo migrar los ajustes de configuración de la integración de tu balanceador de carga F5 BIG-IP al modo de balanceo de carga manual para clústeres de la versión 1.29. Si tus clústeres tienen la versión 1.30 o una posterior, te recomendamos que sigas las instrucciones que se indican en el artículo Planificar la migración de clústeres a las funciones recomendadas.

Si usas F5 BIG-IP en el modo de balanceo de carga manual, podrás actualizar tus agentes de F5 de forma independiente sin que esto afecte a la funcionalidad de tu balanceador de carga de F5 ni a tus servicios de Kubernetes. Si migras a la configuración manual, puedes obtener actualizaciones directamente de F5 para garantizar un rendimiento y una seguridad óptimos.

Esta migración es obligatoria en los siguientes casos:

  • Quieres habilitar nuevas funciones, como Controlplane V2, y también necesitas acceso a F5.

  • Necesitas las funciones que proporciona una versión del controlador de servicios de entrada de contenedores (CIS) de BIG-IP superior a la 1.14.

Si no se dan las circunstancias anteriores, puedes seguir usando la configuración incluida para el balanceo de carga de F5 BIG-IP.

En cualquier caso, seguimos ofreciendo asistencia oficial para F5 como solución de balanceo de carga.

Compatibilidad con el balanceador de carga F5 BIG-IP

Admitimos el uso de F5 BIG-IP con agentes de balanceador de carga, que constan de los dos controladores siguientes:

Estos agentes simplifican la configuración de los balanceadores de carga F5 en tu clúster de Kubernetes. Al crear un servicio de tipo LoadBalancer, los controladores configuran automáticamente el balanceador de carga de F5 para dirigir el tráfico a los nodos del clúster.

Sin embargo, la solución combinada tiene algunas limitaciones:

  • La expresividad de la API de servicio es limitada. No puedes configurar el controlador BIG-IP como quieras ni usar funciones avanzadas de F5. F5 ya ofrece mejor compatibilidad con la API de servicio de forma nativa.

  • La implementación usa la API ConfigMap de CCCL antigua y CIS 1.x. Sin embargo, F5 ahora ofrece la API ConfigMap AS3 más reciente y 2.x CIS.

El controlador de CIS del paquete de Google Distributed Cloud se ha mantenido en la versión 1.14 debido a problemas de compatibilidad con la guía de actualización de F5 para CIS 2.x. Por lo tanto, para ofrecerte la flexibilidad necesaria para abordar las vulnerabilidades de seguridad y acceder a las funciones más recientes, vamos a cambiar los agentes de F5 de componentes empaquetados a componentes que se instalan de forma independiente. Si haces la migración, podrás seguir usando los agentes sin interrupciones y los servicios que hayas creado anteriormente seguirán operativos.

En los clústeres de balanceo de carga manual que se creen y que usen F5 como solución de balanceo de carga, tendrás que instalar los controladores tú mismo. Del mismo modo, si tu clúster se ha migrado desde F5 empaquetado y quieres usar una versión más reciente de CIS Controller, debes instalar los controladores tú mismo.

Requisitos

Estos son los requisitos para la migración:

  • El clúster de administrador y todos los clústeres de usuarios deben tener la versión 1.29 o una posterior.

  • Debes usar direcciones IP estáticas para los nodos de los clústeres de administrador y de usuario. El tipo de direccionamiento IP se define en el campo network.ipMode.type y es inmutable. Si este campo está configurado como DHCP, no podrás migrar los clústeres.

Actualizar el archivo de configuración del clúster de usuarios

Haz los siguientes cambios en el archivo de configuración del clúster de usuarios:

  1. Cambia loadBalancer.kind a "ManualLB".

  2. Mantén los mismos valores en los campos loadBalancer.vips.controlPlaneVIP y loadBalancer.vips.ingressVIP.

  3. Configura el nodePort que se usa para el tráfico HTTP enviado al VIP de entrada.

    1. Obtén el valor HTTP nodePort actual:

      kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
          get svc istio-ingress -n gke-system -oyaml | grep http2 -A 1

      Sustituye USER_CLUSTER_KUBECONFIG por la ruta del archivo kubeconfig del clúster de usuario.

    2. Añade el valor del comando anterior al campo loadBalancer.manualLB.ingressHTTPNodePort. Por ejemplo:

      loadBalancer:
        manualLB:
          ingressHTTPNodePort: 30243
  4. Configura el nodePort que se usa para el tráfico HTTPS enviado al VIP de entrada:

    1. Obtener el valor actual de HTTPS nodePort:

      kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
          get svc istio-ingress -n gke-system -oyaml | grep https -A 1
    2. Añade el valor del comando anterior al campo loadBalancer.manualLB.ingressHTTPSNodePort. Por ejemplo:

      loadBalancer:
        manualLB:
          ingressHTTPSNodePort: 30879
  5. Configura el nodePort para el servidor de la API de Kubernetes:

    1. Obtén el valor nodePort actual del servidor de la API de Kubernetes:

      kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep kube-apiserver-port -A 1

      Haz los cambios siguientes:

      • ADMIN_CLUSTER_KUBECONFIG con la ruta del archivo kubeconfig del clúster de administrador.

      • USER_CLUSTER_NAME: nombre del clúster de usuarios.

    2. Añade el valor del comando anterior al campo loadBalancer.manualLB.controlPlaneNodePort. Por ejemplo:

      loadBalancer:
        manualLB:
          controlPlaneNodePort: 30968
  6. Configura el nodePort del servidor Konnectivity:

    1. Obtén el valor de nodePort actual del servidor Konnectivity:

      kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep konnectivity-server-port -A 1
    2. Añade el valor del comando anterior al campo loadBalancer.manualLB.konnectivityServerNodePort. Por ejemplo:

      loadBalancer:
        manualLB:
          konnectivityServerNodePort: 30563
  7. Elimina toda la sección loadBalancer.f5BigIP.

Actualizar el clúster de usuarios

Ejecuta el siguiente comando para migrar el clúster:

gkectl update cluster \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config USER_CLUSTER_CONFIG

Haz los cambios siguientes:

  • ADMIN_CLUSTER_KUBECONFIG: la ruta del archivo kubeconfig del clúster de administrador.

  • USER_CLUSTER_CONFIG: la ruta del archivo de configuración del clúster de usuarios.

Actualizar el archivo de configuración del clúster de administrador

Haz los siguientes cambios en el archivo de configuración del clúster de administrador:

  1. Cambia loadBalancer.kind a "ManualLB".

  2. Mantén el mismo valor en el campo loadBalancer.vips.controlPlaneVIP.

  3. Comprueba el valor del campo adminMaster.replicas. Si el valor es 3, el clúster de administrador tiene alta disponibilidad. Si el valor es 1, el clúster de administrador no es de alta disponibilidad.

  4. Sigue estos pasos solo en los clústeres de administrador que no sean de alta disponibilidad:

    1. Obtén el valor de nodePort para el servidor de la API de Kubernetes:

      kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          get svc kube-apiserver -n kube-system -oyaml | grep nodePort

      Sustituye ADMIN_CLUSTER_KUBECONFIG por la ruta del archivo kubeconfig del clúster de administrador.

    2. Añade el valor del comando anterior al campo loadBalancer.manualLB.controlPlaneNodePort. Por ejemplo:

      loadBalancer:
        manualLB:
          controlPlaneNodePort: 30968
  5. Ejecuta el siguiente comando para ver si hay complementos nodePort:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        get deploy monitoring-operator -n kube-system -oyaml | grep admin-ingress-nodeport

    Si el comando anterior devuelve un valor, añádalo al campo loadBalancer.manualLB.addonsNodePort. Por ejemplo:

    loadBalancer:
      manualLB:
        addonsNodePort: 31405
  6. Elimina toda la sección loadBalancer.f5BigIP.

Actualizar el clúster de administrador

Ejecuta el siguiente comando para actualizar el clúster:

gkectl update admin \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config ADMIN_CLUSTER_CONFIG

Haz los cambios siguientes:

  • ADMIN_CLUSTER_KUBECONFIG: la ruta del archivo kubeconfig del clúster de administrador.

  • ADMIN_CLUSTER_CONFIG: la ruta del archivo de configuración del clúster de administrador.

Verificar que los recursos antiguos de F5 siguen existiendo

Después de actualizar los clústeres para que usen el balanceo de carga manual, el tráfico a tus clústeres no se interrumpe porque los recursos de F5 siguen existiendo. Puedes comprobarlo ejecutando el siguiente comando:

kubectl --kubeconfig CLUSTER_KUBECONFIG \
  api-resources --verbs=list -o name   | xargs -n 1 kubectl --kubeconfig CLUSTER_KUBECONFIG get --show-kind --ignore-not-found --selector=onprem.cluster.gke.io/legacy-f5-resource=true -A

Sustituye CLUSTER_KUBECONFIG por la ruta del archivo kubeconfig del clúster de administrador o del clúster de usuario.

El resultado esperado es similar al siguiente:

Clúster de administración:

Warning: v1 ComponentStatus is deprecated in v1.19+
NAMESPACE     NAME                        TYPE     DATA   AGE
kube-system   secret/bigip-login-xt697x   Opaque   4      13h
NAMESPACE     NAME                              SECRETS   AGE
kube-system   serviceaccount/bigip-ctlr         0         13h
kube-system   serviceaccount/load-balancer-f5   0         13h
NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/k8s-bigip-ctlr-deployment   1/1     1            1           13h
kube-system   deployment.apps/load-balancer-f5            1/1     1            1           13h
NAME                                                                                ROLE                                       AGE
clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding         ClusterRole/bigip-ctlr-clusterrole         13h
clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding   ClusterRole/load-balancer-f5-clusterrole   13h
NAME                                                                 CREATED AT
clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole         2024-03-25T04:37:34Z
clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole   2024-03-25T04:37:34Z

Clúster de usuarios:

Warning: v1 ComponentStatus is deprecated in v1.19+
NAMESPACE     NAME                        TYPE     DATA   AGE
kube-system   secret/bigip-login-sspwrd   Opaque   4      14h
NAMESPACE     NAME                              SECRETS   AGE
kube-system   serviceaccount/bigip-ctlr         0         14h
kube-system   serviceaccount/load-balancer-f5   0         14h
NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/k8s-bigip-ctlr-deployment   1/1     1            1           14h
kube-system   deployment.apps/load-balancer-f5            1/1     1            1           14h
NAME                                                                                ROLE                                       AGE
clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding         ClusterRole/bigip-ctlr-clusterrole         14h
clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding   ClusterRole/load-balancer-f5-clusterrole   14h
NAME                                                                 CREATED AT
clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole         2024-03-25T05:16:40Z
clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole   2024-03-25T05:16:41Z

Comprobar el balanceador de carga

Después de la migración, no debería tener que cambiar ningún ajuste en su balanceador de carga, ya que ha conservado los mismos valores de VIP y nodePort. En las siguientes tablas se describen las asignaciones de las IPs virtuales a las direcciones IP de los nodos:nodePort.

Clúster de administradores de alta disponibilidad

Tráfico a los nodos del plano de control

Google Distributed Cloud gestiona automáticamente el balanceo de carga del tráfico del plano de control de los clústeres de administrador de alta disponibilidad. Aunque no es necesario configurar una asignación en el balanceador de carga, debes especificar una dirección IP en el campo loadBalancer.vips.controlPlaneVIP.

Tráfico a los servicios de los nodos del complemento

Si tu clúster de administrador tenía un valor para addonsNodePort, deberías ver una asignación a las direcciones IP y el valor nodePort del tráfico a los servicios de los nodos complementarios:

  • (addonsVIP:8443) -> (NODE_IP_ADDRESSES:addonsNodePort)

Debes tener esta asignación para todos los nodos del clúster de administrador, tanto los nodos del plano de control como los nodos de complementos.

Clúster de administrador sin alta disponibilidad

Tráfico del plano de control

A continuación, se muestra la asignación a la dirección IP y el valor nodePort del nodo del plano de control:

  • (controlPlaneVIP:443) -> (NODE_IP_ADDRESSES:controlPlaneNodePort)

Debes tener esta asignación para todos los nodos del clúster de administrador, tanto el nodo del plano de control como los nodos de complementos.

Tráfico a los servicios de los nodos del complemento

Si tu clúster de administrador tenía un valor para addonsNodePort, deberías tener la siguiente asignación a las direcciones IP y los valores de nodePort para los servicios que se ejecutan en los nodos complementarios:

  • (addonsVIP:8443) -> (NODE_IP_ADDRESSES:addonsNodePort)

Debes tener esta asignación para todos los nodos del clúster de administrador, tanto el nodo del plano de control como los nodos de complementos.

Clúster de usuarios

Tráfico del plano de control

A continuación, se muestra la asignación a las direcciones IP y los valores de nodePort del tráfico del plano de control:

  • (controlPlaneVIP:443) -> (NODE_IP_ADDRESSES:controlPlaneNodePort)
  • (controlPlaneVIP:8132) -> (NODE_IP_ADDRESSES:konnectivityServerNodePort)

Debes tener esta asignación en todos los nodos del clúster de administrador, tanto en el clúster de administrador como en los nodos del plano de control del clúster de usuarios.

Tráfico del plano de datos

A continuación, se muestra la asignación a las direcciones IP y los valores de nodePort del tráfico del plano de datos:

  • (ingressVIP:80) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort)
  • (ingressVIP:443) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort)