Partage via


Installer AGIC à l’aide d’un nouveau déploiement Application Gateway

Les instructions de cet article supposent que vous souhaitez installer le contrôleur d’entrée Application Gateway (AGIC) dans un environnement sans composants préexistants.

Conseil

Envisagez une Passerelle d’application pour conteneurs pour votre solution d’entrée Kubernetes. Pour plus d’informations, consultez Démarrage rapide : déployer le contrôleur ALB de la Passerelle d’application pour conteneurs.

Installer les outils en ligne de commande obligatoires

Nous vous recommandons d’utiliser Azure Cloud Shell pour toutes les opérations de ligne de commande dans cet article. Vous pouvez ouvrir Cloud Shell en sélectionnant le bouton Lancer Cloud Shell.

Vous pouvez également ouvrir Cloud Shell à partir du Portail Azure en sélectionnant son icône.

Icône Azure PowerShell dans le portail

Votre instance Cloud Shell dispose déjà de tous les outils nécessaires. Si vous choisissez d’utiliser un autre environnement, vérifiez que les outils en ligne de commande suivants sont installés :

Créer une identité

Procédez comme suit pour créer un objet principal de service Microsoft Entra.

  1. Créez un principal de service Active Directory, qui inclut un rôle contrôle d’accès en fonction du rôle Azure (RBAC) :

    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)
    

    Enregistrez les valeurs appId et password à partir de la sortie JSON. Vous les utiliserez dans les étapes suivantes.

  2. Utilisez la valeur appId de la sortie de la commande précédente pour récupérer le id du nouveau principal du service :

    objectId=$(az ad sp show --id $appId --query "id" -o tsv)
    

    La sortie de cette commande est objectId. Enregistrez cette valeur, car vous en aurez besoin à l’étape suivante.

  3. Créez le fichier de paramètres que vous utiliserez dans le déploiement du modèle Azure Resource Manager (modèle ARM) :

    cat <<EOF > parameters.json
    {
      "aksServicePrincipalAppId": { "value": "$appId" },
      "aksServicePrincipalClientSecret": { "value": "$password" },
      "aksServicePrincipalObjectId": { "value": "$objectId" },
      "aksEnableRBAC": { "value": false }
    }
    EOF
    

    Pour déployer un cluster sur lequel Kubernetes RBAC est activé, définissez aksEnableRBAC sur true.

Déployer des composants

La procédure suivante ajoute ces composants à votre abonnement :

Pour déployer les composants :

  1. Téléchargez le modèle ARM :

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
    
  2. Déployez le modèle ARM à l’aide d’Azure CLI et modifiez-le si nécessaire. Le déploiement peut prendre jusqu’à 5 minutes.

    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
    
  3. Une fois le déploiement terminé, téléchargez la sortie du déploiement dans un fichier nommé deployment-outputs.json :

    az deployment group show -g $resourceGroupName -n $deploymentName --query "properties.outputs" -o json > deployment-outputs.json
    

Configurer AGIC

Avec les instructions de la section précédente, vous avez créé et configuré un nouveau cluster AKS ainsi qu’un nouveau déploiement Application Gateway. Vous êtes maintenant prêts à déployer un exemple d’application et un contrôleur d’entrée dans votre nouvelle infrastructure Kubernetes.

Configurer les informations d’identification Kubernetes

Pour les étapes suivantes, vous devez configurer la commande kubectl, que vous utiliserez pour vous connecter à votre nouveau cluster Kubernetes. Cloud Shell a kubectl déjà installé. Vous utiliserez az (Azure CLI) pour obtenir des informations d’identification pour Kubernetes.

Obtenez des informations d’identification pour votre instance AKS nouvellement déployée. Pour plus d’informations sur les commandes suivantes, consultez Utiliser Azure RBAC pour l’autorisation Kubernetes avec kubectl.

# use the deployment-outputs.json file 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

Installer une identité de pod Microsoft Entra

L’identité de pod Microsoft Entra offre un accès à base de jeton à Azure Resource Manager.

L’identité de pod Microsoft Entra ajoute les composants suivants à votre cluster Kubernetes :

Pour installer l’identité de pod Microsoft Entra sur votre cluster, utilisez l’une des commandes suivantes :

  • Cluster AKS sur lequel Kubernetes RBAC est activé :

    kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
    
  • Cluster AKS sur lequel Kubernetes RBAC est désactivé :

    kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment.yaml
    

Ajoutez le référentiel Helm.

Helm est un gestionnaire de package pour Kubernetes. Nous l’utilisons pour installer le package application-gateway-kubernetes-ingress.

Si vous utilisez Cloud Shell, vous n’avez pas besoin d’installer Helm. Cloud Shell est fourni avec Helm version 3. Exécutez l’une des commandes suivantes pour ajouter le référentiel Helm AGIC :

  • Cluster AKS sur lequel Kubernetes RBAC est activé :

    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
    
  • Cluster AKS sur lequel Kubernetes RBAC est désactivé :

    helm init
    

Installer le chart Helm du contrôleur d’entrée

  1. Utilisez le fichier deployment-outputs.json que vous avez créé précédemment pour créer les variables suivantes :

    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)
    
  2. Téléchargez helm-config.yaml, qui configure AGIC :

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yaml
    

    Ou copiez le fichier YAML suivant :

    # 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 accessible 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>
    
  3. Modifiez le fichier helm-config.yaml nouvellement téléchargé et renseignez les sections pour appgw et armAuth :

    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
    

    Remarque

    Si vous effectuez un déploiement sur un cloud souverain (par exemple, Azure Government), vous devez ajouter le paramètre de configuration appgw.environment et le définir sur la valeur appropriée.

    Voici les valeurs :

    • verbosityLevel : définit le niveau de verbosité de l’infrastructure de journalisation AGIC. Pour connaître les valeurs possibles, consultez Niveaux de journalisation.
    • appgw.environment : définit l’environnement cloud. Valeurs possibles : AZURECHINACLOUD, AZUREGERMANCLOUD, AZUREPUBLICCLOUD, AZUREUSGOVERNMENTCLOUD.
    • appgw.subscriptionId : ID d’abonnement Azure dans lequel Application Gateway réside. Exemple : aaaa0000-bb11-2222-33cc-444444dddddd.
    • appgw.resourceGroup : nom du groupe de ressources Azure dans lequel vous avez créé le déploiement Application Gateway. Exemple : app-gw-resource-group.
    • appgw.name : nom du déploiement d’Application Gateway. Exemple : applicationgatewayd0f0.
    • appgw.shared : indicateur booléen dont la valeur par défaut est false. Définissez-le sur true si vous avez besoin d’un déploiement d’Application Gateway partagé.
    • kubernetes.watchNamespace : spécifie l’espace de noms que AGIC doit surveiller. La valeur d’espace de noms peut être une valeur de chaîne unique ou une liste d’espaces de noms séparés par des virgules.
    • armAuth.type : peut être aadPodIdentity ou servicePrincipal.
    • armAuth.identityResourceID : ID de ressource de l’identité managée Azure.
    • armAuth.identityClientID : ID client de l’identité.
    • armAuth.secretJSON : nécessaire uniquement lorsque vous choisissez un principal de service comme type de secret (autrement dit, lorsque vous définissez armAuth.type sur servicePrincipal).

    Remarque

    Vous avez créé les valeurs identityResourceID et identityClientID au cours des étapes précédentes pour le déploiement de composants. Vous pouvez à nouveau les obtenir en utilisant la commande suivante :

    az identity show -g <resource-group> -n <identity-name>
    

    Dans la commande, <resource-group> est le groupe de ressources de votre déploiement Application Gateway. L’espace réservé <identity-name> est le nom de l’identité créée. Vous pouvez répertorier toutes les identités d’un abonnement particulier à l’aide de az identity list.

  4. Installer le package AGIC :

    helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.7.5 -f helm-config.yaml
    

Installer un exemple d’application

Maintenant que vous avez installé Application Gateway, AKS et AGIC, vous pouvez installer un exemple d’application via Azure Cloud Shell :

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

Sinon, vous pouvez :

  • Téléchargez le fichier YAML précédent :

    curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
    
  • Appliquez le fichier YAML :

    kubectl apply -f aspnetapp.yaml
    
  • Pour plus d’exemples sur la façon d’exposer un service AKS à Internet via HTTP ou HTTPS à l’aide d’Application Gateway, consultez ce guide pratique.
  • Pour plus d’informations sur Passerelle d’application pour conteneurs, consultez cet article de vue d’ensemble.