Démarrage rapide : créer des ressources Application Gateway pour les conteneurs managés par le contrôleur ALB

Ce guide suppose d’avoir suivi la stratégie de déploiementgérée par le contrôleur ALB où toutes les ressources Application Gateway pour les conteneurs sont gérées par le contrôleur ALB. Le cycle de vie est déterminé par les ressources définies dans Kubernetes. Le contrôleur ALB crée une ressource Application Gateway pour les conteneurs lorsqu’une ressource personnalisée ApplicationLoadBalancer est définie sur le cluster. Le cycle de vie d’Application Gateway pour les conteneurs est basé sur le cycle de vie de la ressource personnalisée.

Prérequis

Vérifiez que vous avez d’abord déployé le contrôleur ALB dans votre cluster Kubernetes. Consultez le guide Démarrage rapide : déployer le contrôleur ALB pour Application Gateway pour les conteneurs si vous n’avez pas encore déployé le contrôleur ALB.

Préparer votre réseau virtuel/sous-réseau pour Application Gateway pour les conteneurs

Si vous ne disposez pas de sous-réseau contenant au moins 250 adresses IP disponibles qui est délégué à la ressource Application Gateway pour les conteneurs, procédez comme suit pour créer un sous-réseau et activer la délégation de sous-réseau. L’espace d’adressage du nouveau sous-réseau ne peut pas chevaucher les sous-réseaux existants dans le réseau virtuel.

Pour déployer Application Gateway pour les conteneurs dans le réseau virtuel contenant votre cluster AKS, exécutez la commande suivante pour rechercher et affecter le réseau virtuel du cluster. Ces informations sont utilisées à l’étape suivante.

AKS_NAME='<your cluster name>'
RESOURCE_GROUP='<your resource group name>'

MC_RESOURCE_GROUP=$(az aks show --name $AKS_NAME --resource-group $RESOURCE_GROUP --query "nodeResourceGroup" -o tsv)
CLUSTER_SUBNET_ID=$(az vmss list --resource-group $MC_RESOURCE_GROUP --query '[0].virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].subnet.id' -o tsv)
read -d '' VNET_NAME VNET_RESOURCE_GROUP VNET_ID <<< $(az network vnet show --ids $CLUSTER_SUBNET_ID --query '[name, resourceGroup, id]' -o tsv)

Exécutez la commande suivante pour créer un sous-réseau contenant au moins 250 adresses IP disponibles et activer la délégation de sous-réseau pour la ressource d’association Application Gateway pour les conteneurs :

SUBNET_ADDRESS_PREFIX='<network address and prefix for an address space under the vnet that has at least 250 available addresses (/24 or larger subnet)>'
ALB_SUBNET_NAME='subnet-alb' # subnet name can be any non-reserved subnet name (i.e. GatewaySubnet, AzureFirewallSubnet, AzureBastionSubnet would all be invalid)
az network vnet subnet create \
  --resource-group $VNET_RESOURCE_GROUP \
  --vnet-name $VNET_NAME \
  --name $ALB_SUBNET_NAME \
  --address-prefixes $SUBNET_ADDRESS_PREFIX \
  --delegations 'Microsoft.ServiceNetworking/trafficControllers'
ALB_SUBNET_ID=$(az network vnet subnet show --name $ALB_SUBNET_NAME --resource-group $VNET_RESOURCE_GROUP --vnet-name $VNET_NAME --query '[id]' --output tsv)

Déléguer des autorisations à une identité managée

Le contrôleur ALB doit pouvoir approvisionner de nouvelles ressources Application Gateway pour les conteneurs et joindre le sous-réseau destiné à la ressource d’association Application Gateway pour les conteneurs.

Dans cet exemple, nous allons déléguer le rôle Configuration Manager App Gateway pour les conteneurs au groupe de ressources contenant le cluster managé et déléguer le rôle Contributeur de réseau au sous-réseau utilisé par le sous-réseau d’association Application Gateway pour les conteneurs contenant l’autorisation Microsoft.Network/virtualNetworks/subnets/join/action.

Si vous le souhaitez, vous pouvez créer et attribuer un rôle personnalisé avec l’autorisation Microsoft.Network/virtualNetworks/subnets/join/action pour éliminer les autres autorisations contenues dans le rôle de Contributeur de réseau. En savoir plus sur la gestion des autorisations de sous-réseau.

IDENTITY_RESOURCE_NAME='azure-alb-identity'

MC_RESOURCE_GROUP=$(az aks show --name $AKS_NAME --resource-group $RESOURCE_GROUP --query "nodeResourceGroup" -otsv | tr -d '\r')

mcResourceGroupId=$(az group show --name $MC_RESOURCE_GROUP --query id -otsv)
principalId=$(az identity show -g $RESOURCE_GROUP -n $IDENTITY_RESOURCE_NAME --query principalId -otsv)

# Delegate AppGw for Containers Configuration Manager role to AKS Managed Cluster RG
az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $mcResourceGroupId --role "fbc52c3f-28ad-4303-a892-8a056630b8f1" 

# Delegate Network Contributor permission for join to association subnet
az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $ALB_SUBNET_ID --role "4d97b98b-1d4f-4787-a291-c67834d212e7" 

Créer une ressource Kubernetes ApplicationLoadBalancer

  1. Définir l’espace de noms Kubernetes pour la ressource ApplicationLoadBalancer
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
  name: alb-test-infra
EOF
  1. Définissez la ressource ApplicationLoadBalancer, en spécifiant l’ID de sous-réseau dans lequel la ressource d’association Application Gateway pour les conteneurs doit être déployée. L’association établit une connectivité depuis Application Gateway pour les conteneurs vers le sous-réseau défini (et les réseaux connectés le cas échéant) afin de pouvoir proxyser le trafic vers un back-end défini.

Notes

Lorsque le contrôleur ALB crée les ressources de l’Application Gateway pour conteneurs dans ARM, il utilise les conventions d’affectation de noms suivantes pour ses ressources :

  • alb-<8 caractères générés de manière aléatoire> pour définir la ressource de l’Application Gateway pour conteneurs
  • as-<8 caractères générés de manière aléatoire> pour définir la ressource d’association

Si vous souhaitez modifier le nom des ressources créées dans Azure, envisagez de suivre la stratégie d’apporter votre propre déploiement (Bring Your Own).

Exécutez la commande suivante pour créer la ressource et l’association de l’Application Gateway pour conteneurs.

kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: ApplicationLoadBalancer
metadata:
  name: alb-test
  namespace: alb-test-infra
spec:
  associations:
  - $ALB_SUBNET_ID
EOF

Valider la création des ressources Application Gateway pour les conteneurs

Une fois la ressource ApplicationLoadBalancer créée, vous pouvez suivre la progression du déploiement des ressources Application Gateway pour conteneurs. Une fois l’approvisionnement terminé, le déploiement passe de l’état En cours à l’état Programmé. La création des ressources Application Gateway pour les conteneurs peut prendre 5 à 6 minutes.

Vous pouvez vérifier l’état de la ressource ApplicationLoadBalancer en exécutant la commande suivante :

kubectl get applicationloadbalancer alb-test -n alb-test-infra -o yaml -w

Exemple de sortie d’un approvisionnement réussi de la ressource Application Gateway pour les conteneurs depuis Kubernetes.

status:
  conditions:
  - lastTransitionTime: "2023-06-19T21:03:29Z"
    message: Valid Application Gateway for Containers resource
    observedGeneration: 1
    reason: Accepted
    status: "True"
    type: Accepted
  - lastTransitionTime: "2023-06-19T21:03:29Z"
    message: alb-id=/subscriptions/xxx/resourceGroups/yyy/providers/Microsoft.ServiceNetworking/trafficControllers/alb-zzz
    observedGeneration: 1
    reason: Ready
    status: "True"
    type: Deployment

Étapes suivantes

Félicitations, vous avez installé le contrôleur ALB sur votre cluster et déployé les ressources Application Gateway pour les conteneurs dans Azure !

Essayez quelques-uns des guides pratiques pour déployer un exemple d’application, en illustrant certains des concepts d’équilibrage de charge avec Application Gateway pour les conteneurs.