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

  1. Maak een Azure-resourcegroep met behulp van de az group create opdracht.

    az group create --name myNetworkResourceGroup --location eastus
    
  2. 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

  1. Haal de naam van de knooppuntresourcegroep op met behulp van de az aks show opdracht en voer een query uit voor de nodeResourceGroup eigenschap.

    az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
    
  2. 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.

  3. 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 de ipAddress.

    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

  1. Zorg ervoor dat de clusteridentiteit die door het AKS-cluster wordt gebruikt, gedelegeerde machtigingen heeft voor de resourcegroep van het openbare IP-adres met behulp van de az role assignment create opdracht.

    CLIENT_ID=$(az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query identity.principalId -o tsv)
    RG_SCOPE=$(az group show --name <node resource group> --query id -o tsv)
    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.

  2. 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 gebruiken service.beta.kubernetes.io/azure-pip-name voor een openbare IP-naam of voor service.beta.kubernetes.io/azure-load-balancer-ipv4 een IPv4-adres en service.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.

  3. 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.comde 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
    
  4. Maak de service en implementatie met behulp van de kubectl apply opdracht.

    kubectl apply -f load-balancer-service.yaml
    
  5. 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 Eventsvolgende 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.