Lors d’une session de formation partenaire chez Nutanix, un problème a fréquemment été soulevé par de nombreux consultants présents : le non-fonctionnement de l’option de déploiement automatique en masse des Nutanix Guest Tools (NGT) via Prism Central. Ce sujet est crucial car le déploiement des NGT est souvent une étape essentielle dans l’optimisation des environnements Nutanix.

La nécessité d’utiliser le port 2074 pour la communication réseau est bien connue, car avant la version AOS 6.6, les machines virtuelles (VMs) avaient besoin de communiquer avec les Controller VMs (CVMs) via ce port, ce qui pouvait représenter une contrainte significative dans certains environnements.

Cependant, il existe également des prérequis spécifiques liés au système d’exploitation invité (Guest OS) qui ne sont pas toujours clairement indiqués. Bonne nouvelle : ces contraintes sont allégées avec la sortie de la version AOS 6.6.

Pour ceux qui déploient des serveurs Windows, il y a une autre considération technique à prendre en compte : Windows Remote Manager Service (WinRM). Selon la documentation officielle de Nutanix :

Note: Windows Remote Manager Service (winrm) is required to install NGT from Prism Central only. It is not required when you upgrade NGT or install NGT manually by logging in to the guest VM.

Cependant, ce qui n’est pas forcément évident, c’est le détail du protocole de communication que WinRM utilise. Comme indiqué dans la base de connaissances de Nutanix sur “How To Configure WinRM for Remote Management“, Windows est configuré par défaut pour utiliser le protocole HTTP, qui opère sur le port 5985. Or, Prism Central s’attend à une communication sur le port 5986, qui utilise le protocole HTTPS, plus sécurisé.

Ce petit détail peut être source de complications lors de tentatives de déploiement automatique de NGT depuis Prism Central. Il est donc essentiel de configurer WinRM pour utiliser HTTPS afin d’assurer une communication fluide et sécurisée.

Mais comme indiqué dans la KB How To Configure WinRM for Remote Management, par défaut Windows est configuré en HTTP qui correspond au port 5985, mais comme vous pouvez le voir sur le tableau du dessus, Prism s’attend à communiquer sur le port 5986 donc en HTTPS.

Toutes les commandes de cet article sont exécutées depuis une invite PowerShell élevée.

Solution : Configurer le transport HTTPS

  1. Lancez PowerShell en tant qu’administrateur.
  2. Listez la configuration WinRM actuelle. Par défaut (nouvelle installation), seul le listener HTTP doit être configuré PS C:\> winrm e winrm/config/listener
  3. Liste des sockets ouverts. Par défaut (nouvelle installation), vous devriez voir le port 5985 en écoute : PS C:\> netstat -na | findstr 598 Vous devriez avoir un listener HTTP configuré avec les paramètres par défaut et le port 5985 en écoute.
  4. Autoconfigurez WinRM. Cela réinitialise le listener HTTP existant aux paramètres par défaut et effectue d’autres opérations de configuration nécessaires. PS C:\> winrm quickconfig
  5. Activez l’authentification de base pour WinRM PS C:\> winrm set winrm/config/service/auth "@{Basic=""true""}"
  6. Créez un certificat SSL auto-signé et configurez le transport HTTPS de WinRM. Les trois commandes ci-dessous se basent les unes sur les autres.
    • PS C:\> $my_hostname = [system.net.dns]::gethostname()
    • PS C:\> $my_certificate = new-selfsignedcertificate -dnsname $my_hostname -certstorelocation cert:\localmachine\my
    • PS C:\> winrm create winrm/config/listener?address=*+transport=https "@{hostname=""$my_hostname"";certificatethumbprint=""$($my_certificate.thumbprint)""}"
  7. Validez à nouveau avec PS C:\> winrm e winrm/config/listener PS C:\> netstat -na | findstr 598 Vous devriez maintenant avoir des listeners HTTP et HTTPS configurés avec les paramètres par défaut et les ports 5985 et 5986 en écoute.
  8. Validez et/ou configurez le pare-feu Windows pour autoriser les connexions entrantes.
    • Expérimentez et déterminez pour quel(s) profil(s) vous souhaitez autoriser l’accès. Pour cet article, les commandes ci-dessus ajoutent les règles aux trois profils.
    • Liste des règles de pare-feu existantes. Recherchez les règles répertoriées pour les ports 5985 et 5986 et vérifiez qu’elles sont activées pour tous les profils
    • PS C:\> Get-NetFirewallPortFilter -Protocol TCP | Where { $_.localport -match '598' } | Get-NetFirewallRule
    • Si les ports de l’étape précédente sont absents, ajoutez l’une ou l’autre des nouvelles règles de pare-feu ci-dessous (en fonction de ce qui manque ci-dessus)
      • PS C:\> New-NetFirewallRule -name "Windows Remote Management (HTTP-In)" -displayname "Windows Remote Management (HTTP-In)" -description "Règle entrante pour la gestion à distance de Windows via WS-Management. [TCP 5985]" -group "Gestion à distance de Windows" -Program "System" -protocol TCP -localport "5985" -action Allow -profile Domaine,Privé,Public
      • PS C:\> New-NetFirewallRule -name "Windows Remote Management (HTTPS-In)" -displayname "Windows Remote Management (HTTPS-In)" -description "Règle entrante pour la gestion à distance de Windows via WS-Management. [TCP 5986]" -group "Gestion à distance de Windows" -Program "System" -protocol TCP -localport "5986" -action Allow -profile Domaine,Privé,Public
    • Vous devriez maintenant avoir des listeners HTTP et HTTPS configurés avec les paramètres par défaut et les ports 5985 et 5986 en écoute. Utilisez l’étape 1 ci-dessus pour valider l’ajout de ces règles après avoir exécuté ces éléments.

Une fois WinRM correctement configuré pour accepter les demandes HTTPS, les obstacles au déploiement de NGT via Prism Central devraient être significativement réduits. Assurez-vous simplement de respecter les autres prérequis systèmes et réseau, même si WinRM est souvent le point bloquant dans ce processus.

Astuce : Le port 5986 doit être ouvert pour permettre la communication HTTPS entre Prism Central et les serveurs Windows.

Pour les administrateurs qui déploient NGT sur des serveurs Linux, la tâche est généralement plus simple. Le seul prérequis clé est l’ouverture du port 22, ce qui facilite grandement le processus de déploiement.

Depuis Prism Element :

ncli multicluster remove-from-multicluster external-ip-address-or-svm-ips=pc-name-or-ip username=pc-username password=pc-password force=true
nutanix@cvm$ ncli multicluster get-cluster-state

Récupérer l’uuid.

nutanix@cvm$ ncli cluster info

Depuis PC :

nutanix@pcvm$ python /home/nutanix/bin/unregistration_cleanup.py uuid

Récupérer l’uuid.

nutanix@pcvm$ ncli cluster info

Depuis PE:

nutanix@cvm$ python /home/nutanix/bin/unregistration_cleanup.py uuid

D’aussi loin que je me souvienne, il y a toujours eu un mécanisme de gestion d’images sur Nutanix. On pouvait y ajouter des ISO, mais aussi des disques. On pouvait aussi préparer une VM pour s’en servir de template et la cloner.

J’ai souvent proposé cette méthode à mes clients pour maintenir à jour une VM qu’on considérait comme un template, et qu’on nommait comme tel pour l’identifier. Le détail de cette méthode est documenté dans la KB8814 – How to create VM template on AHV cluster.

Lors de la création de VM, on a aussi la section Custom Script qui permet la réalisation des opérations de customisations sur la machine avec un script :

Maintenant, ces options de personnalisations sont intégrées dans une fonctionnalité Template apparu avec Prism Central 2022.1.

Depuis la vue VM de Prism Central, sélectionner la VM qui vous intéresse, puis dans le menu du clic droit choisir Create VM Template :

Choisir un nom et une description. C’est la section Guest Customization qui ajoute des options intéressantes en fonction de l’OS :

Pour Windows ce sera Sysprep et pour Linux Cloud-init. Chaque type de script pourra soit être utilisé avec un script personnalisé, soit utiliser la configuration guidée pour choisir les informations de login – mot de passe ou clé SSH, les paramètres régionaux, le nom de l’hôte, la jonction au domaine et la clé de licence.

Exemple de Guide Script pour Windows :

Toujours pour Windows, je vous conseille le site Windows Answer File Generator qui permet de créer simplement un fichier unattend.xml que vous pourrez utiliser dans Custom Script :

Exemple Linux de Guided Script :

Pour Linux, de nombreux exemples sont disponibles sur cloudinit.readthedocs.io dans la section Exemples. Cela vous donnera une idée des énormes possibilités de personnalisation :
Une fois les personnalisations définies, on arrive sur un résumé puis on peut sauvegarder le template.

Depuis le menu Templates de Prism Central, nous allons pouvoir déployer des VM depuis notre template récemment créé :

Je donne un nom à la ou les futures VM, je sélectionne le cluster de destination du déploiement, j’indique le nombre de machines à déployer et, le cas échant, l’index de numérotation initial pour l’incrémentation :

Pour l’exemple d’après, je sélectionne l’option Advanced Deploy :

Le menu propose maintenant de personnaliser les ressources CPU et Mémoire :

Puis de modifier l’emplacement réseau. Il est possible de fixer une IP statique si on ne crée qu’une VM à la fois :

Dans la 3e partie, on peut revoir les catégories associées (il faut que la VM qui a servi pour le template soit déjà dans une catégorie) et la timezone, si cela est permis, on peut modifier le script de customisation :

Apres avoir cliqué sur Deploy, une tâche est créé et le provisionnement des VM débute:

Dernier point intéressant : depuis le menu Templates, sélectionner le template à modifier, puis, dans le menu Actions deux options sont disponibles :

Update Guest OS permet de mettre à jour la VM, pour installer des mises à jour de sécurité, par exemple ou pour le déploiement de nouveaux programmes. L’option permet de déployer une machine, de l’éditer, puis d’apporter les modifications au template :

Je mets à jour la machine, puis je l’éteins.

Je retourne dans le menu Templates de Prism Central et, je sélectionne le template que je viens d’éditer. Il est facilement repérable car il a le statut Update Initiated

Je choisis si je conserve les modifications en cliquant sur Complete Guest OS Update, ou si les annule avec Cancel Guest OS Update :

En choisissant Complete Guest OS Update, je donne un nouveau nom de version, une description claire de ce que j’ai réalisé dans la machine et j’active ce nouveau template:

La version active du template est mise à jour avec nos dernières modifications :

L’autre option du menu Actions consiste à changer les paramètres du template avec Update Configuration :

Ces nouveaux paramètres peuvent s’appliquer soit à la version active soit à n’importe quelle version précédente du template permettant leur réactivation. Ils concernent toutes les étapes, de 1 à 4, de création du template:

Voilà qui conclut notre tour d’horizon des templates à la sauce Nutanix, n’hésitez pas à partager l’article sur les réseaux s’il vous a aidé à y voir plus clair.