Delen via


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, 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.

  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. 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, 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.

  2. 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    
    
  3. Wijs 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 create commando 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.

  4. 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 annotatie zorgt ervoor dat de meest efficiënte LoadBalancer wordt gemaakt en het wordt ten zeerste aanbevolen om mogelijke vertragingen te voorkomen.

  5. 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, 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-balancer
    
  6. Maak de service en implementatie met behulp van de kubectl apply opdracht.

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