Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Wanneer u een load balancer-resource maakt in een AKS-cluster (Azure Kubernetes Service), is het openbare IP-adres dat eraan is toegewezen, alleen geldig voor de levensduur van die resource. Als u de Kubernetes-service verwijdert, worden ook de bijbehorende Load Balancer en het IP-adres verwijderd. Als u een specifiek IP-adres wilt toewijzen of een IP-adres wilt behouden voor opnieuw geïmplementeerde Kubernetes-services, kunt u een statisch openbaar IP-adres maken en gebruiken.
In dit artikel leest u hoe u een statisch openbaar IP-adres maakt en dit toewijst aan uw Kubernetes-service.
Voordat u begint
- U moet Azure CLI versie 2.0.59 of hoger hebben geïnstalleerd en geconfigureerd. Voer
az --versionuit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren. - In dit artikel wordt beschreven hoe u een standaard-SKU-IP gebruikt met een Standard SKU-load balancer. Zie IP-adrestypen en toewijzingsmethoden in Azure voor meer informatie.
Een AKS-cluster maken
Maak een Azure-resourcegroep met behulp van de
az group createopdracht.az group create --name myNetworkResourceGroup --location eastusMaak een AKS-cluster met behulp van de
az aks createopdracht.az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
Een statisch IP-adres maken
Haal de naam van de knooppuntresourcegroep op met behulp van de
az aks showopdracht en voer een query uit voor denodeResourceGroupeigenschap.az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsvMaak een statisch openbaar IP-adres in de resourcegroep van het knooppunt met behulp van de
az network public ip createopdracht.az network public-ip create \ --resource-group <node resource group name> \ --name myAKSPublicIP \ --sku Standard \ --allocation-method staticNotitie
Als u een Basic SKU-load balancer in uw AKS-cluster gebruikt, gebruik Basic voor de parameter bij het definiëren van een openbaar IP-adres. Alleen Basic SKU-IP's werken met de Basic SKU-load balancer en alleen Standard SKU-IP's werken met Standard SKU-load balancers.
Haal het statische openbare IP-adres op met behulp van de
az network public-ip listopdracht. Geef de naam op van de knooppuntresourcegroep en het openbare IP-adres dat u hebt gemaakt en voer een query uit voor deipAddress.az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
Een service maken met behulp van het statische IP-adres
Bepaal eerst welk type beheerde identiteit uw AKS-cluster gebruikt, door het systeem toegewezen of door de gebruiker toegewezen. Als u het niet zeker weet, roept u de opdracht az aks show aan en voert u een query uit voor de typeeigenschap van de identiteit.
az aks show \ --name myAKSCluster \ --resource-group myResourceGroup \ --query identity.type \ --output tsvAls het cluster een beheerde identiteit gebruikt, zal de waarde van de type-eigenschap ofwel SystemAssigned of UserAssigned zijn.
Als het cluster een service-principal gebruikt, is de waarde van de typeeigenschap null. Overweeg om uw cluster te upgraden om een beheerde identiteit te gebruiken.
Als uw AKS-cluster een door het systeem toegewezen beheerde identiteit gebruikt, voert u als volgt een query uit voor de principal-id van de beheerde identiteit:
# 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)Als uw AKS-cluster een door de gebruiker toegewezen beheerde identiteit gebruikt, is de principal-id null. Voer in plaats daarvan een query uit voor de client-id van de door de gebruiker toegewezen beheerde identiteit:
# 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 tsvWijs gedelegeerde machtigingen toe voor de beheerde identiteit die wordt gebruikt door het AKS-cluster voor de resourcegroep van het openbare IP-adres door het
az role assignment createcommando aan te roepen.# 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}Belangrijk
Als u het uitgaande IP-adres hebt aangepast, moet u ervoor zorgen dat uw clusteridentiteit machtigingen heeft voor zowel het uitgaande openbare IP-adres als het binnenkomende openbare IP-adres.
Maak een bestand met de naam
load-balancer-service.yamlen kopieer deze in de inhoud van het volgende YAML-bestand en geef uw eigen openbare IP-adres op dat u in de vorige stap hebt gemaakt en de naam van de knooppuntresourcegroep.Belangrijk
Het toevoegen van de
loadBalancerIPeigenschap aan het YAML-manifest van de load balancer wordt afgeschaft na upstream Kubernetes. Hoewel het huidige gebruik hetzelfde blijft en bestaande services naar verwachting zonder aanpassingen werken, raden we u ten zeerste aan serviceaantekeningen in te stellen. Als u serviceaantekeningen wilt instellen, kunt u deze gebruikenservice.beta.kubernetes.io/azure-pip-namevoor een openbare IP-naam of voorservice.beta.kubernetes.io/azure-load-balancer-ipv4een IPv4-adres enservice.beta.kubernetes.io/azure-load-balancer-ipv6voor een IPv6-adres, zoals wordt weergegeven in het voorbeeld-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-balancerNotitie
Het toevoegen van de
service.beta.kubernetes.io/azure-pip-nameannotatie zorgt ervoor dat de meest efficiënte LoadBalancer wordt gemaakt en het wordt ten zeerste aanbevolen om mogelijke vertragingen te voorkomen.Stel een openbaar DNS-label in op de service met behulp van de
service.beta.kubernetes.io/azure-dns-label-nameserviceaantekening. Hiermee publiceert u een FQDN (Fully Qualified Domain Name) voor uw service met behulp van de openbare DNS-servers en het domein op het hoogste niveau van Azure. De aantekeningswaarde moet uniek zijn binnen de Azure-locatie, dus we raden u aan een voldoende gekwalificeerde label te gebruiken. Azure voegt automatisch een standaardachtervoegsel toe op de locatie die u hebt geselecteerd, zoals<location>.cloudapp.azure.com, aan de naam die u opgeeft, en maakt daarmee de FQDN.Notitie
Als u de service op uw eigen domein wilt publiceren, raadpleeg Azure DNS en het external-dns project.
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-balancerMaak de service en implementatie met behulp van de
kubectl applyopdracht.kubectl apply -f load-balancer-service.yamlGebruik de
kubectl describe serviceopdracht om het DNS-label voor uw load balancer te zien.kubectl describe service azure-load-balancerHet DNS-label wordt vermeld onder de
Annotations, zoals wordt weergegeven in de volgende verkorte voorbeelduitvoer:Name: azure-load-balancer Namespace: default Labels: <none> Annotations: service.beta.kuberenetes.io/azure-dns-label-name: <unique-service-label>
Problemen oplossen
Als het statische IP-adres dat is gedefinieerd in de loadBalancerIP eigenschap van het Kubernetes-servicemanifest niet bestaat of niet is gemaakt in de knooppuntresourcegroep en er geen andere delegaties zijn geconfigureerd, mislukt het maken van de load balancer-service. Om problemen op te lossen, bekijkt u de servicecreatie-gebeurtenissen met behulp van de kubectl describe opdracht. Geef de naam op van de service die is opgegeven in het YAML-manifest, zoals wordt weergegeven in het volgende voorbeeld:
kubectl describe service azure-load-balancer
In de uitvoer ziet u informatie over de Kubernetes-serviceresource. In de volgende voorbeelduitvoer ziet u een Warning in het Events: "user supplied IP address was not found." In dit scenario moet u ervoor zorgen dat u het statische openbare IP-adres in de knooppuntresourcegroep hebt gemaakt en dat het IP-adres dat is opgegeven in het Kubernetes-servicemanifest juist is.
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
Volgende stappen
Gebruik de invoegtoepassing voor toepassingsroutering voor AKS voor meer controle over het netwerkverkeer naar uw toepassingen. Voor meer informatie over de invoegtoepassing voor app-routering, zie Beheerde NGINX-ingress met de invoegtoepassing voor toepassingsroutering.