Utiliser un équilibreur de charge interne avec Azure Kubernetes Service (AKS)
Vous pouvez créer et utiliser un équilibreur de charge interne pour restreindre l’accès à vos applications dans Azure Kubernetes Service (AKS). Un équilibreur de charge interne n’a pas d’adresse IP publique et rend un service Kubernetes accessible uniquement aux applications qui peuvent atteindre l’adresse IP privée. Ces applications peuvent se trouver dans le même réseau virtuel ou dans un autre réseau virtuel via le peering de réseaux virtuels. Cet article explique comment créer et utiliser un équilibreur de charge interne avec AKS.
Notes
Azure Load Balancer se décline en deux références SKU : De base et Standard. La référence SKU Standard est utilisée par défaut quand vous créez un cluster AKS. Quand vous créez un type de service LoadBalancer, vous obtenez le même type d’équilibreur de charge que lorsque vous avez configuré le cluster. Pour plus d’informations, consultez Comparaison des références SKU d’Azure Load Balancer.
Avant de commencer
- Cet article suppose que vous avez un cluster AKS existant. Si vous avez besoin d’un cluster AKS, vous pouvez en créer un en utilisant Azure CLI, Azure PowerShell ou le Portail Azure.
- Vous devez disposer d’Azure CLI 2.0.59 ou d’un version ultérieure. Exécutez
az --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI. - Si vous souhaitez utiliser un sous-réseau ou un groupe de ressources existant, l’identité du cluster AKS a besoin d’une autorisation pour gérer les ressources réseau. Pour plus d’informations, consultez Utiliser la mise en réseau kubenet avec vos propres plages d’adresses IP dans AKS ou Configurer une mise en réseau Azure CNI dans AKS. Si vous configurez votre équilibreur de charge dans le but d’utiliser une adresse IP dans un autre sous-réseau, assurez-vous que l’identité du cluster AKS dispose également d’un accès en lecture à ce sous-réseau.
- Pour plus d’informations sur les autorisations, consultez Delegate access to other Azure resources (Déléguer l’accès à d’autres ressources Azure).
Créer un équilibrage de charge interne
Créez un manifeste de service nommé
internal-lb.yaml
avec le typeLoadBalancer
de service et l’annotationazure-load-balancer-internal
.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Déployez l’équilibreur de charge interne à l’aide de la
kubectl apply
commande . Cette commande crée un équilibreur de charge Azure dans le groupe de ressources de nœud connecté au même réseau virtuel que votre cluster AKS.kubectl apply -f internal-lb.yaml
Affichez les détails du service à l’aide de la
kubectl get service
commande .kubectl get service internal-app
L’adresse IP de l’équilibreur de charge interne est affichée dans la
EXTERNAL-IP
colonne, comme indiqué dans l’exemple de sortie suivant. Dans ce contexte, Externe fait référence à l’interface externe de l’équilibreur de charge. Cela ne signifie pas qu’il reçoit une adresse IP publique externe. Cette adresse IP est affectée dynamiquement à partir du même sous-réseau que le cluster AKS.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.248.59 10.240.0.7 80:30555/TCP 2m
Spécifier une adresse IP
Quand vous spécifiez une adresse IP pour l’équilibreur de charge, l’adresse IP spécifiée doit se trouver dans le même réseau virtuel que le cluster AKS, mais ne peut pas y être déjà affectée à une ressource. Par exemple, vous ne devez pas utiliser une adresse IP dans la plage désignée pour le sous-réseau Kubernetes au sein du cluster AKS. L’utilisation d’une adresse IP déjà affectée à une autre ressource dans le même réseau virtuel peut entraîner des problèmes avec l’équilibreur de charge.
Vous pouvez utiliser la az network vnet subnet list
commande Azure CLI ou l’applet Get-AzVirtualNetworkSubnetConfig
de commande PowerShell pour obtenir les sous-réseaux de votre réseau virtuel.
Pour plus d’informations sur les sous-réseaux, consultez Ajouter un pool de nœuds avec un sous-réseau unique.
Si vous souhaitez utiliser une adresse IP spécifique avec l’équilibreur de charge, vous avez deux options : définir le service d’annotations ou ajoutez la propriété loadBalancerIP au manifeste YAML de l’équilibreur de charge.
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.
- Définir les annotations de service
- Ajoutez la propriété LoadBalancerIP au manifest YAML à l’équilibreur de charge
Définir des annotations de service utilisant
service.beta.kubernetes.io/azure-load-balancer-ipv4
pour une adresse IPv4 etservice.beta.kubernetes.io/azure-load-balancer-ipv6
pour une adresse IPv6.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-ipv4: 10.240.0.25 service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Affichez les détails du service à l’aide de la
kubectl get service
commande .kubectl get service internal-app
L’adresse IP dans la
EXTERNAL-IP
colonne doit refléter l’adresse IP spécifiée, comme indiqué dans l’exemple de sortie suivant :NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.184.168 10.240.0.25 80:30225/TCP 4m
Pour plus d’informations sur la configuration de votre équilibreur de charge dans un autre sous-réseau, consultez Spécifier un autre sous-réseau.
Connecter le service Azure Private Link à l’équilibreur de charge interne
Avant de commencer
- Vous avez besoin de Kubernetes version 1.22.x ou ultérieure.
- Vous avez besoin d’un groupe de ressources existant avec un réseau virtuel et un sous-réseau. C’est dans ce groupe de ressources que vous créez le point de terminaison privé. Si vous n’avez pas ces ressources, consultez Créer un réseau virtuel et un sous-réseau.
Créer une connexion de service Private Link
Créez un manifeste de service nommé
internal-lb-pls.yaml
avec le typeLoadBalancer
de service et l’annotationazure-load-balancer-internal
etazure-pls-create
. Pour plus d’options, reportez-vous au document de conception Intégration du service Azure Private Link.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-pls-create: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Déployez l’équilibreur de charge interne à l’aide de la
kubectl apply
commande . Cette commande crée un équilibreur de charge Azure dans le groupe de ressources de nœud connecté au même réseau virtuel que votre cluster AKS. Cela crée également un objet du service Private Link qui se connecte à la configuration IP frontale de l’équilibreur de charge associé au service Kubernetes.kubectl apply -f internal-lb-pls.yaml
Affichez les détails du service à l’aide de la
kubectl get service
commande .kubectl get service internal-app
L’adresse IP de l’équilibreur de charge interne est affichée dans la
EXTERNAL-IP
colonne, comme indiqué dans l’exemple de sortie suivant. Dans ce contexte, Externe fait référence à l’interface externe de l’équilibreur de charge. Cela ne signifie pas qu’il reçoit une adresse IP publique externe.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.125.17.53 10.125.0.66 80:30430/TCP 64m
Affichez les détails de l’objet service Private Link à l’aide de la
az network private-link-service list
commande .# Create a variable for the node resource group AKS_MC_RG=$(az aks show -g myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv) # View the details of the Private Link Service object az network private-link-service list -g $AKS_MC_RG --query "[].{Name:name,Alias:alias}" -o table
Vous devez obtenir un résultat semblable à l’exemple de sortie qui suit :
Name Alias -------- ------------------------------------------------------------------------- pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
Créer un point de terminaison privé au service Private Link
Un point de terminaison privé vous permet de vous connecter en privé à votre objet du service Kubernetes via le service Private Link que vous avez créé.
Créez le point de terminaison privé en utilisant la commande
az network private-endpoint create
.# Create a variable for the private link service AKS_PLS_ID=$(az network private-link-service list -g $AKS_MC_RG --query "[].id" -o tsv) # Create the private endpoint $ az network private-endpoint create \ -g myOtherResourceGroup \ --name myAKSServicePE \ --vnet-name myOtherVNET \ --subnet pe-subnet \ --private-connection-resource-id $AKS_PLS_ID \ --connection-name connectToMyK8sService
Personnalisations PLS via des annotations
Voici des annotations qui peuvent être utilisées pour personnaliser la ressource PLS.
Annotation | Valeur | Description | Obligatoire | Par défaut |
---|---|---|---|---|
service.beta.kubernetes.io/azure-pls-create |
"true" |
Booléen indiquant si un PLS doit être créé. | Requis | |
service.beta.kubernetes.io/azure-pls-name |
<PLS name> |
Chaîne spécifiant le nom de la ressource PLS à créer. | Facultatif | "pls-<LB frontend config name>" |
service.beta.kubernetes.io/azure-pls-resource-group |
Resource Group name |
Chaîne spécifiant le nom du groupe de ressources où la ressource PLS sera créée | Facultatif | MC_ resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
Chaîne indiquant le sous-réseau sur lequel le PLS sera déployé. Ce sous-réseau doit exister dans le même réseau virtuel que le pool principal. Les adresses IP NAT PLS sont allouées dans ce sous-réseau. | Facultatif | Si service.beta.kubernetes.io/azure-load-balancer-internal-subnet , ce sous-réseau ILB est utilisé. Sinon, le sous-réseau par défaut du fichier de configuration est utilisé. |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count |
[1-8] |
Nombre total d’adresses IP NAT privées à allouer. | Facultatif | 1 |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address |
"10.0.0.7 ... 10.0.0.10" |
Liste d’adresses IP IPv4 statiques à allouer, séparées par des espaces. (IPv6 n’est pas pris en charge actuellement.) Le nombre total d’adresses IP ne doit pas être supérieur au nombre d’adresses IP spécifié dans service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count . S’il y a moins d’adresses IP spécifiées, le reste est alloué dynamiquement. La première adresse IP de la liste est définie sur Primary . |
Facultatif | Toutes les adresses IP sont allouées dynamiquement. |
service.beta.kubernetes.io/azure-pls-fqdns |
"fqdn1 fqdn2" |
Liste des noms de domaine complets (FQDN) associés au PLS. | Facultatif | [] |
service.beta.kubernetes.io/azure-pls-proxy-protocol |
"true" ou "false" |
Booléen indiquant si le protocole TCP PROXY doit être activé sur le PLS pour transmettre des informations de connexion, y compris l’ID de lien et l’adresse IP source. Notez que le service backend DOIT prendre en charge le protocole PROXY. Dans le cas contraire, les connexions échouent. | Facultatif | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" ou "*" |
Liste des ID d’abonnement Azure, séparés par des espaces, pour lesquels le service de liaison privée est visible. Utilisez "*" pour exposer le PLS à tous les abonnements (moins restrictif). |
Facultatif | Liste vide [] indiquant uniquement le contrôle d’accès en fonction du rôle : ce service de liaison privée est uniquement disponible pour les utilisateurs disposant d’autorisations de contrôle d’accès en fonction du rôle dans votre répertoire. (plus restrictif) |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
Liste des ID d’abonnement Azure, séparés par des espaces. Cela permet aux demandes de connexion PE des abonnements répertoriés dans le PLS d’être approuvées automatiquement. Cela fonctionne uniquement lorsque la visibilité est définie sur « * ». | Facultatif | [] |
Utiliser des réseaux privés
Lorsque vous créez votre cluster AKS, vous pouvez configurer des paramètres de réseau avancés. Ces paramètres vous permettent de déployer le cluster sur un réseau virtuel Azure existant et ses sous-réseaux. Par exemple, vous pouvez déployer votre cluster AKS sur un réseau privé connecté à votre environnement local et exécuter des services accessibles uniquement en interne.
Pour plus d’informations, découvrez comment configurer vos propres sous-réseaux de réseau virtuel avec Kubenet ou Azure CNI.
Il n’est pas nécessaire de modifier les étapes précédentes pour déployer un équilibreur de charge interne dans un cluster AKS qui utilise un réseau privé. L’équilibreur de charge est créé dans le même groupe de ressources que votre cluster AKS, mais il est connecté à votre réseau privé virtuel et à son sous-réseau, comme indiqué dans l’exemple suivant :
$ kubectl get service internal-app
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
internal-app LoadBalancer 10.1.15.188 10.0.0.35 80:31669/TCP 1m
Remarque
L’identité du cluster utilisé par le cluster AKS doit au moins avoir le rôle de contributeur réseau sur la ressource réseau virtuelle. Vous pouvez afficher l’identité de la grappe à l’aide de la commande az aks show
, comme az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity"
. Vous pouvez attribuer le rôle de contributeur réseau à l’aide d’une commande az role assignment create
telle que az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor"
.
Si vous souhaitez définir un rôle personnalisé à la place, vous avez besoin des autorisations suivantes :
Microsoft.Network/virtualNetworks/subnets/join/action
Microsoft.Network/virtualNetworks/subnets/read
Pour plus d’informations, voir Ajouter, modifier ou supprimer un sous-réseau de réseau virtuel.
Spécifier un autre sous-réseau
Ajoutez l’annotation
azure-load-balancer-internal-subnet
à votre service pour spécifier un sous-réseau pour votre équilibreur de charge. Le sous-réseau spécifié doit se trouver dans le même réseau virtuel que votre cluster AKS. Une fois déployé, l’adresseEXTERNAL-IP
de l’équilibreur de charge fait partie du sous-réseau spécifié.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "apps-subnet" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Supprimer l’équilibreur de charge
L’équilibreur de charge est supprimé lorsque tous ses services sont supprimés.
À l’image de toute ressource Kubernetes, vous pouvez directement supprimer un service, tel que kubectl delete service internal-app
, supprimant par la même occasion l’équilibreur de charge Azure sous-jacent.
Étapes suivantes
Pour en savoir plus sur les services Kubernetes, consultez la documentation des services Kubernetes.
Azure Kubernetes Service