<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tinc on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/tinc/</link><description>Recent content in Tinc on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Mon, 17 Feb 2020 07:30:00 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/tinc/index.xml" rel="self" type="application/rss+xml"/><item><title>Créer un VPN distribué avec Tinc</title><link>https://blog.zwindler.fr/2020/02/17/creer-un-vpn-distribue-avec-tinc/</link><pubDate>Mon, 17 Feb 2020 07:30:00 +0000</pubDate><guid>https://blog.zwindler.fr/2020/02/17/creer-un-vpn-distribue-avec-tinc/</guid><description>&lt;img src="https://blog.zwindler.fr/2020/03/airwolf03.webp" alt="Featured image of post Créer un VPN distribué avec Tinc" /&gt;&lt;h2 id="faire-un-vpn-tinc-fullmesh-sans-monter-un-gros-réseau-ipsec"&gt;Faire un VPN Tinc fullmesh sans monter un gros réseau IPSec
&lt;/h2&gt;&lt;p&gt;Un des gros problèmes que j’ai rapidement eu à régler lorsque j’ai voulu monter des clusters de serveurs Proxmox VE chez des providers de serveurs physiques, c’est la façon dont est gérée le clustering dans PVE.&lt;/p&gt;
&lt;p&gt;Les concepteurs de PVE ne veulent pas que l’on monte des clusters sur Internet et mettent volontairement le plus de bâtons dans les roues pour vous empêcher de le faire. J’exagère à peine.&lt;/p&gt;
&lt;p&gt;En version 5.x, PVE se basait sur la version 2 de corosync par multicast (bloqué par tous les providers) et qu’en v6.x, on nous bride en demandant explicitement un sous réseau LAN dédié, autant dire qu’on est pas aidé.&lt;/p&gt;
&lt;h2 id="openvpn-vs-tinc"&gt;OpenVPN vs Tinc
&lt;/h2&gt;&lt;p&gt;Une solution que j’ai expérimenté est de monter un serveur OpenVPN sur un des serveurs et de connecter les autres dessus. J’ai d’ailleurs &lt;a class="link" href="https://blog.zwindler.fr/2017/08/29/faire-un-petit-cluster-proxmox-avec-2-machines-kimsufi/" &gt;fait un tuto là dessus pour PVE&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cette approche n’est pas optimale : si on a 2 machines, c’est bon, mais si on en a 3 ou plus, on se retrouve soit avec un SPOF, soit à devoir monter un maillage complexe de couples serveur-client. Au delà de 3, c’est pratiquement ingérable.&lt;/p&gt;
&lt;p&gt;Au contraire, &lt;a class="link" href="https://www.tinc-vpn.org/" target="_blank" rel="noopener"
&gt;Tinc&lt;/a&gt; est un logiciel libre (GPLv2) permettant de monter des VPNs multipoints (full mesh routing) entre des machines sur Internet. Tinc est &lt;em&gt;prévu&lt;/em&gt; pour notre cas d’usage !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/02/tinclogo.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;le vrai logo de Tinc (la photo en haut du blog c’est Supercopter, of course)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="on-sécurise"&gt;On sécurise
&lt;/h2&gt;&lt;p&gt;Comme tout service &amp;ldquo;ouvert&amp;rdquo; sur Internet, il est évidemment nécessaire de faire du firewalling pour bloquer le trafic malveillant. Pour information, Tinc utilise le port 655 en TCP et UDP, que vous devrez donc ouvrir dans les deux sens entre l’ensemble de vos serveurs, mais bloquer pour le reste d’Internet.&lt;/p&gt;
&lt;p&gt;A noter, ce n’est pas confirmé mais &lt;a class="link" href="https://tinc-vpn.org/" target="_blank" rel="noopener"
&gt;la page principale de Tinc&lt;/a&gt; indique qu’il est possible que ce logiciel (tout comme OpenVPN, Wireguard et IPSec) soit vulnérable à la &lt;a class="link" href="https://seclists.org/oss-sec/2019/q4/122" target="_blank" rel="noopener"
&gt;CVE-2019-14899&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="on-linstalle-et-on-le-configure"&gt;On l’installe et on le configure
&lt;/h2&gt;&lt;p&gt;On va devoir installer le package/binaire sur toutes les machines du VPN. Pas trop de soucis de ce côté, tinc est &lt;a class="link" href="https://www.tinc-vpn.org/download/" target="_blank" rel="noopener"
&gt;multiplateforme (Windows aussi) et est packagé dans de nombreuses distrib Linux&lt;/a&gt;. Sur les dépôts Debian, tinc est présent sans souci et j’imagine que ça sera le cas pour d’autres distribs aussi.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apt install tinc
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Une fois installé, on peut créer notre VPN. Pour déclarer un VPN, il faut ajouter le nom de celui ci dans un fichier de configuration global :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;echo &amp;#34;vpnzwindler&amp;#34; &amp;gt;&amp;gt; /etc/tinc/nets.boot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On créé ensuite un répertoire du même nom, contenant lui même un dossier &lt;em&gt;hosts&lt;/em&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mkdir -p /etc/tinc/vpnzwindler/hosts
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans ces dossiers, on va créer fichier de configuration, /etc/tinc/vpnzwindler/tinc.conf. Ce fichier va nous permettre de décrire le node courant et qui doit se connecter à qui.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Name = node01
AddressFamily = ipv4
Address = 1.1.1.1
Device = /dev/net/tun
Mode = switch
ConnectTo = node02
ConnectTo = node03
ConnectTo = node04
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans les informations importantes, &lt;strong&gt;Name&lt;/strong&gt; va être le nom (arbitraire) du node pour tout le VPN, &lt;strong&gt;Address&lt;/strong&gt; représente l’adresse IP publique de votre node, et &lt;strong&gt;ConnectTo&lt;/strong&gt;, la liste des autres &lt;strong&gt;Names&lt;/strong&gt; des autres nodes.&lt;/p&gt;
&lt;p&gt;A partir de là, on peut demander à tinc de nous générer des couples clé publique/clé privée pour tous nos serveurs. Sur tous les nodes du VPN, lancer :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;echo -e &amp;#39;\n\n&amp;#39; | tincd -n vpnzwindler -K4096
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Si tout se passe bien et que tous les fichiers de conf et dossiers ont été créés correctement, &lt;em&gt;tinc&lt;/em&gt; devrait créer un couple clé privée/clé publique, puis créer un fichier /etc/tinc/vpnzwindler/hosts/node01 (sur celui dont le Name est node01).&lt;/p&gt;
&lt;p&gt;Envoyez (par scp par exemple) l’ensemble des fichiers dans le dossier hosts sur tous les serveurs. Maintenant, tous les VPNs sauront quelle IP publique contacter et avec quel clé authentifier le trafic.&lt;/p&gt;
&lt;h2 id="autre-méthode--tinc-invite--tinc-join"&gt;Autre méthode : tinc invite / tinc join
&lt;/h2&gt;&lt;p&gt;Une feature sympa de &lt;em&gt;tinc&lt;/em&gt;, mais seulement en 1.1 (la dernière version), est la possibilité d’ajouter des nodes à un VPN existants via une simple commande tinc invite (&lt;a class="link" href="https://www.tinc-vpn.org/documentation-1.1/How-invitations-work.html#How-invitations-work" target="_blank" rel="noopener"
&gt;voir la doc&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Je ne l’ai pas testée mais a priori tinc créé une URL qui permet d’inviter n’importe qui et de configurer son node avec un tinc join.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The whole URL is around 80 characters long and looks like this: server.example.org:12345/cW1NhLHS-1WPFlcFio8ztYHvewTTKYZp8BjEKg3vbMtDz7w4&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="configuration-du-réseau-de-los"&gt;Configuration du réseau de l’OS
&lt;/h2&gt;&lt;p&gt;Maintenant qu’on a tous les prérequis, on peut configurer l’aspect réseau de notre VPN. Ça dépend de votre distribution bien sûr (où dans le cas de PVE, si vous utilisez OpenVSwitch ou pas par exemple). Dans le cas d’une Debian récente, on va gérer tout ça avec ip.&lt;/p&gt;
&lt;p&gt;Pour gérer cette partie, Tinc va vous demander de créer 2 scripts. Un tinc-up.sh et un tinc-down.sh, respectivement pour le démarrage et l’extinction de l’interface VPN.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /etc/tinc/vpnzwindler/tinc-up
#!/bin/bash
/sbin/ip link set vpnzwindler up
/sbin/ip addr add 10.0.0.1/24 dev vpnzwindler
/sbin/ip route add 10.0.0.0/24 dev vpnzwindler
cat /etc/tinc/vpnzwindler/tinc-down
#!/bin/bash
/sbin/ip link set vpnzwindler down
chmod +x tinc-*
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Rien de bien compliqué ici, on demande au binaire ip de créer une interface vpnzwindler. Puis on lui affecte l’IP virtuelle 10.0.0.1 (notre node01). Enfin d’ajouter une route pour que tout le trafic du VPN passe par cette interface.&lt;/p&gt;
&lt;h2 id="on-le-démarre"&gt;On le démarre
&lt;/h2&gt;&lt;p&gt;Dernière étape, on va demander à systemd de nous démarrer le vpn qu’on vient de créer dès le démarrage de la machine.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl daemon-reload
systemctl enable tinc@vpnzwindler
systemctl start tinc@vpnzwindler
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et voilà !!! Vous avez maintenant un VPN multipoint simple et efficace !&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;root@node01 ~ # ping node02
PING node02 (10.0.0.2) 56(84) bytes of data.
64 bytes from node02 (10.0.0.2): icmp_seq=1 ttl=64 time=17.1 ms
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Changement de provider, mon hyperviseur sur un dédié Hetzner</title><link>https://blog.zwindler.fr/2019/11/19/changement-de-provider-mon-hyperviseur-sur-un-dedie-hetzner/</link><pubDate>Tue, 19 Nov 2019 07:30:00 +0000</pubDate><guid>https://blog.zwindler.fr/2019/11/19/changement-de-provider-mon-hyperviseur-sur-un-dedie-hetzner/</guid><description>&lt;img src="https://blog.zwindler.fr/2019/11/Hetzner_DCP_Luftbild.webp" alt="Featured image of post Changement de provider, mon hyperviseur sur un dédié Hetzner" /&gt;&lt;h2 id="au-revoir-oneprovider-bonjour-hetzner"&gt;Au revoir OneProvider, bonjour Hetzner
&lt;/h2&gt;&lt;p&gt;Certains d’entre vous m’ont peut être vu me plaindre de OneProvider et plus particulièrement le support avec qui j’ai eu plusieurs accrochages (Spoiler, j’ai migré vers Hetzner).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/tweet_op.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Sans rentrer dans les détails (j’ai échangé avec certains d’entre vous sur le sujet), après cette déconvenue, j’ai donc cherché une alternative pour héberger mes machines.&lt;/p&gt;
&lt;p&gt;Les prérequis étaient d’avoir :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une machine physique&lt;/li&gt;
&lt;li&gt;avec suffisamment de RAM (minimum 8 Go, 16 c’est mieux)&lt;/li&gt;
&lt;li&gt;idéalement, une gestion des réseaux virtuels entre machines du provider (type RPN ou vRack)&lt;/li&gt;
&lt;li&gt;si possible pas un ATOM en CPU (le souci de l’ATOM, c’est que c’est tellement faiblard que ça pénalise les IO)&lt;/li&gt;
&lt;li&gt;si possible du VT-x (je n’en ai pas besoin d’en l’absolu, je vais surtout du LXC, mais ça peut dépanner)&lt;/li&gt;
&lt;li&gt;si possible du SSD parce que c’est quand même cool&lt;/li&gt;
&lt;li&gt;si possible 2 disques pour avoir du RAID ou que je puisse me faire un équivalent (ZFS/ZRAID)&lt;/li&gt;
&lt;li&gt;un prix pas trop élevé (genre pas OVH) car j’ai été mal habitué avec les prix agressifs de OneProvider (oui je sais, je l’ai payé avec le support)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="létat-du-marché"&gt;L’état du marché
&lt;/h2&gt;&lt;p&gt;Chez OneProvider, j’avais tout ça pour environ 20-25 euros / mois, à l’exception du réseaux privé virtuel entre machine.&lt;/p&gt;
&lt;p&gt;Autant dire qu’on est très loin du premier prix de chez OVH (&amp;gt;60€/mois TTC). Si on descend en gamme chez OVH, on perd le réseau privé virtuel entre machines (vRack) en passant chez SoYouStart et pourtant on est toujours à plus de 42€ / mois TTC. Toujours 2 fois plus cher que OneProvider :-/.&lt;/p&gt;
&lt;p&gt;Il faut descendre encore de gamme et passer chez Kimsufi pour trouver des prix comparables dans mes critères (et toujours pas de réseau privé virtuel), avec de vieux CPU et surtout un réseau bridé au 100 Mbps (ce qui est pénible pour les transferts de gros fichiers, les réplications de VMs et les sauvegardes).&lt;/p&gt;
&lt;p&gt;J’avais aussi jeté un œil côté Online.net, qui eux proposent sur certaines machines identiques à celles que j’avais avec EN PLUS le graal, un réseau privé virtuel entre dédiés (RPN).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/11/online.net_.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ces deux configs me disaient vraiment quelque chose&amp;hellip; et pour cause ! OneProvider les revends en marque blanche.&lt;/p&gt;
&lt;p&gt;Donc c’est exactement les mêmes machines que celle que j’ai pu avoir dans le passé, mais avec le RPN en plus, et un peu plus cher (beaucoup plus cher même).&lt;/p&gt;
&lt;p&gt;Ce qui est dommage ici, c’est que le RPN ne soit pas disponible sur les machines un peu plus petites (mon PRA n’est pas aussi gros, juste de quoi faire tourner le blog en cas de gros crash).&lt;/p&gt;
&lt;h2 id="vient-alors-hetzner"&gt;Vient alors Hetzner
&lt;/h2&gt;&lt;p&gt;Ça fait pas mal de fois que je voyais circuler le nom. Des bloggeurs et d’autres confrères en disaient beaucoup de bien, et j’ai voulu aller voir. La première chose intéressante est que Hetzner, comme OVH et Online, &lt;a class="link" href="https://wiki.hetzner.de/index.php/Vswitch/en" target="_blank" rel="noopener"
&gt;propose bien un service de type réseau privé virtuel entre vos serveurs&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/11/hetzner_vswitch.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="plus-de-puissance-chez-hetzner-"&gt;Plus de puissance chez Hetzner !
&lt;/h2&gt;&lt;p&gt;Par contre, quand j’ai vu les machines&amp;hellip; au début je me suis dis que ça allait pas le faire&amp;hellip;&lt;/p&gt;
&lt;p&gt;Voilà leur machine &amp;ldquo;bas de gamme&amp;rdquo; :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/11/hetzner.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour à peine plus que le moins cher des SoYouStart (un vieux Xeon E3 v2 4c/4t avec 16Go de RAM et 2 HDD), vous avez un tout nouveau Ryzen 5 6c/12t, 64 Go de RAM et un RAID de 2 SSD NVMe de 512 Go.&lt;/p&gt;
&lt;p&gt;Bon clairement on était hors budget mais ils avaient piqué ma curiosité avec leurs config fofolles.&lt;/p&gt;
&lt;p&gt;Et je suis donc tombé en fouillant un peu sur leur &amp;ldquo;server auction&amp;rdquo;, qui est ni plus ni moins que les serveurs de leurs anciennes gammes qu’ils louent à nouveau. Et là c’était déjà plus proche de mon besoin.&lt;/p&gt;
&lt;p&gt;Pour un peu plus de 30€/mois soit 50% plus que mon serveur précédent, mais comparable au prix Online, j’ai un i7-4770, 32 Go de RAM et 2 disques &amp;ldquo;Entreprise&amp;rdquo;. Soit beaucoup mieux que la machine chez Online.&lt;/p&gt;
&lt;p&gt;Quitte à changer, j’ai donc tenté Hetzner et commandé un serveur.&lt;/p&gt;
&lt;h2 id="cest-puissant-mais-quest-ce-que-cest-moche"&gt;C’est puissant mais&amp;hellip; qu’est ce que c’est moche
&lt;/h2&gt;&lt;p&gt;Bon, l’UI n’est pas follement attrayante. C’est&amp;hellip; spartiate.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/11/hetzner0-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans le menu &amp;ldquo;Servers&amp;rdquo;, vous avez une bête liste de vos serveurs avec le numéro de commande, un hostname (une fois que vous l’aurez setté) et un ID (peu parlant). Bof pratique, surtout au début ou si vous en avez beaucoup.&lt;/p&gt;
&lt;p&gt;Et quand on sélectionne un serveur, ce n’est malheureusement guère mieux. Les informations importantes éclatées dans un nombre incalculable de menus.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/11/hetzner_rescue.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Bref, côté expérience utilisateur, on repassera. Cependant, tout ce qu’il faut pour bien administrer son serveur est là. On finira par s’y retrouver avec un peu d’habitude&amp;hellip;&lt;/p&gt;
&lt;h2 id="installation-de-lhyperviseur"&gt;Installation de l’hyperviseur
&lt;/h2&gt;&lt;p&gt;Pour installer notre serveur, on peut utiliser l’interface web pour installer un Debian, ou passer par l’image de rescue.&lt;/p&gt;
&lt;p&gt;J’ai préféré utiliser la 2ème solution, car elle est immédiatement disponible à la livraison du serveur, avec votre clé SSH.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/11/hetzner1-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On arrive sur un login on ne peut plus classique, avec un résumé des caractéristiques de vos serveurs.&lt;/p&gt;
&lt;p&gt;Point intéressant, il existe un binaire &lt;em&gt;installimage&lt;/em&gt; sur l’OS rescue de Hetzner. Il permet, comme son nom l’indique, d’installer une image.&lt;/p&gt;
&lt;p&gt;Comme j’utilise Proxmox VE comme hyperviseur, j’ai donc installé une Debian 10 :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/11/hetzner_installimage1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois l’image de base choisie, vous allez arriver à un éditeur de texte. Il va vous permettre de configurer de manière plus fine votre installation. Je trouve cette méthode assez originale. Ça change des interfaces webs pas toujours stables vous demandant la taille de vos partitions pour finalement planter dès que vous demandez un truc non standard.&lt;/p&gt;
&lt;p&gt;Ici tout a très bien marché, j’ai configuré le hostname, ainsi qu’un RAID soft et un partitionnement LVM.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/11/hetzner_installimage3-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Là encore, je suis navré qu’on tombe dans le cliché, mais si ce n’est pas &amp;ldquo;joli&amp;rdquo; ni &amp;ldquo;user friendly&amp;rdquo;, au moins c’est efficace.&lt;/p&gt;
&lt;h2 id="passer-de-debian-10-à-proxmox-ve-6"&gt;Passer de Debian 10 à Proxmox VE 6
&lt;/h2&gt;&lt;p&gt;Une fois validé, l’image Debian 10 a été copié extrêmement rapidement (une ou deux minutes). Forcément, c’est une &amp;ldquo;minimal&amp;rdquo;. Mais bon c’est quand même agréable d’avoir son serveur &amp;ldquo;up and running&amp;rdquo; en moins d’une demie heure entre la commande et la fin de l’installation.&lt;/p&gt;
&lt;p&gt;Reste donc à installer PVE 6 sur notre dédié Hetzner. Sans trop de surprise, j’ai réutilisé mon playbook Ansible qui configure de A à Z la Debian pour en faire un Proxmox. Pour ceux qui l’ont loupé, &lt;a class="link" href="https://blog.zwindler.fr/2019/08/20/cluster-proxmox-ve-v6-cette-fois-ci/" &gt;c’est par ici que ça se passe&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;J’ai juste eu &lt;em&gt;un&lt;/em&gt; petit souci lors de l’installation. La debian étant minimale, je n’avais même pas python d’installé. C’est gênant quand on fait du Ansible !&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat inventory_hetzner.yml
all:
children:
proxmoxve:
hosts:
&amp;lt;fqdn_hyperviser&amp;gt;:
ansible proxmoxve -i inventory_hetzner.yml -u root -m ping
&amp;lt;fqdn_hyperviser&amp;gt; | FAILED! =&amp;gt; {
&amp;#34;changed&amp;#34;: false,
&amp;#34;module_stderr&amp;#34;: &amp;#34;Shared connection to &amp;lt;fqdn_hyperviser&amp;gt; closed.\r\n&amp;#34;,
&amp;#34;module_stdout&amp;#34;: &amp;#34;/bin/sh: 1: /usr/bin/python: not found\r\n&amp;#34;,
&amp;#34;msg&amp;#34;: &amp;#34;MODULE FAILURE&amp;#34;,
&amp;#34;rc&amp;#34;: 127
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Heureusement j’avais déjà eu le souci dans un autre contexte. J’ai donc écris un playbook supplémentaire (dispo sur le Github) pour installer les prérequis manquants.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i inventory_hetzner.yml -u root proxmox_python_firstinstall.yml
ansible-playbook -i inventory_hetzner.yml -u root proxmox_prerequisites.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et en quelques minutes, mon Proxmox VE était opérationnel sur Hetzner !&lt;/p&gt;</description></item><item><title>Cluster Proxmox VE, v6 cette fois ci !</title><link>https://blog.zwindler.fr/2019/08/20/cluster-proxmox-ve-v6-cette-fois-ci/</link><pubDate>Tue, 20 Aug 2019 11:45:00 +0000</pubDate><guid>https://blog.zwindler.fr/2019/08/20/cluster-proxmox-ve-v6-cette-fois-ci/</guid><description>&lt;img src="https://blog.zwindler.fr/2019/08/cropped-proxmox_ansible.webp" alt="Featured image of post Cluster Proxmox VE, v6 cette fois ci !" /&gt;&lt;h2 id="proxmox-ve"&gt;Proxmox VE
&lt;/h2&gt;&lt;p&gt;Et oui, avec &lt;a class="link" href="https://blog.zwindler.fr/2019/07/16/sortie-de-proxmox-ve-6-0-les-nouveautes/" &gt;la sortie de Proxmox VE 6&lt;/a&gt;, je vous avais prévenu : il va y avoir pas mal d’articles là dessus, même si quelques articles sur Kubernetes sont en cours d’écriture aussi ;-).&lt;/p&gt;
&lt;p&gt;Fin juillet, j’avais écris &lt;a class="link" href="https://blog.zwindler.fr/2019/07/22/proxmox-en-5-min-ansible-tinc/" &gt;un article sur des playbooks Ansible que j’ai écris pour faciliter le déploiement de cluster Proxmox VE&lt;/a&gt;. Malheureusement, comme cet article traînait dans mes brouillons, les playbooks ne géraient pas la version 6 (qui venait de sortir) de PVE.&lt;/p&gt;
&lt;p&gt;C’est aujourd’hui de l’histoire ancienne puisque, pour tester la v6, j’ai forcément du adapter les playbooks ;-).&lt;/p&gt;
&lt;p&gt;Point important, je vais partir du principe que vous n’avez pas la possibilité d’installer Proxmox VE directement avec l’ISO. C’est souvent le cas souvent avec les hébergeurs de serveurs dédiés pas chers (OneProvider par exemple) ou de VMs (OVH, Scaleway, etc).&lt;/p&gt;
&lt;p&gt;Car si vous avez la main, le plus simple est bien sûr d’installer l’ISO directement ! Cependant, ce tuto reste utile pour toute la partie mise en VPN et configuration du cluster.&lt;/p&gt;
&lt;h2 id="les-prérequis"&gt;Les prérequis
&lt;/h2&gt;&lt;p&gt;Dans l’article précédent, pour gagner du temps pour ceux qui veulent juste tester, j’avais mis à disposition un playbook permettant de générer des VMs chez le cloud provider Scaleway (et notamment tirer parti de l’inventaire dynamique proposé par le module développé par Scaleway pour Ansible).&lt;/p&gt;
&lt;p&gt;Ici, je met volontairement de côté cette partie qui n’apporterait rien de plus. Si vous voulez voir comment ça fonctionne je vous invite à &lt;a class="link" href="https://blog.zwindler.fr/2019/07/22/proxmox-en-5-min-ansible-tinc/" &gt;(re)lire l’article précédent&lt;/a&gt;, la procédure est la même.&lt;/p&gt;
&lt;p&gt;Le seul prérequis pour ce tutoriel sont donc d’avoir idéalement 3 machines* (ou plus) sous Debian 10 (la raison pour laquelle je n’avais pas pu le faire avec Scaleway qui ne propose pas encore Debian Buster) accessibles en depuis votre station de travail.&lt;/p&gt;
&lt;p&gt;*Mais si vous voulez juste installer Proxmox, une seule suffit mais vous n’aurez évidemment pas un cluster. A partir de 2, on peut faire un cluster mais il sera instable dès que vous perdrez une seule des 2 machines (ce qui est dommage) à moins d’ajouter un device pour permettre d’avoir le quorum (ce que nous verrons dans un autre article).&lt;/p&gt;
&lt;h2 id="installer-ansible-et-récupérer-les-playbooks"&gt;Installer Ansible et récupérer les playbooks
&lt;/h2&gt;&lt;p&gt;Des fois que n’auriez pas Ansible, installez le (pour git, c’est juste plus simple de cloner le dépôt mais vous pouvez le télécharger autrement si vous ne voulez pas installer git)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apt-get install git ansible
git clone https://github.com/zwindler/ansible-proxmoxve
cd
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ensuite, on créé un fichier d’inventaire pour Ansible (ce qui n’étais pas nécessaire avec Scaleway puisque, je le rappelle, il y a un module d’inventaire dynamique). Ici on se contente juste de lister les serveurs qui nous intéressent.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat pve_inventory.yml
all:
children:
proxmoxve:
hosts:
proxmox1.myexample.org:
proxmox2.myexample.org:
proxmox3.myexample.org:
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Vous ne reconnaissez peut être pas le format de cet inventaire Ansible. En effet, l’inventaire est ici stocké au format YAML et non au format plat. Très peu de gens utilisent ce format (qui existait au début, puis a été retiré pour être de nouveau supporté depuis la 2.4 je crois).&lt;/p&gt;
&lt;p&gt;Étant habitué aux inventaires parfois un peu hétéroclites, je préfère largement ce format YAML, qui permet de rajouter de manière beaucoup plus lisibles des variables à des groupes ou mêmes des hôtes directement (sans passer par une arborescence complète avec groups_vars et hosts_vars). De plus, je trouve les dépendances entre groupes plus claires que lorsque nous avions à déclarer les :children du groupe père (mais c’est subjectif).&lt;/p&gt;
&lt;p&gt;Notez par contre qu’il faut :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;que mes hôtes soient résolvables par DNS (sinon il faut ajouter une variable ansible_host avec l’IP pour chacun)&lt;/li&gt;
&lt;li&gt;que vous n’oubliez surtout par le &amp;ldquo;:&amp;rdquo; à la fin de chaque hostname, sans quoi vous aurez une erreur de syntaxe.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="lancer-le-playbook-dinstallation-de-proxmox-ve-6"&gt;Lancer le playbook d’installation de Proxmox VE 6
&lt;/h2&gt;&lt;p&gt;Nous y voilà. Normalement vous pouvez accéder en SSH à l’ensemble de vos machines. Pour installer Proxmox VE 6 sur une debian 10, il faut donc simplement lancer la commande suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i pve_inventory.yml proxmox_prerequisites.yml -u root
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Normalement, le playbook vous promptera pour répondre à quelques questions basiques (votre domaine, est ce que les machines commencent par test plutôt que proxmox dans le hostname, &amp;hellip;) et à l’issue, un reboot sera effectué (pour basculer sur le noyau Linux de PVE et pas celui de debian Buster).&lt;/p&gt;
&lt;h2 id="mise-en-réseau-privé-virtuel-avec-tinc"&gt;Mise en réseau privé virtuel avec Tinc
&lt;/h2&gt;&lt;p&gt;Cette étape n’est pas forcément nécessaire. Si vous travaillez sur des machines qui sont dans un même réseau local, il vaut mieux s’en passer.&lt;/p&gt;
&lt;p&gt;En revanche, dans le cas où comme moi vous louez des serveurs chez un provider et qu’il ne vous met pas à disposition un moyen de simuler un réseau privé (RPN chez Online, Rack quelque chose chez OVH je crois), il sera préférable de monter un VPN entre les différentes machines du cluster.&lt;/p&gt;
&lt;p&gt;Je dis préférable et pas nécessaire, &lt;a class="link" href="https://blog.zwindler.fr/2019/07/16/sortie-de-proxmox-ve-6-0-les-nouveautes/" &gt;car jusqu’à la version 6 de Proxmox (et Corosync v3), il était nécessaire également de faire passer du multicast&lt;/a&gt; entre les machines pour faire fonctionner le cluster. Ce n’est aujourd’hui plus le cas et on peut donc très bien imaginer un cluster Proxmox avec des machines sur des LAN distincts. Cependant, pour activer des fonctionnalités comme Ceph (et probablement d’autre), il est toujours nécessaire d’avoir un LAN.&lt;/p&gt;
&lt;p&gt;Pour se faire, j’utilise Tinc plutôt qu’OpenVPN, qui a l’avantage d’être simple à configurer et surtout multipoint (pas de notion de serveur maitre et de clients connectés dessus). Ce n’est pas le cas avec OpenVPN, dont la structure client/serveur complexifie beaucoup l’implémentation si on veut éviter un SPOF (en gros il faut un serveur sur toutes les machines, et que l’ensemble des serveurs soient tous clients les uns des autres, en toile d’araignée). Vous pouvez &lt;a class="link" href="https://blog.zwindler.fr/2017/08/29/faire-un-petit-cluster-proxmox-avec-2-machines-kimsufi/" &gt;quand même jeter un oeil sur mes premières tentatives ici&lt;/a&gt;, si ça vous intéresse.&lt;/p&gt;
&lt;p&gt;Comme j’automatise tout avec Ansible, j’ai donc aussi créé un playbook qui permet d’installer et configurer Tinc sur toutes nos machines et de les mettre en réseau sur un VPN dédié.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i pve_inventory.yml tinc_installation.yml -u root
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, vous avez donc 3 machines Proxmox VE 6, connectés ensembles sur un VPN avec l’adresse 10.10.10.0/24&lt;/p&gt;
&lt;h2 id="le-réseau-cest-compliqué-"&gt;Le réseau c’est compliqué ?
&lt;/h2&gt;&lt;p&gt;Un point pas forcément évident avec Proxmox est que la configuration du réseau dépend beaucoup de comment vos machines sont connectées en réseau.&lt;/p&gt;
&lt;p&gt;Les différentes configurations conseillées sont détaillées &lt;a class="link" href="https://pve.proxmox.com/wiki/Network_Configuration" target="_blank" rel="noopener"
&gt;dans un article dédié sur le wiki de Proxmox&lt;/a&gt;. J’aurais vraiment aimé connaître cette page lorsque M4vr0x et moi avons fait nos premières expériences avec PVE car nous avons beaucoup tâtonné&amp;hellip;&lt;/p&gt;
&lt;p&gt;Dans mon cas précis, j’ai des machines hostées par un provider. Je n’ai donc aucunement la main sur le réseau et je ne souhaite pas acheter d’IP supplémentaires.&lt;/p&gt;
&lt;p&gt;Dans ce cas là, le plus simple est donc de créer un bridge Linux, qui portera un réseau virtuel interne à chaque serveur et dont le trafic externe sera routé.&lt;/p&gt;
&lt;p&gt;L’inconvénient de cette solution est qu’on ne peut pas utiliser l’interface graphique pour faire ces modifications, et aussi qu’en cas d’erreur, vous n’aurez plus accès à votre serveur&amp;hellip;&lt;/p&gt;
&lt;h2 id="configuration-réseau-pour-des-machines-dédiées-chez-un-provider-type-oneprovider"&gt;Configuration réseau pour des machines dédiées chez un Provider type OneProvider
&lt;/h2&gt;&lt;p&gt;Nous voilà donc dans les premières bidouilles manuelles. Connectez vous en SSH à votre (vos) serveurs, et modifier le fichier /etc/network/interfaces.&lt;/p&gt;
&lt;p&gt;Je me suis basé sur la section &lt;a class="link" href="https://pve.proxmox.com/wiki/Network_Configuration#_masquerading_nat_with_tt_span_class_monospaced_iptables_span_tt" target="_blank" rel="noopener"
&gt;&amp;ldquo;Masquerading (NAT) with iptables&amp;rdquo;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le mien ressemble à ça :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto eth0
#real IP address
iface eth0 inet static
address x.x.x.x
netmask 24
gateway x.x x.1
auto vmbr0
iface vmbr0 inet static
address 192.168.0.1
netmask 255.255.255.0
bridge-ports none
bridge-stp off
bridge-fd 0
post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s &amp;#39;192.168.0.0/24&amp;#39; -o eth0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s &amp;#39;192.168.0.0/24&amp;#39; -o eth0 -j MASQUERADE
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le plus important ici pour que tout fonctionne est que vous ne vous trompiez pas sur le nom de l’interface réseau (eth0 dans mon exemple).&lt;/p&gt;
&lt;p&gt;Ensuite, une fois que les modifications sont faites, redémarrez le réseau (&lt;em&gt;systemctl restart networking&lt;/em&gt;) ou carrément le serveur (c’est ce que Proxmox conseille, même si je ne vois pas bien l’intérêt).&lt;/p&gt;
&lt;p&gt;Ici, la configuration est beaucoup plus simple que ce que nous avions imaginé &lt;a class="link" href="https://blog.zwindler.fr/2017/07/18/deploiement-de-proxmox-ve-5-sur-un-serveur-dedie-part-2/" &gt;avec M4vr0x dans la série d’articles détaillés sur PVE 5&lt;/a&gt;. Et c’est tant mieux car ça suffira amplement à la plupart d’entre vous ;-).&lt;/p&gt;
&lt;h2 id="configuration-du-cluster-proxmox-ve"&gt;Configuration du cluster Proxmox VE
&lt;/h2&gt;&lt;p&gt;Ok ! Maintenant tous les prérequis sont en place, on peut donc construire le cluster. Le wizard de la GUI a assez peu évolué depuis la V5 (même s’il y a quelques petites améliorations)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vous vous connectez sur une des machines&lt;/li&gt;
&lt;li&gt;Dans la vue Datacenter, vous sélectionnez Create Cluster, puis vous copiez les informations de connexion pour les autres serveurs.&lt;/li&gt;
&lt;li&gt;Sur les autres serveurs, vous rejoignez le cluster en collant les informations des&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(Plus de détails dans l’article précédent)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/08/proxmox_ve_6_create_cluster.avif"
loading="lazy"
&gt;&lt;/p&gt;</description></item><item><title>Un cluster Proxmox VE en 5 minutes avec Ansible</title><link>https://blog.zwindler.fr/2019/07/22/proxmox-en-5-min-ansible-tinc/</link><pubDate>Mon, 22 Jul 2019 11:45:34 +0000</pubDate><guid>https://blog.zwindler.fr/2019/07/22/proxmox-en-5-min-ansible-tinc/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/08/cropped-proxmox_logo-1.webp" alt="Featured image of post Un cluster Proxmox VE en 5 minutes avec Ansible" /&gt;&lt;h2 id="cool-on-va-encore-déployer-du-proxmox-ve-"&gt;Cool on va (encore) déployer du Proxmox VE !!!
&lt;/h2&gt;&lt;p&gt;Petit tuto aujourd’hui, massivement facilité par l’usage d’Ansible : on va déployer un cluster de machines Proxmox VE via le cloud provider Scaleway.&lt;/p&gt;
&lt;p&gt;A noter : Si jamais vous ne voulez pas utiliser Scaleway, les playbooks ont été découpés de manière à ce que la partie d’installation de Proxmox ainsi que l’installation de tinc et la mise en cluster puissent être réalisés à part. Vous pouvez donc tout à faire partir de machines sous Debian 9 via ces playbooks.&lt;/p&gt;
&lt;p&gt;Pourquoi Scaleway me direz vous ? Tout simplement parce qu’ils ont, contrairement à d’autres, une très bonne API, qui a permis à un de leurs employés de faire de très bons modules Ansible, notamment un module permettant de gérer l’inventaire dynamique (pas besoin de renseigner un fichier hosts pour Ansible, c’est directement l’API qui nous liste les VMs).&lt;/p&gt;
&lt;p&gt;J’ai d’ailleurs utilisé ce provider à plusieurs reprises pour cette raison (voir mon article sur &lt;a class="link" href="https://blog.zwindler.fr/2019/03/21/deployer-en-5-minutes-un-cluster-kubernetes-sur-arm-avec-k3s-et-ansible/" &gt;k3s et Ansible&lt;/a&gt; ou mon talk à BDX I/O &lt;a class="link" href="https://www.youtube.com/watch?v=WPRE1_f0pyg" target="_blank" rel="noopener"
&gt;Ami développeur, deviens un ops sans effort avec Ansible&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id="proxmox-ve-54--pourquoi-pas-60-"&gt;Proxmox VE 5.4 ? Pourquoi pas 6.0 ?
&lt;/h2&gt;&lt;p&gt;La deuxième question, tout aussi légitime, repose donc sur &amp;ldquo;pourquoi diantre monter un cluster Proxmox VE 5.4 alors que tu viens de nous faire un article qui vante &lt;a class="link" href="https://blog.zwindler.fr/2019/07/16/sortie-de-proxmox-ve-6-0-les-nouveautes/" &gt;les bienfaits de la version 6.0&lt;/a&gt; qui vient de sortir ?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Et là j’ai deux raisons (une bonne et une mauvaise). La mauvaise, c’est simplement que l’article trainait dans mes brouillons et que je n’ai pas cliqué sur &amp;ldquo;Poster&amp;rdquo;&amp;hellip; La &amp;ldquo;bonne&amp;rdquo; raison, c’est que la version 10 de Debian, qui est la base de Proxmox VE 6, n’est pas encore disponible sur Scaleway, ce qui complique un peu l’installation.&lt;/p&gt;
&lt;p&gt;Lorsqu’elle le sera, je ne manquerais pas de faire un petit refresh de l’article ainsi que des playbooks Ansible ;)&lt;/p&gt;
&lt;h2 id="déployer-les-vms-avec-ansible"&gt;Déployer les VMs avec Ansible
&lt;/h2&gt;&lt;p&gt;Je l’ai dis juste avant, le gros avantage de Scaleway, c’est de pouvoir spawner des VMs à la volées avec Ansible et surtout d’avoir l’inventaire dynamique.&lt;/p&gt;
&lt;p&gt;Petite (grosse?) limitation : comme il s’agit de VMs, il ne sera évidemment pas possible de faire tourner des VMs de type KVM/qemu sur ces machines (sauf moyennant un hack de type nesting de VM dans une VM).&lt;/p&gt;
&lt;p&gt;Cependant, depuis quelques temps, je n’utilise plus du tout les VMs (je n’ai pas de workload Windows) et j’utilise plutôt des containers LXC.&lt;/p&gt;
&lt;p&gt;C’est vraiment plus léger en terme d&amp;rsquo;empreinte mémoire (je n’ai jamais été embêté côté CPU mais côté RAM, chaque Mo compte) et ça se gère (install, gestion, sauvegarde) de la même façon qu’une VM, contrairement à Docker qui nécessite une gymnastique mentale complémentaire.&lt;/p&gt;
&lt;h2 id="bon-on-fait-ça-comment-"&gt;Bon, on fait ça comment ?
&lt;/h2&gt;&lt;p&gt;Maintenant que j’ai posé le décor, on peut commencer le tuto. L’idée va être de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Créer des VMs&lt;/li&gt;
&lt;li&gt;Récupérer leurs informations (IP publique, surtout)&lt;/li&gt;
&lt;li&gt;Installer les prérequis de Proxmox VE (puis les rebooter pour passer sur le kernel PVE)&lt;/li&gt;
&lt;li&gt;Installer les prérequis et configurer tinc, le VPN qui va nous permettre d’initier le cluster et de laisser passer les trames multicast, nécessaires au clustering&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A l’issue de ces étapes, on arrêtera là l’automatisation et on passera sur quelques (rapides) étapes manuelles.&lt;/p&gt;
&lt;p&gt;Ok, j’avoue que c’est dommage que tout ne soit pas automatisé. Mais le gros du boulot, c’est vraiment les étapes précédentes. Pour s’en convaincre, vous pouvez lire l’article que j’avais écris &lt;a class="link" href="https://blog.zwindler.fr/2018/06/05/creation-dun-cluster-de-virtualisation-proxmox-ve-5-2-x/" &gt;pour la version 5.2 (mais avec OpenVPN)&lt;/a&gt; ou tout simplement lire le contenu des playbooks.&lt;/p&gt;
&lt;h2 id="prérequis"&gt;Prérequis
&lt;/h2&gt;&lt;p&gt;Et oui, il y a quand même quelques prérequis à ce tuto. Il faudra :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avoir un compte sur Scaleway&lt;/li&gt;
&lt;li&gt;Avoir une clé SSH, avoir la clé publique à la racine du projet, et l’appeler admin.pub&lt;/li&gt;
&lt;li&gt;Installer les package pip&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pip install jinja2 PyYAML paramiko cryptography packaging
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Installer Ansible depuis les sources (&amp;gt;= 2.8)&lt;/li&gt;
&lt;li&gt;Installer &lt;code&gt;jq&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J’aurai pu faire aussi un playbook pour ça, mais comme c’est très dépendant de votre distribution Linux (ou Windows ahaha), &amp;hellip;&lt;/p&gt;
&lt;h2 id="you-token-to-me-"&gt;You token to me ?
&lt;/h2&gt;&lt;p&gt;Créez un token sur le site de Scaleway pour les accès distants et le stocker dans un fichier scaleway_token sur votre machine avec Ansible :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;export SCW_API_KEY=&amp;#39;aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Puis sourcez le fichier :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;source scaleway_token
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de maintenant, vous avez le pouvoir tout puissant du cloud au bout de vos doigts (et de votre CB) !&lt;/p&gt;
&lt;h2 id="générer-les-machines"&gt;Générer les machines
&lt;/h2&gt;&lt;p&gt;Là, on tire totalement parti du travail de &lt;a class="link" href="https://github.com/scaleway/ansible" target="_blank" rel="noopener"
&gt;Rémy Léone sur https://github.com/scaleway/ansible et des modules Ansible pour Scaleway, intégrés au repo officiel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On va donc utiliser le playbook create_proxmox_vms.yaml pour :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;récupérer l’ID d’organisation du compte Scaleway (votre identifiant unique)&lt;/li&gt;
&lt;li&gt;récupérer un ID d’une image disque compatible debian Stretch (de la bonne taille)&lt;/li&gt;
&lt;li&gt;ajouter si nécessaire la clé SSH de l’admin dans le portail Scaleway, qui sera injectée dans vos VMs à leur création&lt;/li&gt;
&lt;li&gt;créer autant de machines que nécessaire&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook create_proxmox_vms.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Bon, je vous ai pas menti, c’est quand même hyper simple non ?&lt;/p&gt;
&lt;p&gt;A noter, actuellement le script traite les demandes de création de machines séquentiellement. Pour 3 VMs, comptez environ 3 minutes.&lt;/p&gt;
&lt;p&gt;Cependant, si vous avez un gros besoin, sachez qu’il est possible de modifier le script pour les lancer en parallèle (déjà fait dans mon repo &lt;a class="link" href="https://github.com/zwindler/ansible-deploy-azure/issues/2" target="_blank" rel="noopener"
&gt;ansible-deploy-azure&lt;/a&gt; sur Github) via la fonction async d’Ansible.&lt;/p&gt;
&lt;h2 id="mise-en-place-de-linventaire-dynamique"&gt;Mise en place de l’inventaire dynamique
&lt;/h2&gt;&lt;p&gt;J’arrête pas de vous en parler depuis tout à l’heure, normalement dans Ansible, maintenant que nos VMs sont créées, pour pouvoir nous y connecter, on devrait créer un fichier texte &amp;ldquo;inventory&amp;rdquo; contenant la liste des hôtes et de leur IP (a minima). C’est fastidieux, surtout si vous avez beaucoup de VMs.&lt;/p&gt;
&lt;p&gt;Et là, on a juste un fichier inventory.yml, contenant le nom du plugin, la région utilisée (Paris dans mon script) et le tag des machines générées :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;plugin: scaleway
regions:
- par1
tags:
- proxmoxve
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, on peut vérifier le retour de la commande ansible-inventory&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-inventory --list -i inventory.yml
{
&amp;#34;_meta&amp;#34;: {
&amp;#34;hostvars&amp;#34;: {
&amp;#34;x.x.x.x&amp;#34;: {
&amp;#34;arch&amp;#34;: &amp;#34;x86_64&amp;#34;,
&amp;#34;commercial_type&amp;#34;: &amp;#34;DEV1-S&amp;#34;,
&amp;#34;hostname&amp;#34;: &amp;#34;test3&amp;#34;,
[...]
&amp;#34;proxmoxve&amp;#34;: {
&amp;#34;hosts&amp;#34;: [
&amp;#34;x.x.x.x&amp;#34;,
&amp;#34;y.y.y.y&amp;#34;,
&amp;#34;z.z.z.z&amp;#34;
]
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Petite hack SSH : comme Ansible se connecte en SSH aux hôtes distants, à la première connexion on va bloquer sur l’acceptation de la fingerprint.&lt;/p&gt;
&lt;p&gt;Un moyen de bypasser ça en une ligne de commande est d’utiliser la commande ssh-keyscan et de coller tout ça dans votre known_hosts. On peut le faire avec ce petit oneliner :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-inventory --list -i inventory.yml | jq -r &amp;#39;.proxmoxve.hosts | .[]&amp;#39; | xargs ssh-keyscan &amp;gt;&amp;gt; ~/.ssh/known_hosts
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ce n’est évidemment pas recommandé en production !!! Mais dans le cadre d’un test temporaire, vous me pardonnerez cette liberté.&lt;/p&gt;
&lt;p&gt;Ajoutez votre clé SSH dans l’agent, puis vérifiez que vous pouvez vous connecter à tous les serveurs :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;eval `ssh-agent`
ssh-add myprivate.key
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;ansible proxmoxve -i inventory.yml -u root -m ping
x.x.x.x | SUCCESS =&amp;gt; {
&amp;#34;changed&amp;#34;: false,
&amp;#34;ping&amp;#34;: &amp;#34;pong&amp;#34;
}
y.y.y.y | SUCCESS =&amp;gt; {
&amp;#34;changed&amp;#34;: false,
&amp;#34;ping&amp;#34;: &amp;#34;pong&amp;#34;
}
z.z.z.z | SUCCESS =&amp;gt; {
&amp;#34;changed&amp;#34;: false,
&amp;#34;ping&amp;#34;: &amp;#34;pong&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="préparation-du-serveur"&gt;Préparation du serveur
&lt;/h2&gt;&lt;p&gt;Ok ! Maintenant, on a 3 (ou plus) VMs Debian 9. A partir de là, j’ai créé un playbook Ansible qui suit &lt;a class="link" href="https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_Stretch" target="_blank" rel="noopener"
&gt;la doc d’installation officielle de Proxmox sur un Debian Stretch&lt;/a&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i inventory.yml -u root proxmox_prerequisites.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A l’issue de l’installation, il est nécessaire de rebooter les serveurs (manuellement ou via ansible), pour passer sur le kernel de PVE.&lt;/p&gt;
&lt;h2 id="installation-et-configuration-de-tinc"&gt;Installation et configuration de tinc
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;C’est piou-piou.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Une fois que vos serveurs sont revenus à la vie, vous avez installé Proxmox. Pas mal hein ?&lt;/p&gt;
&lt;p&gt;Cependant, chez Scaleway (et tous les autres providers que je connais), le multicast est coupé entre vos VMs. Et ça c’est la loose car tout notre clustering va passer par des trames multicast.&lt;/p&gt;
&lt;p&gt;Pour bypasser ce souci de taille, le plus simple est de passer par un VPN, de créer un réseau privé virtuel entre toutes nos instances, qui lui ne filtrera rien.&lt;/p&gt;
&lt;p&gt;Dans les articles précédents, &lt;a class="link" href="https://blog.zwindler.fr/2018/06/05/creation-dun-cluster-de-virtualisation-proxmox-ve-5-2-x/" &gt;j’avais utilisé OpenVPN&lt;/a&gt; (parce que c’est ce que je connais le mieux). Le souci d’OpenVPN c’est qu’il fonctionne sur un base client-serveur. Or, dès qu’on dépasse les 3 serveurs, on se retrouve avec 1 serveur maitre et 2 (ou plus clients), et donc un SPOF&amp;hellip;&lt;/p&gt;
&lt;p&gt;L’avantage avec tinc, c’est qu’on a pas cette notion de client/serveur. Tous les tincs sont connectés à tous les tincs, dans un genre de gros maillage qui nous évite donc tout SPOF.&lt;/p&gt;
&lt;p&gt;L’installation de tinc n’est en soit pas follement complexe (cf le &lt;a class="link" href="https://github.com/zwindler/ansible-proxmoxve/blob/master/tinc_installation.yml" target="_blank" rel="noopener"
&gt;playbook&lt;/a&gt;), mais là encore, l’automatiser c’est toujours sympa.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i inventory.yml -u root tinc_installation.yml
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="etapes-additionnelles-manuelles"&gt;Etapes additionnelles manuelles
&lt;/h2&gt;&lt;p&gt;Une fois que vous en êtes là, on arrive dans les tâches non triviales à automatiser.&lt;/p&gt;
&lt;p&gt;Actuellement, il n’est pas possible de créer un cluster Proxmox VE sans avoir un mot de passe root. Or, lors de la création des VMs, Scaleway utilise notre clé SSH (ce qui est beaucoup mieux). Nous allons donc devoir nous connecter sur l’ensemble des machines et réinitialiser le mot de passe du compte root.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;root@test1:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="créer-un-cluster"&gt;Créer un cluster
&lt;/h2&gt;&lt;p&gt;Cette partie aurait pu être automatisée. Dans le tutoriel précédent, je le faisais en ligne de commandes, à cause d’une limitation dans le wizard de création de cluster. En effet, dans les précédentes versions de Proxmox, on ne pouvait pas sélectionner sur quelle interface réseau on souhaitait utiliser, et donc mon cluster ne passait pas par le VPN et les trames multicast ne passaient jamais.&lt;/p&gt;
&lt;p&gt;Pour autant, maintenant on peut profiter du beau wizard tout neuf et le faire via la GUI :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se connecter à l’UI de Proxmox avec un des noeuds (le premier, au hasard)&lt;/li&gt;
&lt;li&gt;Dans Datacenter (à gauche), sélectionner Cluster puis cliquer sur &amp;ldquo;Create Cluster&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Donner un nom au cluster, mais surtout, donner comme adresse ring0 l’adresse VPN (10.10.10.1 si on est sur le noeud 1)&lt;/li&gt;
&lt;li&gt;Une fois l’opération terminée, cliquer sur &amp;ldquo;Join Information&amp;rdquo;, dans le même menu, et copier les informations en cliquant sur &amp;ldquo;Copy Information&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/07/create.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="joindre-le-cluster"&gt;Joindre le cluster
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Se connecter sur l’UI de la 2ème machine&lt;/li&gt;
&lt;li&gt;Dans Datacenter, sélectionner Cluster puis cliquer sur &amp;ldquo;Join Cluster&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Dans le champ &amp;ldquo;Information&amp;rdquo;, coller les données récupérée lors de l’étape précédente. Les informations de connexion devraient automatiquement être remplies, &lt;strong&gt;SAUF le Corosync ring0, qu’il faut positionner à 10.10.10.2&amp;quot;&lt;/strong&gt;, et le mot de passe root du noeud 1. Cliquer sur &amp;ldquo;Join&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Si l’opération réussie, un message doit s’afficher pour dire de recharger la page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Répéter l’opération pour les noeuds suivants (3, voire ++)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/07/clusterupandrunning.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et en attendant la même chose avec la v6, amusez vous bien :)&lt;/p&gt;</description></item></channel></rss>