Udostępnij przez


Konfigurowanie równoważenia obciążenia DNS w klastrach członkowskich usługi Azure Kubernetes Fleet Manager (wersja zapoznawcza)

Równoważenie obciążenia DNS usługi Azure Kubernetes Fleet Manager może pomóc w zwiększeniu dostępności i rozproszeniu obciążenia między różne klastry członkowskie. Ponieważ ta funkcja jest dostarczana za pośrednictwem systemu DNS, może służyć do zapewnienia równoważenia obciążenia warstwy 4 i 7 zgodnie z potrzebami.

Wykonaj kroki opisane w tym dokumencie, aby skonfigurować równoważenie obciążenia oparte na systemie DNS dla aplikacji wieloklasowych hostowanych w twojej flocie.

Ważne

Funkcje usługi Azure Kubernetes Fleet Manager w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi Azure Kubernetes Fleet Manager są częściowo objęte pomocą techniczną świadczoną w miarę możliwości. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego.

Nasze wersje zapoznawcze dotyczące sieci płaszczyzny danych są udostępniane za pośrednictwem naszego networking.fleet.azure.com/v1beta1 interfejsu API. Jeśli nie widzisz obiektów podglądowych, sprawdź, czy żądasz API networking.fleet.azure.com/v1beta1 podczas interakcji z klastrem centrum zarządzania Fleet Manager.

Wymagania wstępne

Jeśli nie masz jeszcze konta platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

  • Zapoznaj się z koncepcyjnym omówieniem tej funkcji, które zawiera wyjaśnienie obiektów TrafficManagerProfile i TrafficManagerBackend, do których odwołuje się ten dokument.

  • Rozwiązanie Kubernetes Fleet Manager z klastrem centrum i tożsamością zarządzaną. Jeśli go nie masz, zapoznaj się z Utwórz Azure Kubernetes Fleet Manager i dołącz do klastrów członkowskich, używając interfejsu wiersza polecenia platformy Azure.

  • Dwa klastry aks-member-1 i aks-member-2, na które wdrażasz to samo obciążenie przy użyciu mechanizmu rozmieszczania zasobów klastra (CRP) w Fleet Managerze.

  • Użytkownik wykonujący konfigurację ma uprawnienia do wykonywania przypisań ról platformy Azure i uzyskiwania dostępu do interfejsu API Kubernetes klastra centralnego Fleet Manager. Aby uzyskać więcej informacji, zobacz Access the Kubernetes API (Uzyskiwanie dostępu do interfejsu API platformy Kubernetes ), aby uzyskać więcej informacji.

  • Istniejąca grupa zasobów platformy Azure, która hostuje aprowizowany zasób usługi Azure Traffic Manager.

  • Ustaw następujące zmienne środowiskowe:

    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}
    
  • Uzyskaj poświadczenia, aby uzyskać dostęp do interfejsu API Kubernetes klastra centralnego usługi Fleet Manager.

    az fleet get-credentials \
        --resource-group ${GROUP} \
        --name ${FLEET}
    

Konfigurowanie uprawnień programu Fleet Manager

W wersji zapoznawczej należy wykonać dodatkowe kroki, aby umożliwić usłudze Fleet Manager tworzenie zasobów usługi Azure Traffic Manager i zarządzanie nimi oraz uzyskiwanie publicznych adresów IP usług uwidocznionych w klastrach członkowskich.

Aby wykonać ten krok, musisz utworzyć menedżera floty z włączoną tożsamością zarządzaną. Użytkownik musi mieć uprawnienia do przypisywania ról RBAC platformy Azure.

  • Uzyskaj informacje o tożsamości zasobu Fleet Manager.

    az fleet show \ 
        --resource-group ${GROUP} \
        --name ${FLEET} \
        --query identity
    

    Dane wyjściowe powinny wyglądać podobnie do przykładowych danych wyjściowych:

    {
      "principalId": "<FLEET-PRINCIPAL-ID>",
      "tenantId": "<ENTRA-ID-TENANT>",
      "type": "SystemAssigned",
      "userAssignedIdentities": null
    }
    
  • Azure Kubernetes Fleet Manager Hub Agent Przypisz rolę do tożsamości klastra centrum Fleet Manager, ograniczając zakres do istniejącej grupy zasobów, w której jest tworzony zasób usługi Traffic Manager.

    az role assignment create \
        --assignee "<FLEET-PRINCIPAL-ID>" \
        --role "de2b316d-7a2c-4143-b4cd-c148f6a355a1" \
        --scope ${TRAFFIC_MANAGER_RG_ID}
    
  • Tożsamość klastra w centrum zarządzania flotą również potrzebuje roli w grupie zasobów zawierającej publiczne adresy IP usługi, które mają być ujawnione, ponieważ usługa Fleet Manager musi odczytywać publiczne adresy IP po dodaniu ich do Azure Kubernetes Fleet Manager Hub Agent za pośrednictwem TrafficMangerBackend.

    az role assignment create \
        --assignee "<FLEET-PRINCIPAL-ID>" \
        --role "de2b316d-7a2c-4143-b4cd-c148f6a355a1" \
        --scope "/subscriptions/mySubscriptions/resourceGroups/MyPIPResourceGroup"
    

Rozmieść obciążenie pośród klastrów członkowskich floty

Uwaga / Notatka

  • Kroki opisane w tym przewodniku z instrukcjami dotyczą tylko przykładowej aplikacji do celów demonstracyjnych. Można zastąpić to obciążenie dowolnymi z własnych istniejących obiektów wdrożenia i usługi.

  • Te kroki pozwalają na wdrożenie przykładowego obciążenia z klastra centrum Fleet Manager do klastrów członkowskich przy użyciu umieszczania zasobów klastra z systemu Fleet Manager (CRP). Alternatywnie możesz wdrożyć te konfiguracje platformy Kubernetes w każdym klastrze członkowskim oddzielnie, pojedynczo.

  1. Utwórz przestrzeń nazw w centralnym klastrze Fleet Manager.

    kubectl create namespace kuard-demo
    

    Dane wyjściowe wyglądają podobnie do następujących:

    namespace/kuard-demo created
    
  2. Przenieś obiekty Deployment, Service, ServiceExport do głównego klastra Fleet Manager, zapisując następujące dane w pliku o nazwie 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"
    

    Umieść obiekty w centralnym hub-klastrze Fleet Manager.

    kubectl apply -f kuard-export-service.yaml
    

    Specyfikacja ServiceExport w przykładzie umożliwia eksportowanie usługi z klastrów członkowskich do klastra centrum Fleet Manager. Chcemy równomiernie podzielić ruch między dwa klastry, dlatego ustawiliśmy adnotację ServiceExport wagi na 50. Po pomyślnym wyeksportowaniu usługa i wszystkie jej punkty końcowe są synchronizowane z klastrem centrum Fleet Manager, a następnie mogą służyć do konfigurowania równoważenia obciążenia DNS w tych punktach końcowych. Dane wyjściowe wyglądają podobnie do następującego przykładu:

    deployment.apps/kuard created
    service/kuard-svc created
    serviceexport.networking.fleet.azure.com/kuard-export created
    
  3. Każda usługa wymaga unikatowej etykiety DNS, aby można ją było uwidocznić za pośrednictwem usługi Azure Traffic Manager. Umieszczanie zasobów klastra Fleet Manager ResourceOverride pozwala zmodyfikować definicje usług dla każdego klastra członkowskiego, aby stworzyć unikatową nazwę na podstawie regionu Azure i nazwy klastra. Musisz utworzyć nadpisanie dla selektora klastra (w naszym przykładzie na region 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"}
    

    Uwaga / Notatka

    "${MEMBER-CLUSTER-NAME}" to zarezerwowana zmienna zastępująca rozmieszczenie zasobów, która jest zastępowana nazwą klastra członkowskiego w czasie wykonywania.

    kubectl apply -f ro-kuard-demo-eastus.yaml
    
  4. Utwórz następujący umiejscowienie zasobu klastra (CRP) w oprogramowaniu Fleet Manager w pliku o nazwie crp-dns-demo.yaml. Zwróć uwagę, że wybieramy maksymalnie dwa klastry w eastus regionie:

    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: eastus
    

    Zastosuj zasady CRP:

    kubectl apply -f crp-dns-demo.yaml
    

    W przypadku powodzenia dane wyjściowe wyglądają podobnie do następujących:

    clusterresourceplacement.placement.kubernetes-fleet.io/crp-dns-demo created
    

Konfigurowanie równoważenia obciążenia DNS za pomocą usługi Azure Traffic Manager

  1. Zdefiniuj element TrafficManagerProfile , aby zdefiniować parametry, które mają być używane przez usługę Traffic Manager, i zapisz je w pliku kuard-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: 80
    

    Zastosuj konfigurację:

    kubectl apply -f kuard-atm-demo.yaml
    
  2. Zdefiniuj odpowiedni element TrafficManagerBackend używany do grupowania wyeksportowanych Service wpisów z klastrów członkowskich.

    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: 100
    

    Zastosuj konfigurację:

    kubectl apply -f kuard-atm-demo-backend.yaml
    
  3. Sprawdź, czy usługa jest dostępna za pośrednictwem usługi Azure Traffic Manager, uruchamiając następujące polecenie:

    nslookup kuard-atm-demo.trafficmanager.net
    

    Dane wyjściowe powinny wyglądać mniej więcej tak jak w tym przykładzie:

    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.164
    
  4. Użyj przeglądarki internetowej, aby przejść pod adres URL i zobaczyć, jak reaguje Kuard. Spróbuj opróżnić usługę DNS i ponowić próbę, aby sprawdzić, czy żądanie jest obsługiwane przez inne wystąpienie usługi z innego klastra.

Zrzut ekranu przedstawiający stronę internetową wyświetlającą szczegóły z aplikacji demonstracyjnej Kuard.