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

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 hjälp az aks create av kommandot .

    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 kommandot az aks show och fråga efter egenskapen nodeResourceGroup.

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

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

    Viktigt!

    AKS stöder inte längre Basic Load Balancer. Om klustret använder en Grundläggande Load Balancer uppgraderar du till Standard Load Balancer innan du konfigurerar en statisk offentlig IP-adress.

  3. Hämta den statiska offentliga IP-adressen genom att använda kommandot az network public-ip show. 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 Kubernetes-tjänst med den statiska IP-adressen

  1. Skapa en fil med namnet load-balancer-service.yaml och kopiera innehållet i följande YAML-fil. Ange det offentliga IP-resursnamnet (myAKSPublicIP) som du skapade i avsnittet Skapa en statisk IP-adress och nodresursgruppens namn.

    AKS-kontrollplanets identitet har som standard deltagarbehörighet för nodresursgruppen, så den offentliga IP-adress som du skapar i den här artikeln kräver ingen annan rolltilldelning. Om du använder en inkommande eller utgående offentlig IP-adress i en annan resursgrupp ger du kontrollplanets identitet de behörigheter som krävs för resursgruppen. Mer information finns i Hanterade identiteter i AKS.

    Viktigt!

    Egenskapen loadBalancerIP i ett tjänstmanifest i Kubernetes är föråldrad i linje med Kubernetes upstream. Befintliga tjänster fortsätter att fungera utan ändringar, men använder tjänstanteckningar i stället.

    Anteckning Purpose
    service.beta.kubernetes.io/azure-pip-name Ange namnet på den offentliga IP-resursen.
    service.beta.kubernetes.io/azure-load-balancer-ipv4 Ange en IPv4-adress.
    service.beta.kubernetes.io/azure-load-balancer-ipv6 Ange en IPv6-adress.
    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 annoteringen service.beta.kubernetes.io/azure-pip-name säkerställs skapandet av den mest effektiva LoadBalancer och det rekommenderas starkt för att undvika potentiella begränsningar.

  2. 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
    
  3. Innan du skapar tjänsten kontrollerar du att klustret har en arbetsbelastning med poddar som använder app: azure-load-balancer etiketten. Tjänstmanifestet väljer poddar med den här etiketten men skapar ingen distribution.

  4. Skapa tjänsten med kommandot kubectl apply.

    kubectl apply -f load-balancer-service.yaml
    
  5. Kontrollera att tjänsten väljer minst en podd som körs och är redo.

    kubectl get pods -l app=azure-load-balancer
    
  6. Om du vill se DNS-etiketten för lastbalanseraren använder du kubectl describe 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.kubernetes.io/azure-dns-label-name: <unique-service-label>
    

Felsöka

Det här avsnittet förutsätter att du har slutfört skapa en statisk IP-adress, försökt stegen i Skapa en Kubernetes-tjänst med den statiska IP-adressen och har ett AKS-kluster som körs. Om du vill hämta namnet på nodens resursgrupp använder du az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv.

Om den offentliga IP-resursen med namnet i anteckningen service.beta.kubernetes.io/azure-pip-name inte finns i resursgruppen som anges av , eller om AKS-kontrollplanets identitet inte kan komma åt den resursgruppen, misslyckas skapande av service.beta.kubernetes.io/azure-load-balancer-resource-grouplastbalanserarens tjänst. Om du vill felsöka kan du granska tjänstannoteringarna och skapelsehändelserna med kommandot kubectl describe. 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 anteckningen azure-pip-name matchar namnet på den statiska offentliga IP-resursen och att anteckningen azure-load-balancer-resource-group matchar den resursgrupp som innehåller den.

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

Nästa steg

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