Używanie statycznego publicznego adresu IP i etykiety DNS z modułem równoważenia obciążenia usługi Azure Kubernetes Service (AKS)

Podczas tworzenia zasobu modułu równoważenia obciążenia w klastrze usługi Azure Kubernetes Service (AKS) publiczny adres IP przypisany do niego jest ważny tylko przez okres istnienia tego zasobu. Usunięcie usługi Kubernetes spowoduje również usunięcie skojarzonego modułu równoważenia obciążenia i adresu IP. Jeśli chcesz przypisać określony adres IP lub zachować adres IP do ponownego wdrożenia usług Kubernetes, możesz utworzyć statyczny publiczny adres IP i go użyć.

W tym artykule pokazano, jak utworzyć statyczny publiczny adres IP i przypisać go do usługi Kubernetes.

Zanim rozpoczniesz

  • Potrzebny jest interfejs wiersza polecenia platformy Azure w wersji 2.0.59 lub nowszej, zainstalowany i skonfigurowany. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Aby zainstalować lub uaktualnić, zobacz Install Azure CLI.
  • W tym artykule opisano używanie adresu IP jednostki SKU w warstwie Standardowa z modułem równoważenia obciążenia jednostki SKU w warstwie Standardowa . Aby uzyskać więcej informacji, zobacz Typy adresów IP i metody alokacji na platformie Azure.

Tworzenie klastra AKS

  1. Utwórz grupę zasobów platformy Azure przy użyciu az group create polecenia .

    az group create --name myNetworkResourceGroup --location eastus
    
  2. Utwórz klaster usługi AKS za pomocą polecenia az aks create.

    az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
    

Tworzenie statycznego adresu IP

  1. Aby uzyskać nazwę grupy zasobów węzła, użyj polecenia az aks show i zapytania o właściwość nodeResourceGroup.

    az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
    
  2. Utwórz statyczny publiczny adres IP w grupie zasobów węzła az network public-ip create przy użyciu polecenia .

    az network public-ip create \
        --resource-group <node resource group name> \
        --name myAKSPublicIP \
        --sku Standard \
        --allocation-method static
    

    Ważne

    Usługa AKS nie obsługuje już Basic Load Balancer. Jeśli klaster używa modułu równoważenia obciążenia w warstwie Podstawowa, uaktualnij go do warstwy Standardowa przed skonfigurowaniem statycznego publicznego adresu IP.

  3. Pobierz statyczny publiczny adres IP przy użyciu az network public-ip show polecenia . Określ nazwę grupy zasobów węzła i utworzony publiczny adres IP, a następnie wykonaj zapytanie dotyczące elementu ipAddress.

    az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
    

Tworzenie usługi Kubernetes przy użyciu statycznego adresu IP

  1. Utwórz plik o nazwie load-balancer-service.yaml i skopiuj zawartość następującego pliku YAML. Podaj nazwę zasobu publicznego adresu IP (myAKSPublicIP) utworzoną w sekcji Tworzenie statycznego adresu IP i nazwę grupy zasobów węzła.

    Tożsamość płaszczyzny sterowania usługi AKS ma domyślnie uprawnienia Współautor w grupie zasobów węzła, więc publiczny adres IP tworzony w tym artykule nie wymaga innego przypisania roli. Jeśli używasz przychodzącego lub wychodzącego publicznego adresu IP w innej grupie zasobów, przyznaj tożsamości płaszczyzny sterowania wymagane uprawnienia dla tej grupy zasobów. Aby uzyskać więcej informacji, zobacz Tożsamości zarządzane w usłudze AKS.

    Ważne

    Właściwość loadBalancerIP w manifeście usługi Kubernetes została uznana za przestarzałą zgodnie z upstream Kubernetes. Istniejące usługi nadal działają bez modyfikacji, ale zamiast tego używaj adnotacji usługi.

    Adnotacja Purpose
    service.beta.kubernetes.io/azure-pip-name Określ nazwę zasobu publicznego adresu IP.
    service.beta.kubernetes.io/azure-load-balancer-ipv4 Określ adres IPv4.
    service.beta.kubernetes.io/azure-load-balancer-ipv6 Określ adres IPv6.
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
        service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
      name: azure-load-balancer
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: azure-load-balancer
    

    Uwaga

    Dodanie adnotacji service.beta.kubernetes.io/azure-pip-name zapewnia najbardziej efektywne tworzenie LoadBalancer i zdecydowanie zaleca się jego stosowanie, aby uniknąć potencjalnego ograniczania przepustowości.

  2. Ustaw publiczne oznaczenie DNS dla usługi, korzystając z adnotacji usługi service.beta.kubernetes.io/azure-dns-label-name. Spowoduje to opublikowanie w pełni kwalifikowanej nazwy domeny (FQDN) dla usługi przy użyciu publicznych serwerów DNS platformy Azure i domeny najwyższego poziomu. Wartość adnotacji musi być unikatowa w obrębie lokalizacji platformy Azure, dlatego zalecamy użycie wystarczająco kwalifikowanej etykiety. Platforma Azure automatycznie dołącza domyślny sufiks w wybranej lokalizacji, takiej jak <location>.cloudapp.azure.com, do podanej nazwy, tworząc nazwę FQDN.

    Uwaga

    Jeśli chcesz opublikować usługę we własnej domenie, zobacz Azure DNS i projekt external-dns .

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
        service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
        service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label>
      name: azure-load-balancer
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: azure-load-balancer
    
  3. Przed utworzeniem usługi upewnij się, że klaster ma obciążenie z zasobnikami używającymi app: azure-load-balancer etykiety. Manifest usługi wybiera zasobniki z tą etykietą, ale nie tworzy wdrożenia.

  4. Utwórz usługę przy użyciu kubectl apply polecenia .

    kubectl apply -f load-balancer-service.yaml
    
  5. Sprawdź, czy usługa wybiera co najmniej jeden działający i gotowy pod.

    kubectl get pods -l app=azure-load-balancer
    
  6. Aby wyświetlić etykietę DNS modułu równoważenia obciążenia, użyj kubectl describe polecenia .

    kubectl describe service azure-load-balancer
    

    Etykieta DNS zostanie wyświetlona w obszarze Annotations, jak pokazano w następujących skondensowanych przykładowych danych wyjściowych:

    Name:                    azure-load-balancer
    Namespace:               default
    Labels:                  <none>
    Annotations:             service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label>
    

Rozwiązywanie problemów

W tej sekcji założono, że ukończono tworzenie statycznego adresu IP, podjęto próbę wykonania kroków opisanych w temacie Tworzenie usługi Kubernetes przy użyciu statycznego adresu IP i uruchomionego klastra usługi AKS. Aby pobrać nazwę grupy zasobów węzła, użyj polecenia az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv.

Jeśli zasób publicznego adresu IP wskazany w adnotacji service.beta.kubernetes.io/azure-pip-name nie istnieje w grupie zasobów określonej przez service.beta.kubernetes.io/azure-load-balancer-resource-group, lub tożsamość płaszczyzny sterowania AKS nie ma dostępu do tej grupy zasobów, utworzenie usługi modułu równoważenia obciążenia zakończy się niepowodzeniem. Aby rozwiązać problem, przejrzyj adnotacje usługi i zdarzenia tworzenia za pomocą polecenia kubectl describe. Podaj nazwę usługi określonej w manifeście YAML, jak pokazano w poniższym przykładzie:

kubectl describe service azure-load-balancer

Dane wyjściowe zawierają informacje o zasobie usługi Kubernetes. Następujące przykładowe dane wyjściowe pokazują element Warning w pliku Events: "user supplied IP address was not found". W tym scenariuszu upewnij się, że adnotacja azure-pip-name jest zgodna z nazwą statycznego zasobu publicznego adresu IP, a adnotacja azure-load-balancer-resource-group jest zgodna z grupą zasobów, która ją zawiera.

Name:                     azure-load-balancer
Namespace:                default
Labels:                   <none>
Annotations:              service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
                          service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
Selector:                 app=azure-load-balancer
Type:                     LoadBalancer
IP:                       10.0.18.125
IP:                       40.121.183.52
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  32582/TCP
Endpoints:                <pod-ip>:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type     Reason                      Age               From                Message
  ----     ------                      ----              ----                -------
  Normal   CreatingLoadBalancer        7s (x2 over 22s)  service-controller  Creating load balancer
  Warning  CreatingLoadBalancerFailed  6s (x2 over 12s)  service-controller  Error creating load balancer (will retry): Failed to create load balancer for service default/azure-load-balancer: user supplied IP Address 40.121.183.52 was not found

Następne kroki

Aby uzyskać większą kontrolę nad ruchem sieciowym do aplikacji, użyj dodatku routingu aplikacji dla usługi AKS. Aby uzyskać więcej informacji na temat dodatku routingu aplikacji, zobacz Managed NGINX ingress with the application routing add-on (Zarządzanie ruchem przychodzącym NGINX z dodatkiem routingu aplikacji).