Installieren eines Application Gateway-Eingangscontrollers (Application Gateway Ingress Controller, AGIC) mithilfe eines neuen Application Gateways
Die nachfolgenden Anweisungen gehen davon aus, dass der Application Gateway-Eingangsdatencontroller (Application Gateway Ingress Controller, AGIC) in einer Umgebung ohne bereits vorhandene Komponenten installiert wird.
Tipp
Weitere Informationen unter Was ist Anwendungsgateway für Container.
Erforderliche Befehlszeilentools
Es wird empfohlen, Azure Cloud Shell für alle unten aufgeführten Befehlszeilenvorgänge zu verwenden. Starten Sie Ihre Shell über shell.azure.com oder durch Klicken auf den Link:
Alternativ können Sie Cloud Shell über das Azure-Portal mithilfe des folgenden Symbols starten:
Ihre Azure Cloud Shell verfügt bereits über alle erforderlichen Tools. Wenn Sie sich für die Verwendung einer anderen Umgebung entscheiden, stellen Sie sicher, dass die folgenden Befehlszeilentools installiert sind:
az
– Azure CLI: Installationsanleitungenkubectl
– Kubernetes-Befehlszeilentool: Installationsanleitungenhelm
– Kubernetes-Paket-Manager: Installationsanleitungenjq
– Befehlszeilen-JSON-Prozessor: Installationsanleitungen
Erstellen einer Identität
Führen Sie die folgenden Schritte aus, um ein Microsoft Entra Dienstprinzipalobjekt zu erstellen. Notieren Sie sich die Werte für appId
, password
und objectId
– diese Werte werden in den folgenden Schritten verwendet.
Erstellen des AD-Dienstprinzipals (Mehr über Azure RBAC erfahren):
az ad sp create-for-rbac --role Contributor --scopes /subscriptions/mySubscriptionID -o json > auth.json appId=$(jq -r ".appId" auth.json) password=$(jq -r ".password" auth.json)
Die Werte
appId
undpassword
aus der JSON-Ausgabe werden in den folgenden Schritten verwendet.Verwenden Sie die
appId
aus der Ausgabe des vorherigen Befehls, um dieid
des neuen Dienstprinzipals abzurufen:objectId=$(az ad sp show --id $appId --query "id" -o tsv)
Die Ausgabe dieses Befehls ist
objectId
. Sie wird in der Azure Resource Manager-Vorlage verwendet.Erstellen Sie die Parameterdatei, die später in der Azure Resource Manager-Vorlagenbereitstellung verwendet wird.
cat <<EOF > parameters.json { "aksServicePrincipalAppId": { "value": "$appId" }, "aksServicePrincipalClientSecret": { "value": "$password" }, "aksServicePrincipalObjectId": { "value": "$objectId" }, "aksEnableRBAC": { "value": false } } EOF
Legen Sie zum Bereitstellen eines für Kubernetes RBAC aktivierten Clusters das Feld
aksEnableRBAC
auftrue
fest.
Bereitstellungskomponenten
Dieser Schritt fügt Ihrem Abonnement die folgenden Komponenten hinzu:
- Azure Kubernetes Service (AKS)
- Application Gateway v2
- Virtuelles Netzwerk mit zwei Subnetzen
- Öffentliche IP-Adresse
- Verwaltete Identität, die von der Microsoft Entra-Podidentität verwendet wird
Laden Sie die Azure Resource Manager-Vorlage herunter, und ändern Sie die Vorlage nach Bedarf.
wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
Bereitstellen der Azure Resource Manager-Vorlage mit der Azure-Befehlszeilenschnittstelle. Die Bereitstellung kann bis zu 5 Minuten dauern.
resourceGroupName="MyResourceGroup" location="westus2" deploymentName="ingress-appgw" # create a resource group az group create -n $resourceGroupName -l $location # modify the template as needed az deployment group create \ -g $resourceGroupName \ -n $deploymentName \ --template-file template.json \ --parameters parameters.json
Nachdem die Bereitstellung abgeschlossen ist, laden Sie die Bereitstellungsausgabe in eine Datei namens
deployment-outputs.json
herunter.az deployment group show -g $resourceGroupName -n $deploymentName --query "properties.outputs" -o json > deployment-outputs.json
Einrichten des Azure Application Gateway-Eingangscontrollers
Mit den Anweisungen im vorherigen Abschnitt haben wir einen neuen AKS-Cluster und ein Application Gateway erstellt und konfiguriert. Wir können nun eine Beispiel-App und einen eingehenden Controller in unserer neuen Kubernetes-Infrastruktur bereitstellen.
Einrichten von Kubernetes-Anmeldeinformationen
Für die folgenden Schritte müssen wir den Befehl kubectl einrichten, mit dem wir eine Verbindung mit unserem neuen Kubernetes-Cluster herstellen. In Cloud Shell ist kubectl
bereits installiert. Wir verwenden die az
-CLI zum Abrufen von Anmeldeinformationen für Kubernetes.
Abrufen von Anmeldeinformationen für den neu bereitgestellten AKS (weitere Informationen):
# use the deployment-outputs.json created after deployment to get the cluster name and resource group name
aksClusterName=$(jq -r ".aksClusterName.value" deployment-outputs.json)
resourceGroupName=$(jq -r ".resourceGroupName.value" deployment-outputs.json)
az aks get-credentials --resource-group $resourceGroupName --name $aksClusterName
Installieren der Microsoft Entra-Podidentität
Die Microsoft Entra-Podidentität bietet tokenbasierten Zugriff auf Azure Resource Manager (ARM).
Die Microsoft Entra-Podidentität fügt Ihrem Kubernetes-Cluster folgende Komponenten hinzu:
- Kubernetes-CRDs:
AzureIdentity
,AzureAssignedIdentity
undAzureIdentityBinding
- MIC-Komponente (Managed Identity Controller)
- NMI-Komponente (Node Managed Identity)
So installieren Sie Microsoft Entra-Podidentität auf Ihrem Cluster:
Für Kubernetes RBAC aktivierter AKS-Cluster
kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
Für Kubernetes RBAC deaktivierter AKS-Cluster
kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment.yaml
Installieren von Helm
Helm ist ein Paket-Manager für Kubernetes. Wir verwenden ihn, um das application-gateway-kubernetes-ingress
-Paket zu installieren.
Hinweis
Wenn Sie Cloud Shell verwenden, müssen Sie Helm nicht installieren. Azure Cloud Shell ist in Helm Version 3 enthalten. Überspringen Sie den ersten Schritt und fügen Sie einfach das AGIC Helm-Repository hinzu.
Installieren Sie Helm, und führen Sie Folgendes aus:
Für Kubernetes RBAC aktivierter AKS-Cluster
kubectl create serviceaccount --namespace kube-system tiller-sa kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller-sa helm init --tiller-namespace kube-system --service-account tiller-sa
Für Kubernetes RBAC deaktivierter AKS-Cluster
helm init
Installieren des Helm-Eingangscontrollerdiagramms
Verwenden Sie die oben erstellte Datei
deployment-outputs.json
, und erstellen Sie die folgenden Variablen.applicationGatewayName=$(jq -r ".applicationGatewayName.value" deployment-outputs.json) resourceGroupName=$(jq -r ".resourceGroupName.value" deployment-outputs.json) subscriptionId=$(jq -r ".subscriptionId.value" deployment-outputs.json) identityClientId=$(jq -r ".identityClientId.value" deployment-outputs.json) identityResourceId=$(jq -r ".identityResourceId.value" deployment-outputs.json)
Laden Sie die Datei „helm-config.yaml“ herunter, mit der AGIC konfiguriert wird:
wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yaml
Oder kopieren Sie die folgende YAML-Datei:
# This file contains the essential configs for the ingress controller helm chart # Verbosity level of the App Gateway Ingress Controller verbosityLevel: 3 ################################################################################ # Specify which application gateway the ingress controller will manage # appgw: subscriptionId: <subscriptionId> resourceGroup: <resourceGroupName> name: <applicationGatewayName> # Setting appgw.shared to "true" will create an AzureIngressProhibitedTarget CRD. # This prohibits AGIC from applying config for any host/path. # Use "kubectl get AzureIngressProhibitedTargets" to view and change this. shared: false ################################################################################ # Specify which kubernetes namespace the ingress controller will watch # Default value is "default" # Leaving this variable out or setting it to blank or empty string would # result in Ingress Controller observing all acessible namespaces. # # kubernetes: # watchNamespace: <namespace> ################################################################################ # Specify the authentication with Azure Resource Manager # # Two authentication methods are available: # - Option 1: AAD-Pod-Identity (https://github.com/Azure/aad-pod-identity) armAuth: type: aadPodIdentity identityResourceID: <identityResourceId> identityClientID: <identityClientId> ## Alternatively you can use Service Principal credentials # armAuth: # type: servicePrincipal # secretJSON: <<Generate this value with: "az ad sp create-for-rbac --subscription <subscription-uuid> --role Contributor --sdk-auth | base64 -w0" >> ################################################################################ # Specify if the cluster is Kubernetes RBAC enabled or not rbac: enabled: false # true/false # Specify aks cluster related information. THIS IS BEING DEPRECATED. aksClusterConfiguration: apiServerAddress: <aks-api-server-address>
Bearbeiten Sie die neu heruntergeladene Datei „helm-config.yaml“, und füllen Sie die Abschnitte
appgw
undarmAuth
aus.sed -i "s|<subscriptionId>|${subscriptionId}|g" helm-config.yaml sed -i "s|<resourceGroupName>|${resourceGroupName}|g" helm-config.yaml sed -i "s|<applicationGatewayName>|${applicationGatewayName}|g" helm-config.yaml sed -i "s|<identityResourceId>|${identityResourceId}|g" helm-config.yaml sed -i "s|<identityClientId>|${identityClientId}|g" helm-config.yaml
Hinweis
Für die Bereitstellung in Sovereign Clouds (z. B. Azure Government) muss der Konfigurationsparameter
appgw.environment
hinzugefügt und auf den entsprechenden Wert festgelegt werden, wie unten dokumentiert.Werte:
verbosityLevel
: Legt die Ausführlichkeitsebene der AGIC-Protokollinfrastruktur fest. Unter Protokolliergrade finden Sie mögliche Werte.appgw.environment
: Legt die Cloudumgebung fest. Mögliche Werte:AZURECHINACLOUD
,AZUREGERMANCLOUD
,AZUREPUBLICCLOUD
,AZUREUSGOVERNMENTCLOUD
appgw.subscriptionId
: Die ID des Azure-Abonnements, in dem sich die Application Gateway-Instanz befindet. Beispiel:a123b234-a3b4-557d-b2df-a0bc12de1234
appgw.resourceGroup
: Der Name der Azure-Ressourcengruppe, in der die Application Gateway-Instanz erstellt wurde. Beispiel:app-gw-resource-group
appgw.name
: Name der Application Gateway-Instanz. Beispiel:applicationgatewayd0f0
appgw.shared
: Für dieses boolesche Flag muss standardmäßigfalse
festgelegt werden. Legen Sie es auftrue
fest, wenn Sie eine freigegebene Application Gateway-Instanz benötigen.kubernetes.watchNamespace
: Geben Sie den Namespace an, den AGIC überwachen sollte. Beim Namespace kann es sich um eine einzelne Zeichenfolge oder eine durch Trennzeichen getrennte Namespace-Liste handeln.armAuth.type
: kannaadPodIdentity
oderservicePrincipal
sein.armAuth.identityResourceID
: Die Ressourcen-ID der verwalteten Azure-IdentitätarmAuth.identityClientID
: Die Client-ID der Identität Weitere Inforamtionen zu identityClientID finden Sie unten.armAuth.secretJSON
: Nur erforderlich, wenn der Typ des Dienstprinzipalgeheimnisses ausgewählt wird (beim Festlegen vonarmAuth.type
aufservicePrincipal
)
Hinweis
Bei
identityResourceID
undidentityClientID
handelt es sich um Werte, die während der Schritte Komponenten bereitstellen erstellt wurden. Sie können mit dem folgenden Befehl erneut abgerufen werden:az identity show -g <resource-group> -n <identity-name>
<resource-group>
im obigen Befehl ist die Ressourcengruppe Ihres Application Gateways.<identity-name>
ist der Name der erstellten Identität. Alle Identitäten für ein bestimmtes Abonnement werden unter Verwendung vonaz identity list
aufgelistet:Installieren Sie das Application Gateway-Eingangscontrollerpaket:
helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.7.5 -f helm-config.yaml
Installieren einer Beispiel-App
Nach der Installation der Application Gateway-Instanz sowie von AKS und AGIC können Sie die Beispiel-App über Azure Cloud Shell installieren:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: aspnetapp
labels:
app: aspnetapp
spec:
containers:
- image: "mcr.microsoft.com/dotnet/samples:aspnetapp"
name: aspnetapp-image
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: aspnetapp
spec:
selector:
app: aspnetapp
ports:
- protocol: TCP
port: 80
targetPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: aspnetapp
annotations:
kubernetes.io/ingress.class: azure/application-gateway
spec:
rules:
- http:
paths:
- path: /
pathType: Exact
backend:
service:
name: aspnetapp
port:
number: 80
pathType: Exact
EOF
Alternativ können Sie Folgendes ausführen:
Laden Sie die oben genannte YAML-Datei herunter:
curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
Wenden Sie die YAML-Datei an:
kubectl apply -f aspnetapp.yaml
Weitere Beispiele
In dieser Anleitung mit Vorgehensweisen finden Sie weitere Beispiele für das Bereitstellen eines AKS-Diensts im Internet über HTTP oder HTTPS mit Application Gateway.