Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il bilanciamento del carico DNS di Azure Kubernetes Fleet Manager consente di aumentare la disponibilità e distribuire il carico in un carico di lavoro distribuito tra più cluster membri. Poiché questa funzionalità viene distribuita tramite DNS, può essere usata per fornire il bilanciamento del carico di livello 4 e 7 in base alle esigenze.
Seguire la procedura descritta in questo documento per configurare il bilanciamento del carico basato su DNS per le applicazioni multi-cluster ospitate nella flotta.
Importante
Le funzionalità di anteprima di Gestione flotta Kubernetes di Azure sono disponibili in modalità self-service e opt-in. 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 con il massimo sforzo. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione.
Le anteprime di rete del piano dati vengono rilasciate tramite l'API networking.fleet.azure.com/v1beta1. Se non vengono visualizzati oggetti di anteprima, verificare di richiedere l'API networking.fleet.azure.com/v1beta1 quando si interagisce con il cluster hub di Fleet Manager.
Prerequisiti
Se non si ha un account Azure, creare un account gratuito prima di iniziare.
Leggere la panoramica concettuale di questa funzionalità, che fornisce una spiegazione degli oggetti
TrafficManagerProfileeTrafficManagerBackenda cui si fa riferimento in questo documento.Un'istanza di Gestione flotta Kubernetes con un cluster hub e un'identità gestita. Se non è disponibile, vedere Creare un'istanza di Gestione flotta Kubernetes di Azure e aggiungere cluster membri usando l'interfaccia della riga di comando di Azure.
Due cluster membri
aks-member-1eaks-member-2sui quali si distribuisce lo stesso carico di lavoro usando il posizionamento delle risorse dei cluster (CRP) di Fleet Manager.L'utente che completa la configurazione ha le autorizzazioni per eseguire assegnazioni di ruolo di Azure e per accedere all'API Kubernetes del cluster hub di Fleet Manager. Per altre informazioni, vedere Accedere all'API Kubernetes per altri dettagli.
Un gruppo di risorse di Azure esistente, che ospita la risorsa di Gestione traffico di Azure di cui è stato effettuato il provisioning.
Impostare le seguenti variabili di ambiente:
export SUBSCRIPTION_ID=<subscription> export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBER_CLUSTER_1=aks-member-1 export MEMBER_CLUSTER_2=aks-member-2 export TRAFFIC_MANAGER_GROUP=rg-flt-tm-demo export TRAFFIC_MANAGER_RG_ID="/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${TRAFFIC_MANAGER_GROUP}Ottenere le credenziali per accedere all'API Kubernetes del cluster hub Fleet Manager:
az fleet get-credentials \ --resource-group ${GROUP} \ --name ${FLEET}
Configurare le autorizzazioni di Fleet Manager
Durante l'anteprima, è necessario eseguire passaggi aggiuntivi per consentire a Fleet Manager di creare e gestire le risorse di Gestione traffico di Azure e di ottenere indirizzi IP pubblici dei servizi esposti nei cluster membri.
Per completare questo passaggio, è necessario creare Fleet Manager con l'identità gestita abilitata. L'utente deve disporre delle autorizzazioni per l'assegnazione dei ruoli di Azure RBAC.
Ottenere le informazioni sull'identità della risorsa Fleet Manager.
az fleet show \ --resource-group ${GROUP} \ --name ${FLEET} \ --query identityL'output dovrebbe essere simile all'output di esempio:
{ "principalId": "<FLEET-PRINCIPAL-ID>", "tenantId": "<ENTRA-ID-TENANT>", "type": "SystemAssigned", "userAssignedIdentities": null }Assegnare il ruolo
Azure Kubernetes Fleet Manager Hub Agentall'identità del cluster hub di Gestione flotta, limitando l'ambito al gruppo di risorse esistente in cui viene creata la risorsa di Gestione traffico.az role assignment create \ --assignee "<FLEET-PRINCIPAL-ID>" \ --role "de2b316d-7a2c-4143-b4cd-c148f6a355a1" \ --scope ${TRAFFIC_MANAGER_RG_ID}L'identità del cluster dell'hub di Fleet Manager richiede anche il ruolo
Azure Kubernetes Fleet Manager Hub Agentnel gruppo di risorse che contiene gli IP pubblici del servizio da esporre, poiché Fleet Manager deve leggere questi indirizzi quando vengono aggiunti a unTrafficMangerBackendtramite unServiceExport.az role assignment create \ --assignee "<FLEET-PRINCIPAL-ID>" \ --role "de2b316d-7a2c-4143-b4cd-c148f6a355a1" \ --scope "/subscriptions/mySubscriptions/resourceGroups/MyPIPResourceGroup"
Distribuire un carico di lavoro tra cluster membri della risorsa Flotta
Annotazioni
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 hub di Fleet Manager ai cluster membri utilizzando il posizionamento delle risorse del cluster (CRP) di Fleet Manager. In alternativa, è possibile scegliere di distribuire queste configurazioni Kubernetes in ogni cluster membro separatamente, una alla volta.
Creare un namespace nel cluster hub di Fleet Manager.
kubectl create namespace kuard-demoL'output è simile al seguente:
namespace/kuard-demo createdPreparare la distribuzione, il servizio, gli oggetti ServiceExport nel cluster hub di Gestione flotta salvando quanto segue in un file denominato
kuard-export-service.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: kuard namespace: kuard-demo spec: replicas: 2 selector: matchLabels: app: kuard template: metadata: labels: app: kuard spec: containers: - name: kuard image: gcr.io/kuar-demo/kuard-amd64:blue resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi --- apiVersion: v1 kind: Service metadata: name: kuard-svc namespace: kuard-demo labels: app: kuard spec: selector: app: kuard ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer --- apiVersion: networking.fleet.azure.com/v1alpha1 kind: ServiceExport metadata: name: kuard-export namespace: kuard-demo annotations: networking.fleet.azure.com/weight: "50"Preparare lo stage degli oggetti nel cluster hub di Gestione flotta:
kubectl apply -f kuard-export-service.yamlLa
ServiceExportspecifica nell'esempio consente di esportare un servizio dai cluster membri al cluster hub Fleet Manager. Si vuole suddividere il traffico in modo uniforme tra i due cluster per impostare l'annotazione di peso delServiceExportsu 50. Dopo l'esportazione, il servizio e tutti i relativi endpoint vengono sincronizzati con il cluster hub di Fleet Manager e possono quindi essere usati per configurare il bilanciamento del carico DNS tra questi endpoint. L'output è simile al seguente esempio:deployment.apps/kuard created service/kuard-svc created serviceexport.networking.fleet.azure.com/kuard-export createdOgni servizio necessita di un'etichetta DNS univoca in modo che possa essere esposta tramite Gestione traffico di Azure. Usare un posizionamento
ResourceOverridedelle risorse del cluster Fleet Manager per modificare la definizione del servizio per ogni cluster membro per creare un nome univoco in base all'area di Azure e al nome del cluster. È necessario creare un override per ogni selettore del cluster (nell'esempio, per area di Azure).apiVersion: placement.kubernetes-fleet.io/v1alpha1 kind: ResourceOverride metadata: name: ro-kuard-demo-eastus namespace: kuard-demo spec: placement: name: crp-kuard-demo resourceSelectors: - group: "" kind: Service version: v1 name: kuard-svc policy: overrideRules: - clusterSelector: clusterSelectorTerms: - labelSelector: matchLabels: fleet.azure.com/location: eastus jsonPatchOverrides: - op: add path: /metadata/annotations value: {"service.beta.kubernetes.io/azure-dns-label-name":"fleet-${MEMBER-CLUSTER-NAME}-eastus"}Annotazioni
"${MEMBER-CLUSTER-NAME}" è una variabile riservata di sostituzione del posizionamento delle risorse che viene sostituita con il nome del cluster membro in fase di esecuzione.
kubectl apply -f ro-kuard-demo-eastus.yamlCreare il posizionamento risorse cluster (CRP) di Gestione flotta in un file denominato
crp-dns-demo.yaml. Si noti che si seleziona un massimo di due cluster nell'areaeastus:apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: crp-dns-demo spec: resourceSelectors: - group: "" version: v1 kind: Namespace name: kuard-demo policy: placementType: PickN numberOfClusters: 2 affinity: clusterAffinity: requiredDuringSchedulingIgnoredDuringExecution: clusterSelectorTerms: - labelSelector: matchLabels: fleet.azure.com/location: eastusApplicare il CRP:
kubectl apply -f crp-dns-demo.yamlIn caso di esito positivo, l'output sarà simile al seguente:
clusterresourceplacement.placement.kubernetes-fleet.io/crp-dns-demo created
Configurare il bilanciamento del carico DNS con Gestione traffico di Azure
Definisci
TrafficManagerProfileper stabilire i parametri da utilizzare con Traffic Manager e salvali nel filekuard-atm-demo.yaml.apiVersion: networking.fleet.azure.com/v1beta1 kind: TrafficManagerProfile metadata: name: kuard-atm-demo namespace: kuard-demo spec: resourceGroup: "rg-flt-tm-demo" monitorConfig: port: 80Applicare la configurazione:
kubectl apply -f kuard-atm-demo.yamlDefinire un oggetto corrispondente
TrafficManagerBackendutilizzato per raggruppare le voci esportateServicedai cluster membri.apiVersion: networking.fleet.azure.com/v1beta1 kind: TrafficManagerBackend metadata: name: kuard-atm-demo-backend namespace: kuard-demo spec: profile: name: "kuard-atm-demo" backend: name: "kuard-svc" weight: 100Applicare la configurazione:
kubectl apply -f kuard-atm-demo-backend.yamlVerificare che il servizio sia disponibile tramite Gestione traffico di Azure eseguendo il comando seguente:
nslookup kuard-atm-demo.trafficmanager.netL'output deve essere simile all'esempio seguente:
Server: 10.X.X.254 Address: 10.X.X.254#53 Non-authoritative answer: Name: kuard-atm-demo.trafficmanger.net Address: 123.X.X.16 Name: kuard-atm-demo.trafficmanger.net Address: 74.X.X.78 Name: kuard-atm-demo.trafficmanger.net Address: 173.X.X.164Usare un Web browser per visitare l'URL e vedere in che modo Kuard risponde. Prova a svuotare la cache DNS e tenta nuovamente di vedere se la richiesta è servita da un'altra istanza di servizio in un altro cluster.