Esegui la migrazione della configurazione per l'integrazione di F5 BIG-IP

Questo documento mostra come eseguire la migrazione delle impostazioni di configurazione per il bilanciatore del carico integrato F5 BIG-IP alla modalità di bilanciamento del carico manuale.

Supporto per il bilanciatore del carico BIG-IP di F5

In passato, potevi configurare Google Distributed Cloud per l'integrazione con F5 BIG-IP nel seguente senso: quando uno sviluppatore crea un servizio di tipo LoadBalancer e specifica un indirizzo IP virtuale (VIP) per il servizio, Google Distributed Cloud configura automaticamente il VIP sul bilanciatore del carico.

Per abilitare funzionalità nuove e avanzate, come Controlplane V2, ti consigliamo di aggiornare la configurazione. Puoi continuare a utilizzare il bilanciatore del carico BIG-IP di F5, ma devi modificare le impostazioni nei file di configurazione del cluster per utilizzare il bilanciamento del carico manuale.

Dopo la migrazione, i tuoi carichi di lavoro F5 rimarranno invariati, ma Google Distributed Cloud non li gestirà più. In una versione futura, F5 BIG-IP sarà disponibile solo per la gestione manuale. Ciò significa che sarai responsabile della gestione diretta dei carichi di lavoro BIG-IP di F5.

Requisiti

Di seguito sono riportati i requisiti per la migrazione:

  • Il cluster di amministrazione e tutti i cluster utente devono essere alla versione 1.29 o successive.

  • Devi utilizzare indirizzi IP statici per i nodi dei cluster di amministrazione e utente. Il tipo di indirizzo IP è impostato nel campo network.ipMode.type ed è immutabile. Se questo campo è impostato su DHCP, non puoi eseguire la migrazione dei cluster.

Aggiorna il file di configurazione del cluster utente

Apporta le seguenti modifiche al file di configurazione del cluster utente:

  1. Imposta loadBalancer.kind su "ManualLB".

  2. Mantieni gli stessi valori per i campi loadBalancer.vips.controlPlaneVIP e loadBalancer.vips.ingressVIP.

  3. Configura il campo nodePort utilizzato per il traffico HTTP inviato al VIP in entrata.

    1. Ottieni il valore HTTP nodePort corrente:

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

      Sostituisci USER_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster utente.

    2. Aggiungi al campo loadBalancer.manualLB.ingressHTTPNodePort il valore del comando precedente, ad esempio:

      loadBalancer:
        manualLB:
          ingressHTTPNodePort: 30243
  4. Configura l'oggetto nodePort utilizzato per il traffico HTTPS inviato al VIP in entrata:

    1. Ottieni l'attuale valore HTTPS nodePort:

      kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
          get svc istio-ingress -n gke-system -oyaml | grep https -A 1
    2. Aggiungi al campo loadBalancer.manualLB.ingressHTTPSNodePort il valore del comando precedente, ad esempio:

      loadBalancer:
        manualLB:
          ingressHTTPSNodePort: 30879
  5. Configura nodePort per il server API Kubernetes:

    1. Recupera l'attuale valore nodePort per il server API Kubernetes:

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

      Sostituisci quanto segue:

      • ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster admin.

      • USER_CLUSTER_NAME: nome del cluster utente.

    2. Aggiungi al campo loadBalancer.manualLB.controlPlaneNodePort il valore del comando precedente, ad esempio:

      loadBalancer:
        manualLB:
          controlPlaneNodePort: 30968
  6. Configura nodePort per il server Konnectivity:

    1. Ottieni il valore nodePort corrente per il server Konnectivity:

      kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep konnectivity-server-port -A 1
    2. Aggiungi al campo loadBalancer.manualLB.konnectivityServerNodePort il valore del comando precedente, ad esempio:

      loadBalancer:
        manualLB:
          konnectivityServerNodePort: 30563
  7. Elimina l'intera sezione loadBalancer.f5BigIP.

  8. Esegui gkectl diagnose cluster e risolvi gli eventuali problemi rilevati dal comando.

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

Aggiorna il cluster utente:

Esegui questo comando per eseguire la migrazione del cluster:

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

Sostituisci quanto segue:

  • ADMIN_CLUSTER_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione.

  • USER_CLUSTER_CONFIG: il percorso del file di configurazione del cluster utente.

Aggiorna il file di configurazione del cluster di amministrazione

Apporta le seguenti modifiche al file di configurazione del cluster di amministrazione:

  1. Imposta loadBalancer.kind su "ManualLB".

  2. Mantieni lo stesso valore per il campo loadBalancer.vips.controlPlaneVIP.

  3. Controlla il valore del campo adminMaster.replicas. Se il valore è 3, il cluster di amministrazione è a disponibilità elevata (HA). Se il valore è 1, il cluster di amministrazione non è ad alta disponibilità.

  4. Segui questi passaggi solo per i cluster di amministrazione non ad alta disponibilità:

    1. Ottieni il valore di nodePort per il server API Kubernetes:

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

      Sostituisci ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster di amministrazione.

    2. Aggiungi al campo loadBalancer.manualLB.controlPlaneNodePort il valore del comando precedente, ad esempio:

      loadBalancer:
        manualLB:
          controlPlaneNodePort: 30968
  5. Esegui questo comando per verificare se esiste un componente aggiuntivo nodePort:

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

    Se il comando precedente restituisce un valore, aggiungilo al campo loadBalancer.manualLB.addonsNodePort, ad esempio:

    loadBalancer:
      manualLB:
        addonsNodePort: 31405
  6. Elimina l'intera sezione loadBalancer.f5BigIP.

  7. Esegui gkectl diagnose cluster e risolvi gli eventuali problemi rilevati dal comando.

    gkectl diagnose cluster \
        --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

Aggiorna il cluster di amministrazione:

Esegui questo comando per aggiornare il cluster:

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

Sostituisci quanto segue:

  • ADMIN_CLUSTER_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione.

  • ADMIN_CLUSTER_CONFIG: il percorso del file di configurazione del cluster di amministrazione.

Verifica che le risorse F5 legacy esistano ancora

Dopo aver aggiornato i cluster per utilizzare il bilanciamento del carico manuale, il traffico verso i cluster non viene interrotto perché le risorse F5 esistenti esistono ancora, come puoi vedere eseguendo questo 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

Sostituisci CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster di amministrazione o del cluster utente.

L'output previsto è simile al seguente:

Cluster di amministrazione:

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

Cluster utente:

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

Controlla il bilanciatore del carico

Dopo la migrazione, non dovresti modificare alcuna impostazione nel bilanciatore del carico, perché hai mantenuto gli stessi valori VIP e nodePort. Le seguenti tabelle descrivono le mappature dai VIP agli indirizzi IP dei nodi:nodePort.

Cluster di amministrazione ad alta disponibilità

Traffico verso i nodi del piano di controllo

Google Distributed Cloud gestisce automaticamente il bilanciamento del carico del traffico del piano di controllo per i cluster di amministrazione ad alta disponibilità. Anche se non è necessario configurare una mappatura nel bilanciatore del carico, devi specificare un indirizzo IP nel campo loadBalancer.vips.controlPlaneVIP.

Traffico verso i servizi nei nodi dei componenti aggiuntivi

Se il tuo cluster di amministrazione aveva un valore addonsNodePort, dovresti visualizzare una mappatura agli indirizzi IP e il valore nodePort per il traffico verso i servizi nei nodi dei componenti aggiuntivi:

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

Dovresti avere questa mappatura per tutti i nodi nel cluster di amministrazione, sia per i nodi del piano di controllo sia per i nodi del componente aggiuntivo.

Cluster di amministrazione non ad alta disponibilità

Traffico del piano di controllo

Di seguito è mostrata la mappatura dell'indirizzo IP e del valore nodePort per il nodo del piano di controllo:

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

Dovresti avere questa mappatura per tutti i nodi nel cluster di amministrazione, sia per il nodo del piano di controllo sia per i nodi del componente aggiuntivo.

Traffico verso i servizi nei nodi dei componenti aggiuntivi

Se il tuo cluster di amministrazione aveva un valore per addonsNodePort, dovresti avere la seguente mappatura agli indirizzi IP e i valori nodePort per i servizi in esecuzione nei nodi dei componenti aggiuntivi:

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

Dovresti avere questa mappatura per tutti i nodi nel cluster di amministrazione, sia per il nodo del piano di controllo sia per i nodi del componente aggiuntivo.

Cluster utente

Traffico del piano di controllo

Di seguito è mostrata la mappatura degli indirizzi IP e dei valori nodePort per il traffico del piano di controllo:

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

Dovresti avere questa mappatura per tutti i nodi nel cluster di admin, sia per il cluster di amministrazione sia per i nodi del piano di controllo del cluster utente.

Traffico del piano dati

Di seguito è mostrata la mappatura degli indirizzi IP e dei valori nodePort per il traffico del piano dati:

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