Configurer et sécuriser ACR et AKS

Le schéma de l’infrastructure à mettre en place :

Tâche 1 : Créer un Azure Container Registry (ACR)

Premièrement, nous allons créer un groupe de ressources pour y placer toutes nos ressources plus tard (ce sera plus facile à supprimer plus tard quand nous aurons fini notre lab).

Ci-dessous la commande Azure CLI pour créer ce groupe de ressources :

az group create --name AZ500LAB04 --location eastus

Pour vérifier que le groupe de ressources « AZ500LAB04 » a bien été créé (vous pouvez directement vérifier votre portail Azure), tapez la commande ci-dessous :

az group list --query "[?name=='AZ500LAB04']" -o table

Nous allons ensuite créer l’ACR (pour pouvoir déposer notre image docker) :

az acr create --resource-group AZ500LAB04 --name AZ500$RANDOM$RANDOM --sku Basic

Concernant la dernière commande (ci-dessus), nous avons renseigné dans la paramètre –name deux variables $RANDOM$RANDOM pour générer deux nombres aléatoires pour garantir que le nom est unique (les noms de registre doivent être uniques à l’échelle mondiale dans Azure).

Le paramètre –sku spécifie le niveau de tarification pour le registre ACR (Azure Container Registry). la valeur « Basic » est l’option la moins coûteuse, adaptée pour les petits environnements ou projets de développement.

Confirmer que l’ACR a bien été créé, pour ce faire, nous allons lister le contenu de notre groupe de ressources « AZ500LAB044 » :

az acr list --resource-group AZ500LAB04

Le résultat ci-dessous montre que pour le moment, nous n’avons créé qu’une seule ressource et il s’agit de notre ACR (Azure Container Registry):

Tâche 2 : Créer un Dockerfile, construire un conteneur et le pousser vers ACR

Ensuite nous allons créer un Dockerfile, construire l’image et le « pousser » (push) vers notre ACR.

Créons le Dockerfile à l’aide de la commande ci-dessous :

echo FROM nginx > Dockerfile

Une fois le Dockerfile créé, nous allons construire l’image mais avant relevons d’abord le nom de notre ACR, nous pouvons créer avant une variable pour y stocker cette valeur :

ACRNAME=$(az acr list --resource-group AZ500LAB04 --query '[].{Name:name}' -o tsv)

Ensuite nous tapons la commande qui permet de construire l’image et de le pousser directement vers notre repository (ACR):

az acr build --resource-group AZ500LAB04 --image sample/nginx:v1 --registry $ACRNAME --file Dockerfile .

(Attention ! Il y’a bien un point après Dockerfile, pour signifier que le Dockerfile est bien dans le répertoire courant).

Une fois l’image construite et poussé vers l’ACR, retournez dans votre ACR pour vérifier s’il a bien été provisionné. Sur la capture ci-dessous, on voit bien que l’image a bien été déposé sur le repository :

Cliquez ensuite sur l’image (sample/nginx) pour accéder à des informations plus détaillées et nous remarquons que c’est bien la version 1 que nous avons renseigné sur le tag lors de la saisie de la commande build :

Tâche 3 : Créer un service AKS (Azure Kubernetes Service)

Dans cette tâche, nous allons créer un service AKS (Azure Kubernetes Service) et vérifier les ressources déployés :

Sur le portail Azure, tapez sur la barre de recherches : « Kubernetes Services » et tapez sur «  »Entrée« 

Ensuite cliquez sur « +create« , puis, dans le menu déroulant, cliquez sur « Kubernetes cluster« 

Dans l’onglet « Information de base » du panneau « Créer un cluster Kubernetes« , sélectionnez la configuration prédéfinie du cluster, puis sélectionnez « Developpemet/Test« 

Spécifiez les paramètres suivants (Laissez les autres paramètres à leurs valeurs par défaut):

ParamètreValeur
AbonnementNom de votre abonnement Azure
Groupe de ressourcesAZ500LAB04 (Pour mon cas)
Nom du cluster KubernetesMyKubernetesCluster
RégionEastUS
Zone de disponibilitéNone
Méthode de mise à l’échelleManuelle
Nombre de noeuds1

Voici les informations que j’ai saisies pour ma part :

Cliquez sur suivant et désélectionnez « Enable Virtual Nodes »

Si vous avez ce message suivant, changer de configuration matérielle en cliquant sur node size. Ensuite cliquez sur suivant pour accéder à la configuration réseau, laissez tout par défaut et cliquez sur suivant.

Ensuite vous passez à la page des intégrations, laissez également tout par défaut :

Passez tous les paramètres et lancez la création du cluster Kubernetes.

Une fois votre cluster Kubernetes déployé, affichez vos groupes de ressources et vous vous apercecez que vous avez un nouveau groupe de ressources créé, me concernant c’est le groupe de ressources MC_AZ500LAB04_MyKubernetesCluster_eastus qui a été créé. Il contient les composants des noeuds AKS :

Ensuite revenons dans notre groupe de ressources AZ500LAB04 et nous remarquons un certain nombre de composants déployés durant la création de notre cluster Kubernetes :

Ensuite dans une session Bash (du volet Cloud Shell), exécutons la commande suivante pour nous connecter au cluster :

az aks get-credentials --resource-group AZ500LAB04 --name MyKubernetesCluster

La sous-commande get-credentials permet de télécharger et configurer les informations d’identification du Cluster AKS dans notre configuration locale de kubectl (L’outil qui va nous permettre d’interagir avec Kubernetes).

Maintenant listons les nodes de notre cluster Kubernetes en tapant la commande

kubectl get nodes

(nous en voyons deux) :

Tâche 4 : Accorder au cluster AKS les autorisations d’accéder à l’AKS

Dans cette tâche nous allons accorder au cluster AKS l’autorisation d’accéder à l’ACR et de gérer son réseau virtuel:

Dans une session Bash du volet Cloud Shell, nous allons exécuter une commande pour configurer le cluster AKS afin d’utiliser l’intance Azure Container Registry que nous avons créé plus tôt dans ce lab:

Tout d’abord, création de la variable ACRNAME pour récupérer le nom de l’ACR

ACRNAME=$(az acr list --query '[].{Name:name}' -0 tsv)

Ensuite la commande pour permettre au cluster AKS d’accéder à l’ACR (la commande lui attribue aussi le rôle « acrpull » pour pourvoir récupérer les images de l’ACR):

az aks update --name MyKubernetesCluster --resource-group AZ500LAB04 --attach-acr $ACRNAME

Ensuite, toujours dans votre sessions Bash (du Volet Cloud Shell), exécutons la commande pour accorder au cluster AKS le rôle de contributeur sur son réseau virtuel:

RG_AKS=AZ500LAB04

RG_VNET=MC_AZ500LAB04_MyKubernetesCluster_eastus	

AKS_VNET_NAME=aks-vnet-30198516

AKS_CLUSTER_NAME=MyKubernetesCluster

AKS_VNET_ID=$(az network vnet show --name $AKS_VNET_NAME --resource-group $RG_VNET --query id -o tsv)

AKS_MANAGED_ID=$(az aks show --name $AKS_CLUSTER_NAME --resource-group $RG_AKS --query identity.principalId -o tsv)

az role assignment create --assignee $AKS_MANAGED_ID --role "Contributor" --scope $AKS_VNET_ID

Le script ci-dessus accorde au cluster AKS l’autorisation de gérer son propre réseau virtuel en lui attribuant le rôle Contributeur sur le réseau virtuel associé. Cela se fait en récupérant d’abord l’ID du réseau virtuel et l’ID de l’entité managée du cluster, puis en assigant le rôle « Contributeur » sur cette ressource.

Tâche 5 : Déployer un service externe sur AKS

Dans cette tâche, nous allons télécharger les fichiers de Manifest, les éditer et appliquer nos modifications à notre Cluster.

Nous utilisons les deux fichiers suivants : nginxexternal.yaml et nginxinternal.yaml

Dans notre session Bash du volet Cloud Shell, téléversons (uploadons) ces deux fichiers. Pour ce faire cliquez sur « Manage Files » et « Upload » pour y téléverser les fichiers.

Nous allons ensuite commencer à éditer le fichier nginxexternal.yaml

Sur la ligne 24, remplacez le nom de l’image <ACRUniquename>.azure.ip/sample/nginx :v1 par le nom de votre ACR, pour mon cas ce sera par exemple « az500478028379 »

Une fois la modification effectuée, faire un clic droit sur la page et cliquez sur « Save » pour enregistrer votre modification, puis cliquez sur « Quit » pour fermer l’éditeur.

Ensuite dans la session Bash du Cloud Shell, éxecutons la commande suivante pour appliquer les modifications au Cluster :

kubectl apply -f nginxexternal.yaml

Tâche 6 : Vérification d’accès à un service externe hébergé sur AKS

Dans cette tâche, vérifions maintenant que le conteneur est accessible de l’éxtérieur en utilisant l’addresse IP publique.

Pour ce faire dans la session Bash du volet Cloud Shell, exécutons la commande suivante pour récupérer des informations sur le service nginxexternal, y compris le nom, le type, les addresses IP et les ports :

kubectl get service nginxexternal

Examinez ensuite la sortie et notez la valeur dans la colonne EXTERNAL-IP, nous en aurons besoin dans l’étape suivante (pour mon cas, ce sera par exemple l’IP 20.237.13.206

Ouvrons ensuite un nouvel onglet sur notre navigateur internet et tapons l’adresse IP que nous avons identifiée à l’étape précédente. Nous devrions voir cette page affichée ci-dessous :

Tâche 7 : Déployer un service interne sur AKS

Editons maintenant le fichier nginxinternal.yaml et modifions le nom de l’ACR comme nous l’avons fait précédemment avec le fichier nginxexternal.yaml

Toujours dans la session Bash, exécutons la commande suivante pour appliquer les modifications au Cluster :

kubectl apply -f nginxinternal.yaml

Exécutons ensuite la commande ci-dessous pour récupérer les informations sur le service nginxinternal, y compris le nom, le type, les addresses IP et les ports :

Examinons la sortie, l’EXTERNAL-IP si elle est dans un état <pending>, exécutez à nouveau la même commande, vous devriez obtenir ceci :

Ici nous pouvons noter l’adresse IP qui est 10.224.0.6. Pour accéder au point de terminaison du service interne, nous nous connecterons de manière interactive à l’un des pods en cours d’exécution dans le cluster.

Tâche 8 : Vérification d’accès à un service interne hébergé sur AKS

Nous allons maintenant utiliser l’un des pods en cours d’exécution sur notre Cluster AKS pour accéder au service interne.

Dans notre session Bash (Volet Cloud Shell), exécutons la commande suivante pour lister les pods dans l’espace de noms par défaut sur le cluster AKS :

kubectl get pods

Dans la liste des pods, copions la deuxième entrée de la colonne NAME et tapons la commande ci-dessous pour nous connecter de manière interactive au pod :

kubectl exec -ti nginxinternal-666cd94f6-pvczf --/bin/bash

Nous sommes à l’intérieur du pod et nous pouvons taper la commande suivante pour récupérer la page html de nginx :

curl http://10.0.7.46

Nous avons finalisé le lab.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *