En este documento, se muestra cómo migrar la configuración del 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
Antes, se podía configurar Google Distributed Cloud para que se integrara 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 la VIP en el balanceador de cargas de forma automática.
Para habilitar funciones nuevas y avanzadas, como Controlplane V2, te recomendamos que actualices la configuración. Puedes continuar con el uso del balanceador de cargas 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
A continuación, se indican los requisitos para la migración:
El clúster de administrador y todos los clústeres de usuario deben tener la versión 1.29 o posterior.
Debes usar direcciones IP estáticas para los nodos del clúster de administrador y de usuario. El tipo de direccionamiento IP se establece en el campo
network.ipMode.type
y es inmutable. Si este campo está configurado 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:
Cambia
loadBalancer.kind
a"ManualLB"
.Mantén los mismos valores para los campos
loadBalancer.vips.controlPlaneVIP
yloadBalancer.vips.ingressVIP
.Configura el
nodePort
que se usa para el tráfico HTTP enviado a la VIP de entrada.Obtén el valor
nodePort
de HTTP 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.Agrega el valor del comando anterior al campo
loadBalancer.manualLB.ingressHTTPNodePort
, por ejemplo:loadBalancer: manualLB: ingressHTTPNodePort: 30243
Configura el
nodePort
que se usa para el tráfico HTTPS enviado a la VIP de entrada: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
Agrega el valor del comando anterior al campo
loadBalancer.manualLB.ingressHTTPSNodePort
, por ejemplo:loadBalancer: manualLB: ingressHTTPSNodePort: 30879
Configura
nodePort
para el servidor de la API de Kubernetes:Obtén el valor
nodePort
actual 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 adminUSER_CLUSTER_NAME
: Es el nombre del clúster de usuario.
Agrega el valor del comando anterior al campo
loadBalancer.manualLB.controlPlaneNodePort
, por ejemplo:loadBalancer: manualLB: controlPlaneNodePort: 30968
Configura
nodePort
para el servidor de Konnectivity: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
Agrega el valor del comando anterior al campo
loadBalancer.manualLB.konnectivityServerNodePort
, por ejemplo:loadBalancer: manualLB: konnectivityServerNodePort: 30563
Borra toda la sección
loadBalancer.f5BigIP
.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 administradorUSER_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:
Cambia
loadBalancer.kind
a"ManualLB"
.Mantén el mismo valor para el campo
loadBalancer.vips.controlPlaneVIP
.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.Realiza los siguientes pasos solo para los clústeres de administrador que no tengan alta disponibilidad:
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.Agrega el valor del comando anterior al campo
loadBalancer.manualLB.controlPlaneNodePort
, por ejemplo:loadBalancer: manualLB: controlPlaneNodePort: 30968
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
Borra toda la sección
loadBalancer.f5BigIP
.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 administradorADMIN_CLUSTER_CONFIG
: Es la ruta de acceso del archivo de configuración del clúster de administrador.
Verifica que aún existan los recursos heredados de F5
Después de actualizar tus clústeres para usar el balanceo de cargas manual, el tráfico a tus clústeres no se interrumpirá porque los recursos de F5 existentes aún existen, como puedes 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 el 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ías tener que cambiar ninguna configuración en el balanceador de cargas, ya que mantuviste los mismos valores de nodePort
y VIP. En las siguientes tablas, se describen las asignaciones de las VIP a las direcciones IP de nodo:nodePort
.
Clúster de administrador de HA
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 de 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 nodos del plano de control como los nodos del complemento.
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
para el 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 del complemento.
Tráfico a los servicios en los nodos del complemento
Si el clúster de administrador tenía un valor de addonsNodePort
, deberías tener la siguiente asignación a las direcciones IP y los valores de nodePort
para los servicios que se ejecutan en nodos de complementos:
- (
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 del complemento.
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 el clúster de administrador como 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
)