J’ai été confronté à un problème de manière aléatoire sur quelques machines virtuelles d’un cluster vSphere. Ce problème se traduisait par une perte de connectivité réseau : les machines virtuelles étaient incapables de joindre leur gateway et de communiquer avec d’autres machines du même VLAN. Une manière temporaire de rétablir la connectivité réseau était de réaliser un vMotion sur la machine virtuelle afin de la déplacer sur un autre hôte.
De nombreuses manipulations ont été tentées sur ces machines pour tenter de garder une connectivité durable : changement de type de carte réseau, création de nouvelle machine avec rattachement des disques virtuels, changement d’adresse MAC, etc. mais sans succès.
Les 2 hôtes vSphere formant le cluster ont chacun 4 interfaces physiques : 2 pour les machines virtuelles, une pour le management network et la dernière pour le vMotion. Sur ces deux dernières interfaces, seul un VLAN était déclaré côté switch physique.
En regardant du côté des vSwitch positionnés sur chaque hôte, il apparaissait qu’en fait les VLAN déclarés sur vSphere étaient poussés sur toutes les interfaces physiques (vmnic) du serveur. Cette configuration pouvait donc faire qu’une machine située sur le VLAN « PROD_CLIENT » tentait de communiquer sur les 2 interfaces qui n’avaient pas ce VLAN de déclaré côté switch physique.
Explications : considérons un serveur avec 4 interfaces (vmnic0 à vmnic3) branchées sur les ports 1, 2, 3 et 4 d’un switch. Les ports 1 et 2 (branchés sur vmnic0 et vmnic1) donnent accès au VLAN « ADMIN » tandis que les ports 3 et 4 (branchés sur vmnic2 et vmnic3) donnent accès aux VLAN « PROD_CLIENT », « PROD_INTERNE », « RE7_CLI », « RE7_INT ». Côté vSphere, ces VLAN sont visibles et peuplés ; seulement ils doivent être configurés sur les bonnes interfaces. Si le VLAN « PROD_CLIENT » était accessible sur vmnic2 et vmnic3 puisqu’il est disponible sur les ports 3 et 4 du switch, il ne l’était pas sur les ports 1 (vmnic0) ni 2 (vmnic1). Or, ce VLAN était configuré sur ESXi pour utiliser les 4 interfaces physiques.
Étant donné que ce VLAN utilisait des interfaces sur lesquelles il était injoignable côté switch physique, lorsque vSphere faisait passer le trafic réseau de la VM sur ces interfaces les machines devenaient de ce fait inaccessibles et incapables de joindre leur passerelle. Un redémarrage complet de la machine virtuelle (et non pas uniquement l’OS invité) pouvait résoudre le souci temporairement puisque vSphere réinscrit la carte réseau virtuelle sur une des interfaces sur lesquelles le VLAN en question était accessible (dans notre exemple, vmnic2 ou vmnic3). La même action de réinscription se faisait dans le cadre d’un déplacement d’hôte, puisque la VM passait sur un autre hôte physique, avec d’autres cartes physiques ; cependant le dysfonctionnement persistait puisque l’autre hôte du cluster était configuré de la même manière.
Afin de résoudre le dysfonctionnement, il a donc fallu déplacer les vmnic0 et vmnic1 dans les adaptateurs inutilisés pour les VLAN « PROD_CLIENT », « PROD_INTERNE », « RE7_CLI » et « RE7_INT ». Ainsi, le trafic des VM configurées sur ces réseaux passent désormais uniquement via vmnic2 et vmnic3 et le problème est résolu.