158 lines
3.8 KiB
Markdown
158 lines
3.8 KiB
Markdown
# role_keepalived
|
|
|
|
Rôle de déploiement de keepalived.
|
|
|
|
## Dépendance
|
|
|
|
Le rôle *users* est requis afin que l'utilisateur dédié exécutant les scripts définis via `keepalived_track_scripts` soit créé.
|
|
|
|
## Variables
|
|
|
|
### keepalived_uid
|
|
|
|
Identifiant unique permettant d'identifer les membres.
|
|
|
|
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
|
|
|
|
### keepalived_priority
|
|
|
|
Priorité de la machine pour prendre l'IP de failover.<br>
|
|
Ce chiffre doit être différent sur chaque machine portant le même identifiant unique.
|
|
|
|
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
|
|
|
|
### keepalived_interface
|
|
|
|
Interface sur laquelle l'IP de failover sera montée.
|
|
|
|
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
|
|
|
|
### keepalived_mail_to
|
|
|
|
Adresse mail sur laquelle envoyer les alertes.
|
|
|
|
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
|
|
|
|
### keepalived_mail_from
|
|
|
|
Adresse mail source depuis laquelle partent les alertes.<br>
|
|
Le serveur d'envoi (smtp) est défini par défaut sur localhost.
|
|
|
|
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
|
|
|
|
### keepalived_ipv4
|
|
|
|
Adresse IPv4 de failover.
|
|
|
|
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
|
|
|
|
### keepalived_ipv6
|
|
|
|
Adresse IPv6 de failover.
|
|
|
|
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
|
|
|
|
### keepalived_peers
|
|
|
|
Passer en unicast en utilisant cette liste d'IP.
|
|
|
|
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
|
|
|
|
### keepalived_track_scripts
|
|
|
|
Liste de script dont le code retour doit être à zéro pour que le membre conserve ou puisse prendre l'IP de failover.
|
|
|
|
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
|
|
|
|
### keepalived_track_processes
|
|
|
|
Liste de processus devant fonctionner pour que le membre conserve ou puisse prendre l'IP de failover.
|
|
|
|
*<span style="text-decoration: underline">Valeur par défaut:</span> aucune*
|
|
|
|
## Exemples
|
|
|
|
Dans les exemples ci-dessous, j'utilise aussi le rôle *nftables* afin d'installer et configurer le pare-feu logiciel éponyme.
|
|
|
|
### host_vars/infra-gw-2315a.nyx.ykn.local.yml
|
|
|
|
```yaml
|
|
---
|
|
|
|
# BEGIN role_ifupdown
|
|
ifupdown_interfaces:
|
|
- interface: eth0
|
|
ipv4:
|
|
inet: static
|
|
address: 192.168.50.250
|
|
mask: 24
|
|
dns: 192.168.50.11 192.168.50.16
|
|
ipv6:
|
|
inet: static
|
|
address: fd00:ff50::d250
|
|
mask: 64
|
|
dns: fd00:ff50::d011 fd00:ff50::d016
|
|
- interface: eth1
|
|
ipv4:
|
|
inet: static
|
|
address: 192.168.1.51
|
|
mask: 24
|
|
dns: 192.168.1.254
|
|
ipv6:
|
|
inet: auto
|
|
# END role_ifupdown
|
|
```
|
|
|
|
### group_vars/gw.yml
|
|
|
|
```yaml
|
|
---
|
|
|
|
# BEGIN role_users
|
|
users:
|
|
- name: keepalived_script
|
|
comment: "Dedicated user for keepalived script"
|
|
update_password: on_create
|
|
password_lock: true
|
|
shell: /bin/bash
|
|
# END role_users
|
|
|
|
# BEGIN role_nftables
|
|
nftables_rules:
|
|
- filename: keepalived
|
|
rules:
|
|
- ip saddr 192.168.50.250 accept
|
|
- ip saddr 192.168.50.251 accept
|
|
- ip saddr 192.168.50.252 accept
|
|
# END role_nftables
|
|
|
|
# BEGIN role_keepalived
|
|
keepalived_ipv4: 192.168.50.254/24
|
|
keepalived_ipv6: fd00:ff50::d254/64
|
|
|
|
keepalived_uid: "{{ keepalived_ipv4 | split('.') | last | split('/') | first }}"
|
|
|
|
keepalived_track_scripts:
|
|
- name: check_nftables_service
|
|
interval: 5
|
|
command: /usr/bin/systemctl is-active nftables.service
|
|
# END role_keepalived
|
|
```
|
|
|
|
### playbook.yml
|
|
|
|
```yaml
|
|
---
|
|
|
|
- name: Déployer les passerelles réseau
|
|
hosts: gateways
|
|
vars:
|
|
primary_interface: "{{ ifupdown_interfaces | first }}"
|
|
keepalived_priority: "{{ 255 - (primary_interface.ipv4.address | split('.') | last | int) }}"
|
|
keepalived_interface: "{{ primary_interface.interface }}"
|
|
roles:
|
|
- name: users
|
|
- name: nftables
|
|
- name: keepalived
|
|
```
|