Schnellstart: Erstellen eines Anwendungsgateways für Container, der von ALB Controller verwaltet wird

In diesem Leitfaden wird davon ausgegangen, dass Sie die vom ALB-Controller verwalteteBereitstellungsstrategie verwenden, bei der alle Application Gateway für Container-Ressourcen vom ALB-Controller verwaltet werden. Der Lebenszyklus bestimmt die in Kubernetes definierten Ressourcen. Der ALB-Controller erstellt die Application Gateway für Container-Ressource, wenn eine benutzerdefinierte ApplicationLoadBalancer-Ressource im Cluster definiert ist. Der Lebenszyklus von Application Gateway für Container basiert auf dem Lebenszyklus der benutzerdefinierten Ressource.

Voraussetzungen

Vergewissern Sie sich, dass Sie zuerst den ALB-Controller in Ihrem Kubernetes-Cluster bereitgestellt haben. Weitere Informationen finden Sie unter Schnellstart: Bereitstellen des ALB-Controllers für Application Gateway für Container, wenn Sie den ALB-Controller noch nicht bereitgestellt haben.

Vorbereiten Ihres virtuellen Netzwerks/Subnetzes für Application Gateway für Container

Wenn Sie kein Subnetz mit mindestens 250 verfügbaren IP-Adressen haben, das an die Application Gateway für Container-Ressource delegiert ist, führen Sie die folgenden Schritte aus, um ein neues Subnetz zu erstellen und die Subnetzdelegierung zu aktivieren. Der neue Subnetzadressraum darf sich nicht mit vorhandenen Subnetzen im VNet überschneiden.

Wenn Sie Application Gateway für Container in dem virtuellen Netzwerk bereitstellen möchten, das Ihren AKS-Cluster enthält, führen Sie den folgenden Befehl aus, um das virtuelle Netzwerk des Clusters zu suchen und zuzuweisen. Diese Informationen werden im nächsten Schritt verwendet.

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)

Führen Sie den folgenden Befehl aus, um ein neues Subnetz mit mindestens 250 verfügbaren IP-Adressen zu erstellen und die Subnetzdelegierung für die Application Gateway für Container-Zuordnungsressource zu aktivieren:

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)

Delegieren von Berechtigungen für eine verwaltete Identität

Der ALB-Controller benötigt die Möglichkeit, neue Application Gateway für Container-Ressourcen bereitzustellen und dem Subnetz für die Application Gateway für Container-Zuordnungsressource beizutreten.

In diesem Beispiel delegieren wir die Rolle AppGW for Containers Configuration Manager an die Ressourcengruppe mit dem verwalteten Cluster. Außerdem delegieren wir die Rolle Network Contributor an das Subnetz, das vom Zuordnungssubnetz von Application Gateway für Container verwendet wird, das die Berechtigung Microsoft.Network/virtualNetworks/subnets/join/action enthält.

Bei Bedarf können Sie mit der Berechtigung Microsoft.Network/virtualNetworks/subnets/join/actioneine benutzerdefinierte Rolle erstellen und zuweisen, um andere Berechtigungen zu entfernen, die in der Rolle Netzwerkmitwirkender enthalten sind. Weitere Informationen zum Verwalten von Subnetzberechtigungen.

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" 

Erstellen einer ApplicationLoadBalancer-Kubernetes-Ressource

  1. Definieren des Kubernetes-Namespace für die ApplicationLoadBalancer-Ressource
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
  name: alb-test-infra
EOF
  1. Definieren Sie die ApplicationLoadBalancer-Ressource, und geben Sie die ID des Subnetzes an, in dem die Application Gateway für Container-Zuordnungsressource bereitgestellt werden soll. Die Zuordnung richtet Konnektivität von Application Gateway für Container mit dem definierten Subnetz (und ggf. verbundenen Netzwerken) ein, um als Proxy für Datenverkehr an ein definiertes Back-End fungieren zu können.

Hinweis

Wenn der ALB-Controller die Ressourcen für Application Gateway für Container in ARM erstellt, verwendet er die folgenden Namenskonventionen für seine Ressourcen:

  • alb-<8 zufällig generierte Zeichen> zum Definieren der Ressource für Application Gateway für Container
  • as-<8 zufällig generierte Zeichen> zum Definieren der Zuordnungsressource

Wenn Sie den Namen der in Azure erstellten Ressourcen ändern möchten, sollten Sie die Strategie der eigenen Bereitstellung (Bring Your Own Deployment) befolgen.

Führen Sie den folgenden Befehl aus, um die Ressource und die Zuordnung für Application Gateway für Container zu erstellen.

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

Überprüfen der Erstellung der Application Gateway für Container-Ressourcen

Nachdem die ApplicationLoadBalancer-Ressource erstellt wurde, können Sie den Bereitstellungsfortschritt der Application Gateway für Container-Ressourcen nachverfolgen. Die Bereitstellung wechselt von InProgress in den Status Programmiert, wenn die Bereitstellung abgeschlossen ist. Es kann 5 bis 6 Minuten dauern, bis die Application Gateway für Container-Ressourcen erstellt werden.

Sie können den Status der ApplicationLoadBalancer-Ressource überprüfen, indem Sie den folgenden Befehl ausführen:

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

Beispielausgabe einer erfolgreichen Bereitstellung der Application Gateway für Container-Ressource aus 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

Nächste Schritte

Herzlichen Glückwunsch, Sie haben den ALB-Controller in Ihrem Cluster installiert und die Application Gateway für Container-Ressourcen in Azure bereitgestellt!

Probieren Sie einige der Schrittanleitungen zum Bereitstellen einer Beispielanwendung aus, die einige der Konzepte für den Lastenausgleich von Application Gateway für Container veranschaulicht.