Migra la configuración de BIG-IP de F5 integrada

En este documento, se muestra cómo migrar la configuración de tu balanceador de cargas integrado de BIG-IP de F5 al modo de balanceo de cargas manual.

Compatibilidad con el balanceador de cargas BIG-IP de F5

En el pasado, podías configurar Google Distributed Cloud para que se integre con BIG-IP de F5 en el siguiente sentido: cuando un desarrollador crea un Service de tipo LoadBalancer y especifica una dirección IP virtual (VIP) para el servicio, Google Distributed Cloud configura de forma automática la VIP en el balanceador de cargas.

Para habilitar funciones nuevas y avanzadas, como Controlplane V2, te recomendamos que actualices la configuración. Puedes seguir usando el balanceador de cargas de BIG-IP de F5, pero debes cambiar la configuración en los archivos de configuración del clúster para usar el balanceo de cargas manual.

Requisitos

Estos son los requisitos para la migración:

  • El clúster de administrador y todos los clústeres de usuario deben ser de la versión 1.29 o superior.

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

Actualiza el archivo de configuración del clúster de usuario

Realiza los siguientes cambios en el archivo de configuración del clúster de usuario:

  1. Cambia loadBalancer.kind a "ManualLB".

  2. Conserva los mismos valores para los campos loadBalancer.vips.controlPlaneVIP y loadBalancer.vips.ingressVIP.

  3. Configura el nodePort que se usa para el tráfico HTTP que se envía a la 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

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

    2. Agrega 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 que se envía a la VIP de entrada:

    1. Obtén el valor nodePort de HTTPS actual:

      kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
          get svc istio-ingress -n gke-system -oyaml | grep https -A 1
    2. Agrega 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 actual de nodePort para el 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

      Reemplaza lo siguiente:

      • ADMIN_CLUSTER_KUBECONFIG por la ruta de acceso del archivo kubeconfig del clúster admin.

      • USER_CLUSTER_NAME: Es el nombre del clúster de usuario.

    2. Agrega el valor del comando anterior al campo loadBalancer.manualLB.controlPlaneNodePort, por ejemplo:

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

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

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

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

  8. Ejecuta gkectl diagnose cluster y corrige cualquier problema que encuentre el comando.

    gkectl diagnose cluster \
        --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
        --cluster-name=USER_CLUSTER_NAME

Actualiza el clúster de usuario:

Ejecuta el siguiente comando para migrar el clúster:

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

Reemplaza lo siguiente:

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

  • USER_CLUSTER_CONFIG: Es la ruta de acceso del archivo de configuración del clúster de usuario.

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

Realiza 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 para el campo loadBalancer.vips.controlPlaneVIP.

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

  4. Sigue estos pasos solo para clústeres de administrador que no tengan 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

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

    2. Agrega 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 un complemento nodePort:

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

    Si el comando anterior genera un valor, agrégalo al campo loadBalancer.manualLB.addonsNodePort, por ejemplo:

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

  7. Ejecuta gkectl diagnose cluster y corrige cualquier problema que encuentre el comando.

    gkectl diagnose cluster \
        --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

Actualiza el clúster de administrador:

Ejecuta el siguiente comando para actualizar el clúster:

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

Reemplaza lo siguiente:

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

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

Verifica que aún existan los recursos de F5 heredados

Después de actualizar los clústeres para usar el balanceo de cargas manual, el tráfico a tus clústeres no se interrumpe porque los recursos de F5 existentes aún existen, como se puede ver si ejecutas 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

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

El resultado esperado es similar al siguiente:

Clúster de administrador:

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 usuario:

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

Verifica tu balanceador de cargas

Después de la migración, no debería ser necesario cambiar la configuración en el balanceador de cargas, ya que mantuviste las mismas VIP y valores de nodePort. En las siguientes tablas, se describen las asignaciones de las VIP a las direcciones IP de nodo:nodePort.

Clúster de administrador de alta disponibilidad

Tráfico a los nodos del plano de control

Google Distributed Cloud controla de forma automática el balanceo de cargas del tráfico del plano de control para los clústeres de administrador de alta disponibilidad. Aunque no necesitas configurar una asignación en el balanceador de cargas, debes especificar una dirección IP en el campo loadBalancer.vips.controlPlaneVIP.

Tráfico a los servicios en los nodos del complemento

Si el clúster de administrador tenía un valor para addonsNodePort, deberías ver una asignación a las direcciones IP y el valor nodePort para el tráfico a los servicios 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 los del plano de control como los 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 de 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 para el nodo del plano de control como para los nodos de complementos.

Tráfico a los servicios en los nodos del complemento

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

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

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

Clúster de usuario

Tráfico del plano de control

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

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

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

Tráfico del plano de datos

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

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