Guida di avvio rapido: creare un gateway applicativo per contenitori gestito dal controller ALB
Questa guida presuppone che si stia seguendo la strategia di distribuzione gestita dal controller ALB, in cui tutte le risorse del Gateway applicativo per contenitori sono gestite dal controller ALB. Il ciclo di vita è determinato dalle risorse definite in Kubernetes. Il controller ALB crea la risorsa del Gateway applicativo per contenitori quando una risorsa personalizzata ApplicationLoadBalancer viene definita nel cluster. Il ciclo di vita del Gateway applicativo per contenitori si basa sul ciclo di vita della risorsa personalizzata.
Prerequisiti
Assicurarsi di aver distribuito prima il controller ALB nel cluster Kubernetes. Vedere Guida di avvio rapido: distribuire il controller ALB del Gateway applicativo per contenitori se non lo si è già stato distribuito.
Preparare il commutatore virtuale/subnet per il Gateway applicativo per contenitori
Se non si dispone di una subnet disponibile con almeno 250 indirizzi IP disponibili e delegati alla risorsa del Gateway applicativo per contenitori, eseguire i passaggi seguenti per creare una nuova subnet e abilitare la delega della subnet. Il nuovo spazio indirizzi della subnet non può sovrapporsi alle subnet esistenti nella VNet.
- Nuova subnet nella rete virtuale gestita dal servizio Azure Kubernetes
- Nuova subnet nella rete virtuale non gestita dal servizio Azure Kubernetes
Se si vuole distribuire il Gateway applicativo per contenitori nella rete virtuale contenente il cluster del servizio Azure Kubernetes, eseguire il comando seguente per trovare e assegnare la rete virtuale del cluster. Queste informazioni vengono usate durante il passaggio successivo.
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)
Eseguire il comando seguente per creare una nuova subnet contenente almeno 250 indirizzi IP disponibili e abilitare la delega della subnet per la risorsa di associazione del Gateway applicativo per contenitori:
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)
Delegare le autorizzazioni a un'identità gestita
Il controller ALB deve avere la possibilità di effettuare il provisioning di nuove risorse del Gateway applicativo per contenitori e di unirsi alla subnet destinata alla risorsa di associazione del Gateway applicativo per contenitori.
In questo esempio, si delega il ruolo AppGW per Configuration Manager dei contenitori al gruppo di risorse contenente il cluster gestito e il ruolo Collaboratore di rete alla subnet usata dalla subnet di associazione del Gateway applicativo per contenitori, che contiene l'autorizzazione Microsoft.Network/virtualNetworks/subnets/join/action.
Se necessario, è possibile creare e assegnare un ruolo personalizzato con l'autorizzazione Microsoft.Network/virtualNetworks/subnets/join/action per eliminare altre autorizzazioni contenute nel ruoloCollaboratore di rete. Altre informazioni sulla gestione delle autorizzazioni della subnet.
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"
Creare una risorsa Kubernetes ApplicationLoadBalancer
- Definire lo spazio dei nomi Kubernetes per la risorsa ApplicationLoadBalancer
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
name: alb-test-infra
EOF
- Definire la risorsa ApplicationLoadBalancer, specificando l'ID della subnet in cui deve essere distribuita la risorsa di associazione del Gateway applicativo per contenitori. L'associazione stabilisce la connettività dal Gateway applicativo per contenitori alla subnet definita e alle reti connesse, se pertinente, per poter usare il proxy del traffico verso un back-end definito.
Nota
Quando il controller ALB crea le risorse del Gateway applicativo per contenitori in ARM, usa la convenzione di denominazione seguente per tali risorse:
- alb-<8 caratteri generati in modo casuale>per definire la risorsa del Gateway applicativo per contenitori
- as-<8 caratteri generati in modo casuale> per definire la risorsa di associazione
Se si vuole modificare il nome delle risorse create in Azure, valutare la possibilità di seguire la strategia di distribuzione personalizzata (Bring Your Own Deployment) seguente.
Eseguire il comando seguente per creare la risorsa del Gateway applicativo per contenitori e l’associazione.
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
Convalidare le risorsa del Gateway applicativo per contenitori
Dopo aver creato la risorsa ApplicationLoadBalancer, è possibile tenere traccia dello stato di avanzamento della distribuzione delle risorse del Gateway applicativo per contenitori. Dopo aver effettuato il provisioning, le transizioni della distribuzione passano dallo stato InProgress a quello Programmato. La creazione dell'associazione delle risorse del Gateway applicativo per contenitori può richiedere tra i 5 e i 6 minuti.
È possibile controllare lo stato della risorsa ApplicationLoadBalancer eseguendo il comando seguente:
kubectl get applicationloadbalancer alb-test -n alb-test-infra -o yaml -w
Output di esempio di un provisioning della risorsa del Gateway applicativo per contenitori eseguito correttamente da 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
Passaggi successivi
Congratulazioni, è stato installato il controller ALB nel cluster e sono state distribuite le risorse del Gateway applicativo per contenitori in Azure.
Provare alcune delle guide pratiche per distribuire un'applicazione di esempio, dimostrando alcuni dei concetti di bilanciamento del carico del Gateway applicativo contenitori.