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
Skapa en Azure-resursgrupp med kommandot
az group create
.az group create --name myNetworkResourceGroup --location eastus
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
Hämta namnet på nodresursgruppen med hjälp av
az aks show
kommandot och frågan förnodeResourceGroup
egenskapen.az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
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.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 efteripAddress
.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
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.
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
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.
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ändaservice.beta.kubernetes.io/azure-pip-name
för offentligt IP-namn eller användaservice.beta.kubernetes.io/azure-load-balancer-ipv4
för en IPv4-adress ochservice.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.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
Skapa tjänsten och distributionen
kubectl apply
med kommandot .kubectl apply -f load-balancer-service.yaml
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.
Azure Kubernetes Service