Configura il bilanciamento del carico manuale

Questa pagina spiega i requisiti di bilanciamento del carico quando si utilizza il bilanciamento del carico manuale. A differenza del bilanciamento del carico in bundle, in cui Google Distributed Cloud esegue il deployment dei bilanciatori del carico sui nodi del cluster per il traffico del control plane e del piano dati, con il bilanciamento del carico manuale configuri le tue soluzioni di bilanciamento del carico per il traffico del control plane e del piano dati.

Prima di creare un cluster bare metal, devi configurare un bilanciatore del carico esterno per il control plane. Il bilanciatore del carico del control plane esterno può essere utilizzato anche per il traffico del piano dati oppure puoi configurare un bilanciatore del carico separato per il piano dati. Ad esempio, puoi utilizzare un bilanciatore del carico in-cluster come MetalLB per il traffico del piano dati.

Oltre a spiegare i requisiti di bilanciamento del carico, questa pagina descrive come configurare il bilanciamento del carico manuale utilizzando F5 BIG-IP.

Prerequisiti

Le sezioni seguenti descrivono i prerequisiti per la configurazione del bilanciamento del carico manuale.

Indirizzo IP obbligatorio

Devi pianificare i VIP prima di creare un cluster. Tutti i cluster hanno bisogno di un VIP per il control plane. Tutti i cluster utente hanno bisogno di un secondo VIP per il servizio in entrata.

Questi VIP possono trovarsi in qualsiasi subnet IPv4 instradabile dal bilanciatore del carico. Il VIP del control plane deve essere raggiungibile da tutti i nodi del cluster e dalla workstation di amministrazione su cui esegui bmctl.

Quando crei il cluster, il servizio in entrata viene eseguito il deployment utilizzando il VIP specificato nel file di configurazione del cluster. Puoi configurare il bilanciamento del carico per questo indirizzo IP dopo la creazione del cluster.

Devi conoscere gli indirizzi IP che utilizzerai per i nodi che verranno utilizzati come nodi del control plane.

Requisiti del bilanciatore del carico del control plane esterno

Il bilanciatore del carico del control plane deve essere configurato prima di creare il cluster. Il bilanciatore del carico del control plane deve soddisfare questi requisiti:

  • Un servizio virtuale (frontend) per il VIP del control plane. La porta di ascolto predefinita del control plane è la 443. Tuttavia, se specifichi una porta diversa, il campo loadBalancer.ports.controlPlaneLBPort del file di configurazione del cluster utilizza quella porta per il servizio virtuale.
  • Un gruppo di backend contenente tutti gli indirizzi IP dei nodi del control plane del cluster. La porta di backend su cui il control plane rimane in ascolto è la 6444.
  • Un controllo di integrità che monitora i nodi di backend. Il controllo di integrità deve utilizzare HTTPS e controllare l'endpoint /readyz sulla porta 6444. Il controllo di integrità deve verificare che questo endpoint restituisca il codice di stato 200 per considerare il nodo integro.

Se il bilanciatore del carico esterno non è configurato correttamente, è probabile che il bootstrapping del cluster non vada a buon fine. Un controllo preliminare verifica che il bilanciatore del carico esterno sia configurato correttamente, incluso il controllo di integrità del bilanciatore del carico sull'endpoint /readyz.

Reimposta le connessioni ai nodi non riusciti (consigliato)

Oltre ai requisiti precedenti, ti consigliamo di configurare il bilanciatore del carico in modo che reimposti le connessioni client quando rileva un errore del nodo di backend. Senza questa configurazione, i client del server API Kubernetes possono smettere di rispondere per diversi minuti quando un'istanza del server non è attiva, il che può causare instabilità nel control plane Kubernetes.

  • Con F5 BIG-IP, questa impostazione si chiama Action On Service Down nella pagina di configurazione del pool di backend.
  • Con HAProxy, questa impostazione si chiama on-marked-down shutdown-sessions nella configurazione del server di backend.
  • Se utilizzi un bilanciatore del carico diverso, consulta la documentazione per trovare l'impostazione equivalente.

Configura il cluster

Prima di creare un cluster Google Distributed Cloud, crea un file di configurazione del cluster con bmctl. Modifica questo file per abilitare il bilanciamento del carico manuale nel cluster:

  1. Imposta il campo loadBalancer.mode su manual.
  2. Imposta il campo loadBalancer.vips.controlPlaneVIP sul VIP configurato sul bilanciatore del carico.
  3. Rimuovi o imposta come commento la sezione loadBalancer.addressPools.

Dopo aver terminato la modifica del file di configurazione, inclusi i campi non correlati al bilanciamento del carico, verifica che il VIP del control plane sia configurato correttamente sul bilanciatore del carico eseguendo i controlli preliminari:

bmctl check preflight -c CLUSTER_NAME

Sostituisci CLUSTER_NAME con il nome del cluster.

Supporta i servizi LoadBalancer nei cluster utente

Devi configurare il bilanciamento del carico per supportare i servizi LoadBalancer di Kubernetes In modalità di bilanciamento del carico manuale, Google Distributed Cloud non esegue automaticamente il provisioning dei bilanciatori del carico, quindi i servizi LoadBalancer non funzionano a meno che tu non esegua il provisioning e la configurazione dei bilanciatori del carico in modo che puntino ai servizi.

Inoltre, Google Distributed Cloud esegue automaticamente il deployment di un servizio in entrata in tutti i cluster utente utilizzando un servizio LoadBalancer. Per essere accessibile esternamente, questo servizio LoadBalancer richiede un bilanciatore del carico configurato in modo che punti al servizio.

Le opzioni per supportare i servizi LoadBalancer includono:

  • Configura manualmente il bilanciatore del carico per ogni servizio LoadBalancer nel cluster. Per un esempio di utilizzo di F5 BIG-IP, consulta Configurare il supporto per i servizi LoadBalancer.
  • Installa un controller del bilanciatore del carico nel cluster che configura il bilanciatore del carico esterno quando vengono creati i servizi LoadBalancer.
  • Installa una soluzione di bilanciamento del carico in-cluster come MetalLB.

Bilanciamento del carico manuale con F5 BIG-IP

Questa sezione descrive come configurare il bilanciamento del carico manuale con F5 BIG-IP come bilanciatore del carico esterno. Se utilizzi un bilanciatore del carico diverso, consulta la documentazione relativa e utilizza questi passaggi come modello.

Configura il bilanciatore del carico del control plane

Devi configurare il bilanciatore del carico del control plane prima di creare un cluster. Dopo aver eseguito questi passaggi, puoi configurare il cluster e crearlo.

Crea una partizione per il cluster

Ogni cluster deve avere la propria partizione. Utilizza l'utilità di configurazione BIG-IP per creare una partizione:

  1. Vai a System > Users > Partition List.
  2. Fai clic su Create.
  3. Inserisci un nome per la partizione.
  4. Fai clic su Finished.

Nei passaggi seguenti creerai gli oggetti in questa partizione. Assicurati che questa partizione sia selezionata nel menu a discesa nell'angolo in alto a destra dell'interfaccia utente per ognuna delle seguenti attività, in modo che ogni oggetto venga creato in questa partizione.

Crea un monitor

Crea un monitor per eseguire i controlli di integrità sui nodi del control plane:

  1. Vai a Local Traffic > Monitors.
  2. Fai clic su Create.
  3. Inserisci un nome per il monitor (ad esempio https_readyz).
  4. Imposta Type su HTTPS.
  5. In Send String, inserisci GET /readyz HTTP/1.1\r\nHost: \r\nConnection: close.
  6. In Receive String, inserisci HTTP/1.1 200.
  7. Fai clic su Finished.

Crea nodi

Crea un nodo che punti ai nodi del control plane. Se il cluster ha un control plane ad alta affidabilità (HA) con più nodi del control plane, crea un oggetto nodo per ogni nodo del control plane.

  1. Vai a Local Traffic > Nodes > Node List.
  2. Fai clic su Create.
  3. Inserisci un nome per il nodo.
  4. Inserisci l'indirizzo IP del nodo nel campo Address.
  5. Fai clic su Finished.

Crea un pool di backend

Crea un pool per i nodi del control plane:

  1. Vai a Local Traffic > Pools > Pool List.
  2. Fai clic su Create.
  3. Seleziona Advanced nel menu a discesa Configuration.
  4. Inserisci un nome per il pool.
  5. Seleziona il monitor di integrità creato in precedenza.
  6. Imposta Action On Service Down su Reject (vedi la discussione di questa impostazione nella sezione Reimpostare le connessioni ai nodi non riusciti).
  7. Aggiungi il nodo del control plane al pool. Se il cluster ha più nodi del control plane, ripeti questi passaggi per ogni nodo:
    1. Nella sezione New Members, fai clic su Node List e poi seleziona il nodo del control plane creato in precedenza.
    2. Nel campo Service Port, inserisci 6444.
    3. Fai clic su Add.

Crea un server virtuale

Crea un server virtuale per il control plane:

  1. Vai a Local Traffic > Virtual Servers > Virtual Server List.
  2. Fai clic su Create.
  3. Inserisci un nome per il server virtuale.
  4. Imposta Type su Standard.
  5. Inserisci 0.0.0.0/0 nel campo Source Address per consentire il traffico da qualsiasi origine.
  6. Inserisci il VIP del control plane come Destination Address.
  7. Inserisci la porta del control plane come Service Port. Per impostazione predefinita è 443, ma è configurabile e deve corrispondere a quella configurata nella configurazione del cluster per loadBalancer.ports.controlPlaneLBPort.
  8. Nel campo Source Address Translation, seleziona Auto Map.
  9. In Default Pool, seleziona il pool creato in precedenza nel menu a discesa.
  10. Fai clic su Finished.

Configura il supporto per i servizi LoadBalancer

In modalità di bilanciamento del carico manuale, Google Distributed Cloud non esegue automaticamente il provisioning dei bilanciatori del carico per supportare i servizi LoadBalancer. Per ulteriori informazioni, consulta Supportare i servizi LoadBalancer nei cluster utente per maggiori informazioni.

Questa sezione mostra come configurare manualmente un bilanciatore del carico F5 BIG-IP per un servizio LoadBalancer. Ripeti questi passaggi per ogni servizio LoadBalancer che vuoi esporre.

Prerequisiti

Per configurare un servizio LoadBalancer, devi conoscere il VIP che vuoi esporre tramite il bilanciatore del carico, la porta su cui vuoi esporlo e il NodePort utilizzato dal servizio LoadBalancer in Kubernetes.

Dopo aver eseguito il deployment di un servizio LoadBalancer nel cluster, determina il NodePort utilizzato per il servizio LoadBalancer. Il seguente comando mostra le porte del servizio:

kubectl --kubeconfig KUBECONFIG get service SERVICE_NAME -oyaml

Sostituisci quanto segue:

  • KUBECONFIG con il percorso del file kubeconfig da utilizzare.
  • SERVICE_NAME con il nome del servizio LoadBalancer.

L'output di kubctl get service include una sezione ports. Ogni voce della porta mostra il nodePort esposto per la porta del servizio e questo nodePort è quello a cui configuri il backend del bilanciatore del carico in modo che punti. Il seguente output di esempio mostra la struttura della sezione 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

Esistono porte per il traffico HTTP e HTTPS. Puoi esporre una o entrambe queste porte tramite il bilanciatore del carico.

Se stai esponendo il servizio in entrata di cui viene eseguito automaticamente il deployment in tutti i cluster, il servizio LoadBalancer si chiama istio-ingress e si trova nello spazio dei nomi gke-system. Trova le sue porte con questo comando:

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

Il servizio in entrata è configurato con un loadBalancerIP, ovvero l'IP fornito nel campo loadBalancer.vips.ingressVIP nella configurazione iniziale del cluster. Devi esporre questo VIP per esporre il servizio in entrata sul bilanciatore del carico esterno.

Crea un pool di backend

  1. Vai a Local Traffic > Pools > Pool List.
  2. Fai clic su Create.
  3. Inserisci un nome per il pool.
  4. Seleziona tcp come monitor di integrità.
  5. Aggiungi nodi worker al pool di nodi. Ripeti questi passaggi per ogni nodo. Puoi aggiungere control plane e nodi worker, poiché i NodePort di Kubernetes sono accessibili su qualsiasi nodo del cluster.
    1. Nella sezione New Members, fai clic su Node List e poi seleziona uno dei nodi creati in precedenza.
    2. Nel campo Service Port, inserisci il valore NodePort per il servizio.
    3. Fai clic su Add.

Crea un server virtuale

  1. Vai a Local Traffic > Virtual Servers > Virtual Server List.
  2. Fai clic su Create.
  3. Inserisci un nome per il server virtuale.
  4. Imposta Type su Standard.
  5. Inserisci 0.0.0.0/0 nel campo Source Address per consentire il traffico da qualsiasi origine.
  6. Inserisci il VIP del servizio di bilanciamento del carico come Destination Address.
  7. Inserisci la porta esposta per il servizio di bilanciamento del carico come Service Port.
  8. Nel campo Source Address Translation, seleziona Auto Map.
  9. In Default Pool, seleziona il pool creato in precedenza nel menu a discesa.
  10. Fai clic su Finished.