Étiquette : Fedora
Créer des serveurs sur Openstack OVH avecTerraform
Comme dirait mon vendeur de téléphone, “on ne va pas se mentir” : je déteste le Cloud. Ça vient de très loin – je me demande même si je faisais de l’informatique – d’une discussion avec une fraîche mouture de Science-Po de l’époque qui me vantait l’avantage du concept “magique” du cloud, et en quoi il était bon que “Mme Michu” n’y comprenne rien. Maintenant que je vois cela de l’intérieur, je dirais que mon sentiment de défiance est renforcé.
Derrière le Cloud il y a du “barre metal”, c’est à dire des serveurs physiques reliés les uns aux autres, très souvent sous Linux, avec une couche d’automatisation complexe qui permet d’offrir des services de plus en plus importants aux clients. Or il est une règle vieille comme le monde : pas d’indépendance sans connaissance… Durant le temps que vous chercherez la technique pour construire des serveurs sur l’infra d’Amazon ou Microsoft, d’autres le passeront à trouver des techniques plus poussées pour vous rendre toujours plus dépendant. Des services rendus propriétaires qui étrangement fonctionnent mieux que le standard opensource… par exemple des bases de données, de la redondance de charge… Le Cloud c’est avec modération, celui qui se sert du Cloud pour des applications critiques est fou, et dans le fond celui qui vend des services Cloud américains aux grands comptes français ne veut pas vraiment de l’indépendance économique française. C’est une situation qui devrait être accompagnée par le politique car dans les DSI, l’argent est bien souvent ROI… et la stratégie sur le long terme se fait rare. Si ces questions liées à la “souveraineté numérique” vous intéressent, je vous invite à lire cet article : Souveraineté numérique : le choix inquiétant fait par la BPI pour l’hébergement des données.
Vous l’aurez compris, je vais prendre un exemple de Cloud bien français même si ce dernier s’étend maintenant dans le monde entier : celui d’OVH. En plus ils utilisent la techno Openstack, ce qui est parfait pour s’initier aux concepts de cloud public/privé. Il faut savoir que le Cloud n’est pas gratuit, 0.01€ vous seront facturés à la création de l’infra ci-dessous, plus si vous décidez de garder le serveur.
Prérequis
- Avoir un compte chez OVH et souscrit à l’offre Cloud
- Un utilisateur OpenStack
- Les variables d’environnement OpenStack
- Vos identifiants API et clés d’autorisations OVH
- Une clé SSH
- L’exécutable Terraform
- Les clients OpenStack (nova, glance)
Vous trouverez les pages de tutoriel chez OHV et sur ce site. Normalement pas de soucis majeurs pour effectuer ces opérations, si vous avez néanmoins des problèmes, envoyez-moi un message et je détaillerai ce paragraphe des prérequis.
Utilisation de Terraform pour les instances Cloud public
On va faire très simple, trois fichiers. Un pour la connection à Openstack, un autre pour la création de la machine et son réseau, le dernier pour les variables :
$ tree
.
├── connections.tf
├── simple_instance.tf
└── variables.tf
connections.tf
Rien de bien compliqué ici :
provider "openstack" {
auth_url = "https://auth.cloud.ovh.net/v3.0/"
domain_name = "default"
tenant_name = ""
alias = "ovh"
user_name = "utilisateur_openstack" # vous possédez ces valeurs
password = "le_mot_de_passe" # si vous avez effectué les prérequis
}
simple_instance.tf
Voilà maintenant pour créer un serveur, j’utilise l’adresse IP de la machine d’administration afin de l’autoriser à accéder au serveur Cloud via SSH. Vous pouvez utiliser une autre technique que firewalld, il suffit de changer le script run.sh … Comme d’habitude, j’utilise des images cloud de Fedora Server (ici 32).
resource "openstack_compute_keypair_v2" "mattkey" {
provider = openstack.ovh
name = "mattkey" # A changer : c'est la clé que vous avez préalablement créée dans l'interface openstack OVH
public_key = file("~/.ssh/id_rsa.pub") # C'est la clé que vous avez préalablement créée dans l'interface openstack OVH
}
data "openstack_networking_network_v2" "public_a" {
name = "Ext-Net"
provider = openstack.ovh
}
resource "openstack_networking_port_v2" "public_a" {
name = "test_a_0"
network_id = data.openstack_networking_network_v2.public_a.id
admin_state_up = "true"
provider = openstack.ovh
}
data "http" "myip" {
url = "https://api.ipify.org"
}
data "template_file" "setup" {
template = <<SETUP
#!/bin/bash
# install & configure firewall
dnf install -y firewalld
systemctl start firewalld
systemctl enable --now firewalld
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-source=${trimspace(data.http.myip.body)}/32 --zone=trusted
firewall-cmd --permanent --add-service=ssh --zone trusted
firewall-cmd --permanent --remove-service=ssh --zone=public
firewall-cmd --reload
SETUP
}
data "template_file" "userdata" {
template = <<CLOUDCONFIG
#cloud-config
write_files:
- path: /tmp/setup/run.sh
permissions: '0755'
content: |
${indent(6, data.template_file.setup.rendered)}
- path: /etc/systemd/network/30-ens3.network
permissions: '0644'
content: |
[Match]
Name=ens3
[Network]
DHCP=ipv4
runcmd:
- sh /tmp/setup/run.sh
CLOUDCONFIG
}
resource "openstack_compute_instance_v2" "fed-test" {
region = var.region
name = "test-fed-instance"
provider = openstack.ovh
image_name = "Fedora 32"
flavor_name = "s1-2"
user_data = data.template_file.userdata.rendered
key_pair = openstack_compute_keypair_v2.mattkey.name
network {
access_network = true
port = openstack_networking_port_v2.public_a.id
}
}
output "Server_IP" {
value = openstack_networking_port_v2.public_a.all_fixed_ips
}
variables.tf
variable "region" {
type = string
default = "UK1" # cette valeur dépend de votre compte OVH et du fichier openstack .rc
}
Et voilà le tour est joué, théoriquement, l’ip du serveur s’affiche à la fin de l’exécution du `terraform apply`, vous pouvez vous y connecter via SSH avec votre clé privée. Pour tout détruire : `terraform destroy`. Si vous vous souvenez de mes précédents articles, ici ou là, vous pouvez maintenant provisionner la ou les machines avec Ansible.
Installer Nextcloud sur Fedora Servers Cloud grâce à Terraform et Ansible, part2
Vue d’ensemble du code de provision des VMs
Maintenant que l’on a notre code pour l’infra, il est temps de passer à la partie provision des vms. Pour cela, comme je vous le disais, j’utilise Ansible. Pourquoi ? Parce qu’il est de plus en plus inclus dans l’écosystème RedHat, que la communauté autour du projet est très vivante et que l’on n’a aucun de mal à trouver des infos. Je vous rappelle que ce code met à disposition des serveurs dans un réseau isolé. Je vous montre l’arborescence des rôles et playbooks en fonction de mon architecture :
Poursuivre la lecture « Installer Nextcloud sur Fedora Servers Cloud grâce à Terraform et Ansible, part2 »Installer Nextcloud sur Fedora Servers Cloud grâce à Terraform et Ansible, part1
Aujourd’hui, je vais vous exposer un de mes POC. Je voulais installer Nexcloud sur Fedora server et pour plus de sécurité et plus d’efficacité, séparer les middlewares et les applications sur ces différents serveurs. Je pars sur 3 serveurs, on peut faire évoluer le code pour en ajouter plus, notamment Redis en master-slave, Mariadb en Master/Slave et un loadbalancer nginx. Je mets en ligne un de mes premiers codes Terraform fonctionnel. Il est plus simple à comprendre mais pas super optimisé/industrialisé. Dans des articles ultérieurs, je mettrai des codes Terraform pour de l’infra scalable, c’est plus sexy. J’ai essayé dans les playbooks ansible d’adapter les règles SElinux pour que l’application Nextcloud fonctionne en mode enforcing, et ça passe: c’est toujours mieux avec. Un truc sympa à faire également au niveau sécu, serait de relier le chiffrement de Nextcloud à la puce TPM émulée du serveur, dans le même registre je n’ai pas mis de rôle pour le durcissement des souches Fedora. Tout un programme…
Poursuivre la lecture « Installer Nextcloud sur Fedora Servers Cloud grâce à Terraform et Ansible, part1 »