Требуемые условия завершения
Задание:
a) Реализуйте следующий функционал на инстансах Cloud-HA01 и Cloud-HA02:
- i. Установить и настроить HAProxy:
- 1. Настроить frontend для прослушивания портов 80 (HTTP) и 443 (HTTPS);
- 2. Настроить backend с балансировкой между веб-серверами Cloud-WEB01 и Cloud-WEB02, с использованием сети Internal-Net;
- 3. Использовать алгоритм балансировки round-robin;
- 4. При обращении на IP-адреса Cloud-HA01 и Cloud-HA02 из сети Management-Net с инстанса Cloud-ADM, как на порт 80 так и на порт 443, должно выводиться содержимое веб-приложения развёрнутого на Cloud-WEB01 и Cloud-WEB2, в случае обращения на порт 443 у Cloud-ADM не должно возникать никаких проблем с сертификатами (не допускается использование «Добавления исключений»).
Вариант реализации:
Cloud-ADM:
- Вся дальнейшая работа реализуется в контексте директории /home/altlinux/bin/ansible:
cd /home/altlinux/bin/ansible
- Создадим файл 'haproxy_deploy_playbook.yml', в котором последовательно будем описывать всё что касается настройки серверов Cloud-HA01 и Cloud-HA02 в контексте данного задания:
vim haproxy_deploy_playbook.yml
-
- Добавляем следующее содержимое:
- см. комментарии в коде;
- Добавляем следующее содержимое:
---
- name: Install HAProxy
hosts: ha
become: true
tasks:
# Установка пакета "haproxy"
- name: Install HAProxy
community.general.apt_rpm:
name: haproxy
state: present
update_cache: true
# Копирование конфигурационного файла 'haproxy.cfg' из шаблона
- name: Copy file 'haproxy.cfg'
ansible.builtin.template:
src: templates/haproxy.cfg.j2
dest: /etc/haproxy/haproxy.cfg
notify:
- Restarted HAProxy
# Копирование сертификата для haproxy
- name: Copy certificate for HAProxy
ansible.builtin.copy:
src: files/www.pem
dest: /var/lib/ssl/www.pem
notify:
- Restarted HAProxy
# Запуск и добавление в автозагрузку haproxy
- name: Started and enabled HAProxy
ansible.builtin.systemd:
name: haproxy
state: restarted
enabled: true
handlers:
- name: Restarted HAProxy
ansible.builtin.systemd:
name: haproxy
state: restarted
- В директории templates создаём файл шаблона "haproxy.cfg.j2":
vim templates/haproxy.cfg.j2
-
- и указываем следующее содержимое:
global
log /dev/log daemon
chroot /var/lib/haproxy
pidfile /run/haproxy.pid
maxconn 4000
user _haproxy
group _haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend http_front
bind *:80
bind *:443 ssl crt /var/lib/ssl/www.pem
default_backend http_back
frontend pg_frontend
bind *:5432
mode tcp
default_backend pg_backend
backend http_back
balance roundrobin
server cloud-web01 192.168.10.3:80 check
server cloud-web02 192.168.10.4:80 check
backend pg_backend
mode tcp
balance leastconn
option tcp-check
server db_master 192.168.10.5:5432 check port 5432 inter 2s rise 2 fall 3
server db_replica 192.168.10.6:5432 check port 5432 inter 2s rise 2 fall 3 backup
- Создаём сертификат для haproxy:
openssl genrsa -out files/www.key 2048
openssl req -key files/www.key -new -out files/www.csr
cat <<EOF > files/www.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName=@alt_names
[alt_names]
DNS.1=www.au.team
IP.1=192.168.10.65
IP.2=192.168.10.66
IP.3=192.168.10.7
EOF
openssl x509 -req -CA ca.crt -CAkey ca.key -in files/www.csr -out files/www.crt -days 365 -CAcreateserial -extfile files/www.ext
cat files/www.key files/www.crt > files/www.pem
- Запускаем playbook для настройки веб-серверов:
ansible-playbook haproxy_deploy_playbook.yml
-
- Результат:
- В файл /etc/hosts добавляем 2 записи на Cloud-ADM:
- Приложение должно быть доступно по https://www.au.team а также выполнено подключение к БД:
- При повторном обращении отрабатывает балансировка:
Последнее изменение: понедельник, 21 июля 2025, 15:27