Een statisch openbaar IP-adres en DNS-label gebruiken met de Load Balancer van Azure Kubernetes Service (AKS)
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 --version
uit 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 create
opdracht.az group create --name myNetworkResourceGroup --location eastus
Maak een AKS-cluster met behulp van de
az aks create
opdracht.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 show
opdracht en voer een query uit voor denodeResourceGroup
eigenschap.az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
Maak een statisch openbaar IP-adres in de resourcegroep van het knooppunt met behulp van de
az network public ip create
opdracht.az network public-ip create \ --resource-group <node resource group name> \ --name myAKSPublicIP \ --sku Standard \ --allocation-method static
Notitie
Als u een Basic SKU-load balancer in uw AKS-cluster gebruikt, gebruikt u Basic voor de parameter bij het
--sku
definiëren van een openbaar IP-adres. Alleen Basic SKU-IP's werken met de Load Balancer basic SKU 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 list
opdracht. 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 tsv
Als het cluster een beheerde identiteit gebruikt, wordt de waarde van de typeeigenschap SystemAssigned of UserAssigned.
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 tsv
Wijs gedelegeerde machtigingen toe voor de beheerde identiteit die wordt gebruikt door het AKS-cluster voor de resourcegroep van het openbare IP-adres door de opdracht aan te
az role assignment create
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.yaml
en 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
loadBalancerIP
eigenschap 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-name
voor een openbare IP-naam of voorservice.beta.kubernetes.io/azure-load-balancer-ipv4
een IPv4-adres enservice.beta.kubernetes.io/azure-load-balancer-ipv6
voor 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-balancer
Notitie
Het toevoegen van de
service.beta.kubernetes.io/azure-pip-name
aantekening zorgt ervoor dat de meest efficiënte LoadBalancer wordt gemaakt en wordt ten zeerste aanbevolen om mogelijke beperking te voorkomen.Stel een openbaar DNS-label in op de service met behulp van de
service.beta.kubernetes.io/azure-dns-label-name
serviceaantekening. 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
de naam die u opgeeft, en maakt de FQDN.Notitie
Als u de service op uw eigen domein wilt publiceren, raadpleegt u Azure DNS en het externe 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-balancer
Maak de service en implementatie met behulp van de
kubectl apply
opdracht.kubectl apply -f load-balancer-service.yaml
Gebruik de
kubectl describe service
opdracht om het DNS-label voor uw load balancer te zien.kubectl describe service azure-load-balancer
Het 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. Als u problemen wilt oplossen, bekijkt u de gebeurtenissen voor het maken van services 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
volgende voorbeeld: "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 of 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. Zie Beheerde NGINX-ingangen met de invoegtoepassing voor toepassingsroutering voor meer informatie over de invoegtoepassing voor app-routering.
Azure Kubernetes Service