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.
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 :
az
: Azure CLI (instructions d’installation)kubectl
: outil en ligne de commande Kubernetes (instructions d’installation)helm
: gestionnaire de package Kubernetes (instructions d’installation)jq
: processeur JSON en ligne de commande (instructions d’installation)
Créer une identité
Procédez comme suit pour créer un objet principal de service Microsoft Entra.
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
etpassword
à partir de la sortie JSON. Vous les utiliserez dans les étapes suivantes.Utilisez la valeur
appId
de la sortie de la commande précédente pour récupérer leid
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.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
surtrue
.
Déployer des composants
La procédure suivante ajoute ces composants à votre abonnement :
- Azure Kubernetes Service (AKS)
- Azure Application Gateway v2
- Réseau virtuel Azure avec deux sous-réseaux
- Adresse IP publique
- Identité managée, qui sera utilisée par l’identité de pod Microsoft Entra.
Pour déployer les composants :
Téléchargez le modèle ARM :
wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
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
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 :
- Définitions de ressources personnalisées (CDR) Kubernetes :
AzureIdentity
,AzureAssignedIdentity
,AzureIdentityBinding
- Composant MIC (Managed Identity Controller)
- Composant NMI (Node Managed Identity)
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
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)
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>
Modifiez le fichier
helm-config.yaml
nouvellement téléchargé et renseignez les sections pourappgw
etarmAuth
: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 :aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
.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 estfalse
. Définissez-le surtrue
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 êtreaadPodIdentity
ouservicePrincipal
.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éfinissezarmAuth.type
surservicePrincipal
).
Remarque
Vous avez créé les valeurs
identityResourceID
etidentityClientID
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 deaz identity list
.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
Contenu connexe
- 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.