Utiliser une adresse IP publique statique et une étiquette DNS avec l’équilibrage de charge d’Azure Kubernetes Service (AKS)
Lorsque vous créez une ressource d’équilibreur de charge dans un cluster Azure Kubernetes Service (AKS), l’adresse IP publique qui lui est attribuée est uniquement valide pour la durée de vie de cette ressource. Si vous supprimez le service Kubernetes, l’adresse IP et l’équilibreur de charge associés sont également supprimés. Si vous voulez affecter une adresse IP spécifique ou conserver une adresse IP pour des services Kubernetes redéployés, vous pouvez créer et utiliser une adresse IP publique statique.
Cet article vous montre comment créer une adresse IP publique statique et l’affecter à votre service Kubernetes.
Avant de commencer
- La version 2.0.59 ou ultérieure d’Azure CLI doit être installée et configurée. Exécutez
az --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI. - Cet article traite de l’utilisation d’une adresse IP SKU standard avec un équilibreur de charge SKU standard. Pour plus d’informations, consultez Types d’adresses IP et méthodes d’allocation dans Azure.
Créer un cluster AKS
Créez un groupe de ressources Azure à l’aide de la commande
az group create
.az group create --name myNetworkResourceGroup --location eastus
Créez un cluster AKS avec la commande
az aks create
.az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
Créer une adresse IP statique
Obtenez le nom du groupe de ressources de nœud à l’aide de la commande
az aks show
et exécutez une requête sur la propriéténodeResourceGroup
.az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
Créez une adresse IP publique statique dans le groupe de ressources du nœud à l’aide de la commande
az network public ip create
.az network public-ip create \ --resource-group <node resource group name> \ --name myAKSPublicIP \ --sku Standard \ --allocation-method static
Remarque
Si vous utilisez une référence SKU d’équilibreur de charge De base dans votre cluster AKS, utilisez De base pour le paramètre
--sku
lors de la définition d’une adresse IP publique. Seules les adresses IP SKU De base fonctionnent avec l’équilibreur de charge SKU De base et seuls les adresses IP SKU Standard fonctionnent avec les équilibreurs de charge SKU Standard.Obtenez l’adresse IP publique statique à l’aide de la commande
az network public-ip list
. Spécifiez le nom du groupe de ressources du nœud et l’adresse IP publique que vous avez créés, puis interrogezipAddress
.az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
Créer un service utilisant l’adresse IP statique
Tout d’abord, déterminez le type d’identité managée que votre cluster AKS utilise, affectée par le système ou par l’utilisateur. Si vous n’êtes pas certain, appelez la commande az aks show et interrogez la propriété type de l’identité.
az aks show \ --name myAKSCluster \ --resource-group myResourceGroup \ --query identity.type \ --output tsv
Si le cluster utilise une identité managée, la valeur de la propriété type sera soit SystemAssigned soit UserAssigned.
Si le cluster utilise un principal de service, la valeur de la propriété type sera Null. Envisagez de mettre à niveau votre cluster pour qu’il utilise une identité managée.
Si votre cluster AKS utilise une identité managée affectée par le système, interrogez l’ID principal de l’identité managée comme suit :
# 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)
Si votre cluster AKS utilise une identité managée affectée par l’utilisateur, l’ID principal sera Null. Recherchez plutôt l’ID client de l’identité managée affectée par l’utilisateur :
# 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
Attribuez des autorisations déléguées pour l’identité managée utilisée par le cluster AKS pour le groupe de ressources de l’adresse IP publique en appelant la commande
az role assignment create
.# 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}
Important
Si vous avez personnalisé votre adresse IP sortante, assurez-vous que l’identité de votre cluster dispose des autorisations d’accès tant à l’adresse IP publique sortante qu’à l’adresse IP publique entrante.
Créez un fichier nommé
load-balancer-service.yaml
et copiez-le dans le contenu du fichier YAML suivant, en fournissant votre propre adresse IP publique créée à l’étape précédente et le nom du groupe de ressources de nœud.Important
L’ajout de la propriété
loadBalancerIP
au manifeste YAML de l’équilibreur de charge est déprécié après Kubernetes en amont. Bien que l’utilisation actuelle reste la même et que les services existants soient censés fonctionner sans modification, nous recommandons vivement de définir des annotations de service à la place. Pour définir des annotations de service, vous pouvez utiliserservice.beta.kubernetes.io/azure-pip-name
pour nom d’adresse IP publique ou utiliserservice.beta.kubernetes.io/azure-load-balancer-ipv4
pour adresse IPv4 etservice.beta.kubernetes.io/azure-load-balancer-ipv6
pour adresse IPv6, comme illustré dans l’exemple 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
Remarque
L’annotation
service.beta.kubernetes.io/azure-pip-name
garantit la création de LoadBalancer de la manière la plus efficace possible et est fortement recommandée pour éviter toute limitation potentielle.Définissez une étiquette DNS publique sur le service à l’aide de l’annotation de service
service.beta.kubernetes.io/azure-dns-label-name
. Il publie un nom de domaine complet pour votre service en utilisant les serveurs DNS publics et le domaine de niveau supérieur Azure. La valeur de l’annotation devant être unique dans l’emplacement Azure, il est recommandé d’utiliser une étiquette suffisamment qualifiée. Azure ajoute automatiquement un suffixe par défaut à l’emplacement que vous avez sélectionné, tel que<location>.cloudapp.azure.com
, au nom que vous fournissez, créant ainsi le nom de domaine complet.Remarque
Si vous souhaitez publier le service sur votre propre domaine, consultez Azure DNS et le projet 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
Créez le service et le déploiement à l’aide de la commande
kubectl apply
.kubectl apply -f load-balancer-service.yaml
Pour voir l’étiquette DNS de votre équilibreur de charge, utilisez la commande
kubectl describe service
.kubectl describe service azure-load-balancer
L’étiquette DNS est répertoriée sous
Annotations
, comme indiqué dans l’exemple de sortie condensé suivant :Name: azure-load-balancer Namespace: default Labels: <none> Annotations: service.beta.kuberenetes.io/azure-dns-label-name: <unique-service-label>
Résoudre les problèmes
Si l’adresse IP statique définie dans la propriété loadBalancerIP
du manifeste du service Kubernetes n’existe pas ou n’a pas été créée dans le groupe de ressources de nœud et qu’aucune autre délégation n’est configurée, la création du service d’équilibreur de charge échoue. Pour résoudre les problèmes, examinez les événements de création du service avec la commande kubectl describe
. Spécifiez le nom du service tel qu’il est spécifié dans le manifeste YAML, comme indiqué dans l’exemple suivant :
kubectl describe service azure-load-balancer
La sortie vous montre des informations sur la ressource du service Kubernetes. L’exemple de sortie suivant montre un Warning
dans Events
: « user supplied IP address was not found
». Dans ce scénario, vérifiez que vous avez créé l’adresse IP publique statique dans le groupe de ressources de nœud et que l’adresse IP spécifiée dans le manifeste de service Kubernetes est correcte.
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
Étapes suivantes
Pour plus de contrôle sur le trafic réseau vers vos applications, utilisez le module complémentaire de routage des applications pour AKS. Pour plus d’informations sur le module complémentaire de routage des applications, consultez Entrée NGINX managée avec le module complémentaire de routage d’application.
Azure Kubernetes Service