Dela via


Använda en statisk offentlig IP-adress och DNS-etikett med lastbalanseraren Azure Kubernetes Service (AKS)

När du skapar en lastbalanserarresurs i ett AKS-kluster (Azure Kubernetes Service) är den offentliga IP-adressen som tilldelats den endast giltig för resursens livslängd. Om du tar bort Kubernetes-tjänsten tas även den associerade lastbalanseraren och IP-adressen bort. Om du vill tilldela en specifik IP-adress eller behålla en IP-adress för omdistribuerade Kubernetes-tjänster kan du skapa och använda en statisk offentlig IP-adress.

Den här artikeln visar hur du skapar en statisk offentlig IP-adress och tilldelar den till Kubernetes-tjänsten.

Innan du börjar

  • Du behöver Azure CLI version 2.0.59 eller senare installerad och konfigurerad. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
  • Den här artikeln beskriver hur du använder en Standard SKU IP med en Standard SKU-lastbalanserare. Mer information finns i IP-adresstyper och allokeringsmetoder i Azure.

Skapa ett AKS-kluster

  1. Skapa en Azure-resursgrupp med kommandot az group create .

    az group create --name myNetworkResourceGroup --location eastus
    
  2. Skapa ett AKS-kluster med kommandot az aks create .

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

Skapa en statisk IP-adress

  1. Hämta namnet på nodresursgruppen med hjälp av az aks show kommandot och frågan för nodeResourceGroup egenskapen.

    az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
    
  2. Skapa en statisk offentlig IP-adress i nodresursgruppen med kommandot az network public ip create .

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

    Kommentar

    Om du använder en Basic SKU-lastbalanserare i ditt AKS-kluster använder du Basic för parametern --sku när du definierar en offentlig IP-adress. Endast Basic SKU-IP-adresser fungerar med Basic SKU-lastbalanseraren och endast Standard SKU-IP-adresser fungerar med Standard SKU-lastbalanserare.

  3. Hämta den statiska offentliga IP-adressen med kommandot az network public-ip list . Ange namnet på nodresursgruppen och den offentliga IP-adress som du skapade och fråga efter ipAddress.

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

Skapa en tjänst med den statiska IP-adressen

  1. Bestäm först vilken typ av hanterad identitet aks-klustret använder, systemtilldelad eller användartilldelad. Om du inte är säker anropar du kommandot az aks show och frågar efter identitetens typegenskap .

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

    Om klustret använder en hanterad identitet blir värdet för typegenskapen antingen SystemAssigned eller UserAssigned.

    Om klustret använder ett huvudnamn för tjänsten blir värdet för typegenskapen null. Överväg att uppgradera klustret till att använda en hanterad identitet.

  2. Om AKS-klustret använder en systemtilldelad hanterad identitet frågar du efter den hanterade identitetens huvud-ID på följande sätt:

    # 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)
    

    Om AKS-klustret använder en användartilldelad hanterad identitet blir huvudnamns-ID:t null. Fråga efter den användartilldelade hanterade identitetens klient-ID i stället:

    # 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. Tilldela delegerade behörigheter för den hanterade identitet som används av AKS-klustret för den offentliga IP-adressens resursgrupp genom att anropa az role assignment create kommandot.

    # 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}
    

    Viktigt!

    Om du har anpassat din utgående IP-adress kontrollerar du att klusteridentiteten har behörighet till både den utgående offentliga IP-adressen och den inkommande offentliga IP-adressen.

  4. Skapa en fil med namnet load-balancer-service.yaml och kopiera innehållet i följande YAML-fil, med din egen offentliga IP-adress som skapades i föregående steg och namnet på nodens resursgrupp.

    Viktigt!

    loadBalancerIP Att lägga till egenskapen i YAML-manifestet för lastbalanserare upphör att följa uppströms Kubernetes. Även om den aktuella användningen förblir densamma och befintliga tjänster förväntas fungera utan ändringar rekommenderar vi starkt att du anger tjänstanteckningar i stället. Om du vill ange tjänstanteckningar kan du antingen använda service.beta.kubernetes.io/azure-pip-name för offentligt IP-namn eller använda service.beta.kubernetes.io/azure-load-balancer-ipv4 för en IPv4-adress och service.beta.kubernetes.io/azure-load-balancer-ipv6 för en IPv6-adress, som du ser i exemplet 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
    

    Kommentar

    Genom att lägga till anteckningen service.beta.kubernetes.io/azure-pip-name säkerställs att den mest effektiva LoadBalancer skapas och rekommenderas starkt för att undvika potentiella begränsningar.

  5. Ange en offentlig DNS-etikett till tjänsten med hjälp av tjänstanteckningen service.beta.kubernetes.io/azure-dns-label-name . Detta publicerar ett fullständigt kvalificerat domännamn (FQDN) för din tjänst med hjälp av Azures offentliga DNS-servrar och toppnivådomän. Anteckningsvärdet måste vara unikt på Azure-platsen, så vi rekommenderar att du använder en tillräckligt kvalificerad etikett. Azure lägger automatiskt till ett standardsuffix på den plats som du har valt, till exempel <location>.cloudapp.azure.com, till det namn du anger, vilket skapar det fullständiga domännamnet.

    Kommentar

    Om du vill publicera tjänsten på din egen domän kan du läsa Azure DNS och projektet 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. Skapa tjänsten och distributionen kubectl apply med kommandot .

    kubectl apply -f load-balancer-service.yaml
    
  7. Om du vill se DNS-etiketten för lastbalanseraren använder du kubectl describe service kommandot .

    kubectl describe service azure-load-balancer
    

    DNS-etiketten visas under Annotations, enligt följande komprimerade exempelutdata:

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

Felsöka

Om den statiska IP-adressen som definierats i loadBalancerIP egenskapen för Kubernetes-tjänstmanifestet inte finns eller inte har skapats i nodresursgruppen och inga andra delegeringar har konfigurerats misslyckas skapande av lastbalanserarens tjänst. Om du vill felsöka granskar du händelserna för att skapa tjänsten med hjälp av kubectl describe kommandot . Ange namnet på den tjänst som anges i YAML-manifestet enligt följande exempel:

kubectl describe service azure-load-balancer

Utdata visar information om Kubernetes-tjänstresursen. Följande exempelutdata visar en Warning i Events: "user supplied IP address was not found." I det här scenariot kontrollerar du att du har skapat den statiska offentliga IP-adressen i nodresursgruppen och att IP-adressen som anges i Kubernetes-tjänstmanifestet är korrekt.

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

Nästa steg

Om du vill ha mer kontroll över nätverkstrafiken till dina program använder du tillägget programroutning för AKS. Mer information om tillägget för approutning finns i Hanterad NGINX-ingress med tillägget för programroutning.