Udostępnij za pośrednictwem


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. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
  • 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 przy użyciu az aks create polecenia .

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

Tworzenie statycznego adresu IP

  1. Pobierz nazwę grupy zasobów węzła przy użyciu az aks show polecenia i kwerendy nodeResourceGroup dla właściwości .

    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
    

    Uwaga

    Jeśli używasz podstawowego modułu równoważenia obciążenia jednostki SKU w klastrze usługi AKS, użyj parametru Basic dla parametru --sku podczas definiowania publicznego adresu IP. Tylko adresy IP jednostek SKU w warstwie Podstawowa współpracują z modułem równoważenia obciążenia jednostki SKU w warstwie Podstawowa, a tylko adresy IP jednostek SKU w warstwie Standardowa działają z modułami równoważenia obciążenia jednostek SKU w warstwie Standardowa.

  3. Pobierz statyczny publiczny adres IP przy użyciu az network public-ip list polecenia . Określ nazwę utworzonej grupy zasobów węzła i 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 przy użyciu statycznego adresu IP

  1. Najpierw określ typ tożsamości zarządzanej, z której korzysta klaster usługi AKS, przypisany przez system lub przypisany przez użytkownika. Jeśli nie masz pewności, wywołaj polecenie az aks show i wykonaj zapytanie o właściwość typu tożsamości.

    az aks show \
        --name myAKSCluster \
        --resource-group myResourceGroup \
        --query identity.type \
        --output tsv       
    

    Jeśli klaster korzysta z tożsamości zarządzanej, wartość właściwości typu będzie mieć wartość SystemAssigned lub UserAssigned.

    Jeśli klaster używa jednostki usługi, wartość właściwości typu będzie mieć wartość null. Rozważ uaktualnienie klastra w celu użycia tożsamości zarządzanej.

  2. Jeśli klaster usługi AKS używa tożsamości zarządzanej przypisanej przez system, wykonaj zapytanie o identyfikator podmiotu zabezpieczeń tożsamości zarządzanej w następujący sposób:

    # Get the principal ID for a system-assigned managed identity.
    CLIENT_ID=$(az aks show \
        --name myAKSCluster \
        --resource-group myNetworkResourceGroup \
        --query identity.principalId \
        --output tsv)
    

    Jeśli klaster usługi AKS używa tożsamości zarządzanej przypisanej przez użytkownika, identyfikator podmiotu zabezpieczeń będzie mieć wartość null. Zamiast tego wykonaj zapytanie dotyczące identyfikatora klienta tożsamości zarządzanej przypisanej przez użytkownika:

    # Get the client ID for a user-assigned managed identity.
    CLIENT_ID=$(az aks show \
        --name myAKSCluster \
        --resource-group myNetworkResourceGroup \
        --query identity.userAssignedIdentities.*.clientId \
        --output tsv    
    
  3. Przypisz delegowane uprawnienia dla tożsamości zarządzanej używanej przez klaster usługi AKS dla grupy zasobów publicznego adresu IP, wywołując az role assignment create polecenie .

    # Get the resource ID for the node resource group.
    RG_SCOPE=$(az group show \
        --name <node resource group> \
        --query id \
        --output tsv)
    
    # Assign the Network Contributor role to the managed identity,
    # scoped to the node resource group.
    az role assignment create \
        --assignee ${CLIENT_ID} \
        --role "Network Contributor" \
        --scope ${RG_SCOPE}
    

    Ważne

    Jeśli dostosowano adres IP ruchu wychodzącego, upewnij się, że tożsamość klastra ma uprawnienia zarówno do publicznego adresu IP ruchu wychodzącego, jak i publicznego adresu IP dla ruchu przychodzącego.

  4. Utwórz plik o nazwie load-balancer-service.yaml i skopiuj zawartość następującego pliku YAML, podając własny publiczny adres IP utworzony w poprzednim kroku i nazwę grupy zasobów węzła.

    Ważne

    loadBalancerIP Dodanie właściwości do manifestu YAML modułu równoważenia obciążenia jest przestarzałe po nadrzędnej platformie Kubernetes. Chociaż bieżące użycie pozostaje takie same, a istniejące usługi powinny działać bez modyfikacji, zdecydowanie zalecamy ustawienie adnotacji usługi. Aby ustawić adnotacje usługi, można użyć jako nazwy publicznego adresu IP lub użyć service.beta.kubernetes.io/azure-pip-nameservice.beta.kubernetes.io/azure-load-balancer-ipv4 dla adresu IPv4 i service.beta.kubernetes.io/azure-load-balancer-ipv6 adresu IPv6, jak pokazano w przykładowym yaML.

    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 zapewnia najbardziej wydajne tworzenie modułu service.beta.kubernetes.io/azure-pip-name LoadBalancer i zdecydowanie zaleca się uniknięcie potencjalnego ograniczania przepustowości.

  5. Ustaw publiczną etykietę DNS na usługę przy użyciu service.beta.kubernetes.io/azure-dns-label-name adnotacji usługi. 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
    
  6. Utwórz usługę i wdrożenie przy użyciu kubectl apply polecenia .

    kubectl apply -f load-balancer-service.yaml
    
  7. Aby wyświetlić etykietę DNS modułu równoważenia obciążenia, użyj kubectl describe service 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.kuberenetes.io/azure-dns-label-name: <unique-service-label>
    

Rozwiązywanie problemów

Jeśli statyczny adres IP zdefiniowany we loadBalancerIP właściwości manifestu usługi Kubernetes nie istnieje lub nie został utworzony w grupie zasobów węzła i nie skonfigurowano żadnych innych delegowania, tworzenie usługi równoważenia obciążenia zakończy się niepowodzeniem. Aby rozwiązać problemy, przejrzyj zdarzenia tworzenia usługi przy użyciu kubectl describe polecenia . 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 w grupie zasobów węzła utworzono statyczny publiczny adres IP i że adres IP określony w manifeście usługi Kubernetes jest poprawny.

Name:                     azure-load-balancer
Namespace:                default
Labels:                   <none>
Annotations:              <none>
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:                <none>
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ądzana ruch przychodzący NGINX z dodatkiem routingu aplikacji).