Questa pagina illustra i requisiti del 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 piano di controllo e del piano dati, con il bilanciamento del carico manuale puoi configurare le tue soluzioni di bilanciamento del carico per il traffico del piano di controllo e del piano dati.
Devi configurare un bilanciatore del carico esterno per il piano di controllo prima di creare un cluster bare metal. Il bilanciatore del carico del piano di controllo 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 all'interno del 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 richiedono un VIP per il piano di controllo. Tutti i cluster di utenti richiedono un secondo VIP per il servizio in entrata.
Questi VIP possono trovarsi in qualsiasi subnet IPv4 instradabile dal bilanciatore del carico. Il VIP del piano di controllo deve essere raggiungibile da tutti i nodi del cluster e dalla workstation di amministrazione su cui esegui bmctl
.
Quando crei il cluster, il servizio di ingresso viene implementato utilizzando l'IP virtuale 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 piano di controllo deve essere configurato prima di creare il cluster. Il bilanciatore del carico del control plane deve soddisfare i seguenti requisiti:
- Un servizio virtuale (frontend) per il VIP del piano di controllo. La porta di ascolto predefinita del piano di controllo è 443. Tuttavia, se specifichi una porta diversa, il campo
loadBalancer.ports.controlPlaneLBPort
del file di configurazione del cluster utilizzerà quella porta per il servizio virtuale. - Un gruppo di backend contenente tutti gli indirizzi IP dei nodi del piano di controllo del cluster. La porta di backend su cui il piano di controllo rimane in ascolto è 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 bootstrap del cluster non vada a buon fine. Un controllo preflight verifica che il bilanciatore del carico esterno sia configurato correttamente, inclusa la verifica che il bilanciatore del carico esegua il controllo dell'integrità dell'endpoint /readyz
.
Ripristina le connessioni ai nodi non riusciti (opzione consigliata)
Oltre ai requisiti precedenti, ti consigliamo di configurare il bilanciatore del carico in modo da reimpostare le connessioni dei 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 si arresta in modo anomalo, il che può causare instabilità nel piano di controllo Kubernetes.
- Con F5 BIG-IP, questa impostazione si chiama Azione in caso di interruzione del servizio nella pagina di configurazione del pool di backend.
- Con HAProxy, questa impostazione si chiama shutdown-sessions on-marked-down 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, devi creare un file di configurazione del cluster con bmctl
. Modifica questo file per abilitare il bilanciamento del carico manuale nel cluster:
- Imposta il campo
loadBalancer.mode
sumanual
. - Imposta il campo
loadBalancer.vips.controlPlaneVIP
sul VIP configurato sul bilanciatore del carico. - Rimuovi o inserisci un commento nella 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 piano di controllo 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.
Supportare 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, pertanto i servizi LoadBalancer non funzionano a meno che non esegui il provisioning e la configurazione dei bilanciatori del carico in modo che indirizzino i servizi.
Inoltre, Google Distributed Cloud esegue automaticamente il deployment di un servizio di ingresso in tutti i cluster degli utenti utilizzando un servizio LoadBalancer. Per essere accessibile dall'esterno, questo servizio LoadBalancer richiede un bilanciatore del carico configurato in modo da puntare al servizio.
Le opzioni per supportare i servizi LoadBalancer includono:
- Configura manualmente il bilanciatore del carico per ogni servizio LoadBalancer nel cluster. Consulta Configurare il supporto per i servizi LoadBalancer per un esempio che utilizza F5 BIG-IP.
- Installa un controller del bilanciatore del carico nel cluster che configuri 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 relativa documentazione e utilizza questi passaggi come modello.
Configura il bilanciatore del carico del control plane
Devi configurare il bilanciatore del carico del piano di controllo prima di creare un cluster. Dopo aver eseguito questi passaggi, puoi configurare il cluster e crearlo.
Creare una partizione per il cluster
Ogni cluster deve avere la propria partizione. Utilizza l'utilità di configurazione BIG-IP per creare una partizione:
- Vai a Sistema > Utenti > Elenco partizioni.
- Fai clic su Crea.
- Inserisci un nome per la partizione.
- Fai clic su Fine.
Nei passaggi successivi crei 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 ciascuna delle seguenti attività in modo che ogni oggetto venga creato in questa partizione.
Creare un monitoraggio
Crea un monitor per eseguire controlli di integrità sui nodi del piano di controllo:
- Vai a Traffico locale > Monitor.
- Fai clic su Crea.
- Inserisci un nome per il monitoraggio (ad esempio, https_readyz).
- Imposta Tipo su HTTPS.
- In Invia stringa, inserisci
GET /readyz HTTP/1.1\r\nHost: \r\nConnection: close
. - In Stringa di ricezione, inserisci
HTTP/1.1 200
. - Fai clic su Fine.
Creare nodi
Crea un nodo che rimandi ai nodi del piano di controllo. Se il tuo cluster ha un control plane ad alta disponibilità (HA) con più nodi del piano di controllo, crea un oggetto node per ogni nodo del piano di controllo.
- Vai a Traffico locale > Nodi > Elenco nodi.
- Fai clic su Crea.
- Inserisci un nome per il nodo.
- Inserisci l'indirizzo IP del nodo nel campo Indirizzo.
- Fai clic su Fine.
Crea un pool di backend
Crea un pool per i nodi del control plane:
- Vai a Traffico locale > Pool > Elenco pool.
- Fai clic su Crea.
- Seleziona Avanzate nel menu a discesa Configurazione.
- Inserisci un nome per il pool.
- Seleziona il monitoraggio dell'integrità creato in precedenza.
- Imposta Azione in caso di interruzione del servizio su Rifiuta (vedi la discussione su questa impostazione nella sezione Ripristino delle connessioni ai nodi non riusciti).
- Aggiungi il nodo del control plane al pool. Se il cluster ha più nodi del piano di controllo, ripeti questi passaggi per ogni nodo:
- Nella sezione Nuovi membri, fai clic su Elenco nodi e seleziona il node del piano di controllo creato in precedenza.
- Nel campo Porta servizio, inserisci 6444.
- Fai clic su Aggiungi.
Crea un server virtuale
Crea un server virtuale per il piano di controllo:
- Vai a Traffico locale > Server virtuali > Elenco server virtuali.
- Fai clic su Crea.
- Inserisci un nome per il server virtuale.
- Imposta Tipo su Standard.
- Inserisci 0.0.0.0/0 nel campo Indirizzo di origine per consentire il traffico da qualsiasi origine.
- Inserisci il VIP del piano di controllo come Indirizzo di destinazione.
- Inserisci la porta del piano di controllo come Porta servizio. Per impostazione predefinita è 443, ma è configurabile e deve corrispondere a quanto configurato nella configurazione del cluster per
loadBalancer.ports.controlPlaneLBPort
. - Nel campo Traduzione dell'indirizzo di origine, seleziona Mappatura automatica.
- In Pool predefinito, seleziona il pool creato in precedenza nel menu a discesa.
- Fai clic su Fine.
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 la sezione Supportare i servizi LoadBalancer nei cluster di utenti.
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 l'indirizzo 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 disegnato 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 è il valore a cui deve puntare il backend del bilanciatore del carico. L'output di esempio riportato di seguito 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 esponi il servizio di ingresso di cui viene eseguito il deployment automatico in tutti i cluster, il servizio LoadBalancer si chiama istio-ingress
e si trova nello spazio dei nomi gke-system
. Per trovare le relative porte, utilizza questo comando:
kubectl --kubeconfig KUBECONFIG -n gke-system get service istio-ingress -oyaml
Il servizio di ingresso è configurato con un loadBalancerIP che è l'IP fornito
nel campo loadBalancer.vips.ingressVIP
nella configurazione iniziale del cluster. Devi esporre questo VIP per esporre il servizio di ingresso sul bilanciatore del carico esterno.
Crea un pool di backend
- Vai a Traffico locale > Pool > Elenco pool.
- Fai clic su Crea.
- Inserisci un nome per il pool.
- Seleziona tcp come monitor di integrità.
- Aggiungi i nodi worker al pool di nodi. Ripeti questi passaggi per ogni nodo. Puoi
aggiungere control plane e nodi worker perché le porte dei nodi Kubernetes sono
accessibili su qualsiasi nodo del cluster.
- Nella sezione Nuovi membri, fai clic su Elenco nodi e seleziona uno dei nodi creati in precedenza.
- Nel campo Porta servizio, inserisci il valore NodePort per il servizio.
- Fai clic su Aggiungi.
Crea un server virtuale
- Vai a Traffico locale > Server virtuali > Elenco server virtuali.
- Fai clic su Crea.
- Inserisci un nome per il server virtuale.
- Imposta Tipo su Standard.
- Inserisci 0.0.0.0/0 nel campo Indirizzo di origine per consentire il traffico da qualsiasi origine.
- Inserisci il VIP del servizio del bilanciatore del carico come Indirizzo di destinazione.
- Inserisci la porta esposta per il servizio di bilanciamento del carico come Porta servizio.
- Nel campo Traduzione dell'indirizzo di origine, seleziona Mappatura automatica.
- In Pool predefinito, seleziona il pool creato in precedenza nel menu a discesa.
- Fai clic su Fine.