Плейбук Ansible для установки HAProxy + TLS для работы с etcd
Структура каталогов имеет следующий вид:
1 2 3 4 5 6 7 |
etcd-ansible/ ├── inventory/ │ └── hosts ├── templates │ └── haproxy.cfg.j2 ansible.cfg playbook.yaml |
где,
playbook.yaml — плейбук установки HAProxy.
Вот пример простого Ansible playbook для установки и настройки HAProxy на серверах, работающих под управлением Ubuntu:
Пример Playbook для установки HAProxy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
- hosts: haproxy become: True tasks: - name: apt update apt: update_cache: yes - name: HAProxy install apt: name: haproxy state: present - name: Create configuration file template: src: haproxy.cfg.j2 dest: /etc/haproxy/haproxy.cfg - name: "Enable the haproxy service" command: systemctl enable haproxy - name: "Start the haproxy service" command: systemctl restart haproxy - name: Проверка статуса HAProxy command: systemctl status haproxy register: haproxy_status ignore_errors: yes - debug: var: haproxy_status.stdout |
Объяснение:
- Обновление списка пакетов: В этом шаге обновляется список доступных пакетов на серверах.
- Установка HAProxy: Мы используем модуль
apt
для установки HAProxy на целевых серверах. - Настройка конфигурации: Используем модуль
template
для копирования файла конфигурации HAProxy с помощью шаблона Jinja2. - Включение и запуск службы: Модуль
systemd
используется для того, чтобы включить и запустить HAProxy. - Проверка статуса: Выполняется проверка статуса сервиса HAProxy и выводится результат через
debug
.
inventory/hosts
1 2 3 4 5 6 7 8 9 |
[haproxy] haproxy1 ansible_host=31.128.39.18 ansible_user=root ansible_ssh_private_key_file="/home/dmitry/.ssh/id_ed25519" haproxy2 ansible_host=31.129.98.136 ansible_user=root ansible_ssh_private_key_file="/home/dmitry/.ssh/id_ed25519" [etcd] etcd1 ansible_host=31.128.39.18 ansible_user=root ansible_ssh_private_key_file="/home/dmitry/.ssh/id_ed25519" etcd2 ansible_host=31.129.98.136 ansible_user=root ansible_ssh_private_key_file="/home/dmitry/.ssh/id_ed25519" etcd3 ansible_host=45.147.179.134 ansible_user=root ansible_ssh_private_key_file="/home/dmitry/.ssh/id_ed25519" |
В секции [etcd] указываем IP адреса и доступы к etcd серверам, на которые через HAProxy будут проксироваться запросы.
Шаблон haproxy.cfg.j2
:
Создайте шаблон конфигурации HAProxy (templates/haproxy.cfg.j2
):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon defaults log global option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http frontend my-web bind 0.0.0.0:443 crt /etc/etcd/ssl/cert_crt_key.pem ca-file /etc/etcd/ssl/ca.crt ssl verify required mode http option forwardfor default_backend my-web backend my-web mode http balance roundrobin option http-use-htx {% for host in groups['etcd'] %} server {{host}} {{ hostvars[host].ansible_host }}:2379 ssl verify required crt /etc/etcd/ssl/cert_crt_key.pem ca-file /etc/etcd/ssl/ca.crt alpn h2,http/1.1 {% endfor %} |
frontend — куда будут приходить запросы.
backend — список серверов (server) etcd кластера, по которым будет распределена нагрузка.
Recommended Posts
Плейбук Ansible по развертыванию haproxy
15.02.2024