Configurare il bilanciamento del carico multi-cluster di livello 4 nei cluster membri di Gestione flotta Kubernetes di Azure (anteprima)
Per le applicazioni distribuite in più cluster, gli amministratori spesso vogliono instradare il traffico in ingresso tra i cluster.
È possibile seguire questo documento per configurare il bilanciamento del carico di livello 4 per tali applicazioni multi-cluster.
Importante
Le funzionalità di anteprima di Gestione flotta Kubernetes di Azure sono disponibili in modalità self-service e acconsentono esplicitamente. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime di Gestione flotta Kubernetes di Azure sono parzialmente coperte dal supporto clienti in base al massimo impegno. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione.
Prerequisiti
Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
Leggere la panoramica concettuale di questa funzionalità, che fornisce una spiegazione degli oggetti
ServiceExport
eMultiClusterService
a cui si fa riferimento in questo documento.È necessaria una risorsa Flotta con un cluster hub e cluster membri. Se questa risorsa non è disponibile, seguire Avvio rapido: Creare una risorsa Flotta e aggiungere cluster membri.
I cluster del Servizio Azure Kubernetes (AKS) di destinazione in cui vengono distribuiti i carichi di lavoro devono essere presenti nella stessa rete virtuale o nelle reti virtuali con peering.
- Questi cluster di destinazione devono essere aggiunti come cluster membri alla risorsa Flotta.
- Questi cluster di destinazione devono usare il networking CNI di Azure (Container Networking Interface).
È necessario ottenere l'accesso all'API Kubernetes del cluster hub seguendo la procedura descritta nell'API Kubernetes del cluster hub di Access Fleet.
Impostare le variabili di ambiente seguenti e ottenere kubeconfigs per la flotta e tutti i cluster membri:
export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBER_CLUSTER_1=aks-member-1 export MEMBER_CLUSTER_2=aks-member-2 az fleet get-credentials --resource-group ${GROUP} --name ${FLEET} --file fleet az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_1} --file aks-member-1 az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_2} --file aks-member-2
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido su Bash in Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
Distribuire un carico di lavoro tra cluster membri della risorsa Flotta
Nota
I passaggi descritti in questa guida pratica fanno riferimento a un'applicazione di esempio solo a scopo dimostrativo. È possibile sostituire questo carico di lavoro per uno dei propri oggetti Distribuzione e Servizio esistenti.
Questi passaggi distribuiscono il carico di lavoro di esempio dal cluster Flotta ai cluster membri usando la propagazione della configurazione di Kubernetes. In alternativa, è possibile scegliere di distribuire queste configurazioni Kubernetes in ogni cluster membro separatamente, una alla volta.
Creare uno spazio dei nomi nella flotta cluster:
KUBECONFIG=fleet kubectl create namespace kuard-demo
L'output è simile al seguente esempio:
namespace/kuard-demo created
Applicare gli oggetti Distribuzione, Servizio, ServiceExport:
KUBECONFIG=fleet kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-export-service.yaml
La specifica
ServiceExport
nel file precedente consente di esportare un servizio dai cluster membri alla risorsa Flotta. Dopo l'esportazione, il servizio e tutti i relativi endpoint vengono sincronizzati con la flotta cluster e possono quindi essere usati per configurare il bilanciamento del carico multi-cluster tra questi endpoint. L'output è simile al seguente esempio:deployment.apps/kuard created service/kuard created serviceexport.networking.fleet.azure.com/kuard created
Creare il seguente
ClusterResourcePlacement
in un file denominatocrp-2.yaml
. Si noti che si stanno selezionando i cluster nell'areaeastus
:apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: kuard-demo spec: resourceSelectors: - group: "" version: v1 kind: Namespace name: kuard-demo policy: affinity: clusterAffinity: requiredDuringSchedulingIgnoredDuringExecution: clusterSelectorTerms: - labelSelector: matchLabels: fleet.azure.com/location: eastus
Applicare:
ClusterResourcePlacement
KUBECONFIG=fleet kubectl apply -f crp-2.yaml
Se va a buon fine, l'output è simile al seguente esempio:
clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
Verificare lo stato di
ClusterResourcePlacement
:KUBECONFIG=fleet kubectl get clusterresourceplacements
Se va a buon fine, l'output è simile al seguente esempio:
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE kuard-demo 1 True 1 True 1 20s
Creare MultiClusterService per bilanciare il carico tra gli endpoint di servizio in più cluster membri
Verificare se il servizio è stato esportato correttamente per i cluster membri nell'area
eastus
:KUBECONFIG=aks-member-1 kubectl get serviceexport kuard --namespace kuard-demo
L'output è simile al seguente esempio:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 25s
KUBECONFIG=aks-member-2 kubectl get serviceexport kuard --namespace kuard-demo
L'output è simile al seguente esempio:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 55s
Si noterà che il servizio è valido per l'esportazione (il campo
IS-VALID
ètrue
) e non presenta conflitti con altre esportazioni (IS-CONFLICT
èfalse
).Nota
La propagazione di ServiceExport può richiedere un minuto o due.
Creare
MultiClusterService
in un membro per bilanciare il carico tra gli endpoint di servizio in questi cluster:KUBECONFIG=aks-member-1 kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-mcs.yaml
Nota
Per esporre il servizio tramite l'indirizzo IP interno anziché quello pubblico, aggiungere l'annotazione a MultiClusterService:
apiVersion: networking.fleet.azure.com/v1alpha1 kind: MultiClusterService metadata: name: kuard namespace: kuard-demo annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" ...
L'output è simile al seguente esempio:
multiclusterservice.networking.fleet.azure.com/kuard created
Verificare che MultiClusterService sia valido eseguendo il comando seguente:
KUBECONFIG=aks-member-1 kubectl get multiclusterservice kuard --namespace kuard-demo
L'output deve essere simile all'esempio seguente:
NAME SERVICE-IMPORT EXTERNAL-IP IS-VALID AGE kuard kuard <a.b.c.d> True 40s
Il campo
IS-VALID
deve esseretrue
nell'output. Vedere l'indirizzo IP del servizio di bilanciamento del carico esterno (EXTERNAL-IP
) nell'output. Potrebbe essere necessario un po' di tempo prima che l'importazione venga elaborata completamente e che l'indirizzo IP diventi disponibile.Eseguire il comando seguente più volte usando l'indirizzo IP del servizio di bilanciamento del carico esterno:
curl <a.b.c.d>:8080 | grep addrs
Si noti che gli indirizzi IP dei pod che servono la richiesta stanno cambiando e che questi pod provengono da cluster membri
aks-member-1
eaks-member-2
dall'areaeastus
. È possibile verificare gli indirizzi IP dei pod eseguendo i comandi seguenti nei cluster dall'areaeastus
:KUBECONFIG=aks-member-1 kubectl get pods -n kuard-demo -o wide
KUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide
Azure Kubernetes Service