# Інструкція з налаштування кластеру шлюзів безпечного обміну на стороні вебклієнта в системі «Трембіта»

# 1. Передмова

<span lang="UK">За замовченням вебклієнт має можливість надсилати запити тільки на одну кінцеву точку (шлюз безпечного обміну своєї організації).</span>

[![image.png](https://docs.trembita.gov.ua/uploads/images/gallery/2024-06/scaled-1680-/PDj30IRDOhmzqiXZ-image.png)](https://docs.trembita.gov.ua/uploads/images/gallery/2024-06/PDj30IRDOhmzqiXZ-image.png)

<span lang="UK"> </span>

<span lang="RU">Це</span> <span lang="RU">призводить до того, що у разі</span> <span lang="RU">відмови</span> <span lang="RU">даного</span> <span lang="RU">шлюзу безпечного</span> <span lang="RU">обміну</span> <span lang="RU">вебклієнт не зможе автоматично переключитись на інший</span> <span lang="RU">шлюз безпечного</span> <span lang="RU">обміну</span> <span lang="RU">та не зможе</span> <span lang="RU">використовувати</span> <span lang="RU">більше одного шлюзу безпечного</span> <span lang="RU">обміну для підвищення</span> <span lang="RU">продуктивності</span><span lang="UK">.</span>

<span lang="RU">Для вирішення</span> <span lang="RU">цієї</span> <span lang="RU">проблеми</span> <span lang="RU">необхідно</span> <span lang="RU">створити кластер із</span> <span lang="RU">шлюзів</span> <span lang="RU">безпечного</span> <span lang="RU">обміну</span><span lang="UK">, </span><span lang="RU">що</span> <span lang="RU">надасть</span> <span lang="RU">змогу</span> <span lang="RU">підключити</span> <span lang="RU">вебклієнт до двох</span> <span lang="RU">чи</span> <span lang="RU">більше</span> <span lang="RU">шлюзів</span> <span lang="RU">безпечного</span> <span lang="RU">обміну</span> <span lang="RU">одночасно</span><span lang="UK">.</span><span lang="RU"> В даній інструкції як балансувальник</span> <span lang="RU">навантаження</span> <span lang="RU">пропонується</span> <span lang="RU">використовувати</span> <span lang="RU">програмний</span> <span lang="RU">засіб</span><span lang="UK"> Nginx у режимі reverse-proxy, </span><span lang="RU">встановлений </span><span lang="UK">на операційній системі </span>Ubuntu Server<span lang="UK">, але можливі інші варіанти реалізації балансувальника на інших операційних системах.</span>

[![image.png](https://docs.trembita.gov.ua/uploads/images/gallery/2024-06/scaled-1680-/O5AZSfCQShk0hCT9-image.png)](https://docs.trembita.gov.ua/uploads/images/gallery/2024-06/O5AZSfCQShk0hCT9-image.png)

<span lang="UK"> </span>

<span lang="RU">Всі дії зі створення кластеру, описані в даній інструкції, викон</span><span lang="UK">уються Адміністратором локальних компонентів (системним адміністратором).</span>

# 2. Передумови встановлення

<span lang="UK">Для роботи балансувальника навантаження необхідно створити окрему віртуальну машину, мінімальні апаратні характеристики якої наведені в таблиці 2.1.</span>

<span lang="UK">Таблиця 2.1 - Мінімальні апаратні характеристики для балансувальника навантаження</span>

<table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" id="bkmrk-%D0%9D%D0%B0%D0%B7%D0%B2%D0%B0-%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%83-%D0%9A%D1%96%D0%BB" style="border-collapse: collapse; width: 800px;" width="633"><thead><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;"><td style="width: 128.65px;"><span lang="UK">Назва компоненту</span>

</td><td style="width: 139.65px;"><span lang="UK">Кількість ядер CPU</span>

</td><td style="width: 86.65px;"><span lang="UK">RAM, GB</span>

</td><td style="width: 118.65px;"><span lang="UK">HDD, GB</span>

</td><td style="width: 170.25px;"><span lang="UK">Операційна система</span>

</td><td style="width: 176.238px;"><span lang="UK">Встановлене програмне забезпечення</span>

</td></tr></thead><tbody><tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes;"><td style="width: 128.65px;"><span lang="UK">Балансувальник навантаження</span>

</td><td style="width: 139.65px;"><span lang="UK">2</span>

</td><td style="width: 86.65px;">2

</td><td style="width: 118.65px;">5

</td><td style="width: 170.25px;">Ubuntu Server 18.04.4 LTS 64bit

</td><td style="width: 176.238px;">Nginx

</td></tr></tbody></table>

<span lang="UK">Програмне забезпечення балансувальника навантаження функціонує на базі операційної системи Ubuntu Server 18.04.4 LTS 64bit. </span>

<span lang="UK">Завантажити інсталяційний образ </span><span lang="UK">операційної системи Ubuntu </span>Server<span lang="UK"> 18.04.4 LTS 64bit</span><span lang="UK"> можна з репозиторію системи «Трембіта».</span>

<span lang="UK">Процес інсталяції даної операційної системи наведено в [Інструкції з інсталяції операційної системи Ubuntu Server 18.04.4 x64.](https://docs.trembita.gov.ua/books/instrukciia-z-instaliaciyi-operaciinoyi-sistemi-ubuntu-server-18044-x64)</span>

<p class="callout warning"><span lang="UK">**Важливо!** </span><span lang="UK"><span style="color: rgb(0, 0, 0);">Перед</span> виконанням подальших кроків, організація повинна мати встановлені та зареєстровані у відповідному середовищі згідно Інструкції з інсталяції локальних компонентів системи «Трембіта» шлюзи безпечного обміну. Також на всіх шлюзах безпечного обміну, що будуть працювати в кластері, повинна бути зареєстрована (-і) підсистема (-ми) з однаковою назвою</span><span lang="RU">!</span></p>

# 3. Встановлення та налащтування балансувальника навантаження

<span lang="UK">Для встановлення балансувальника навантаження на відповідній віртуальній машині необхідно виконати наступні кроки:</span>

<span lang="UK">1. Закрити доступ до сторонніх репозиторіїв за допомогою виконання наступної команди:</span>

```
sudo sed -i 's/^[A-Za-z0-9]/#&/' /etc/apt/sources.list
```

<span lang="UK">2. Додати у операційну систему репозиторій з пакетами системи «Трембіта»:</span>

```
echo 'deb https://project-repo.trembita.gov.ua:8081/repository/ss-1.12.6/ bionic main' | sudo tee -a /etc/apt/sources.list
```

<span lang="UK">Перевірити результат виконання команд можна за допомогою текстового редактора nano, відкривши файл на редагування за допомогою виконання наступної команди:</span>

```
nano /etc/apt/sources.list
```

<span lang="UK">3. Додати GPG ключ репозиторію за допомогою виконання наступної команди:</span>

```
sudo wget -O - https://project-repo.trembita.gov.ua:8081//public-keys/public.key.txt | sudo apt-key add -
```

<span lang="UK">Якщо команду виконано успішно, буде виведено повідомлення «ОК».</span>

<span lang="UK">4. </span><span lang="RU">Оновити списки паке</span><span lang="UK">тів, та в</span><span lang="RU">становити </span>Nginx <span lang="RU">за допомогою </span><span lang="UK">за допомогою послідовного виконання наступних команд</span><span lang="RU">: </span>

```
sudo apt update
sudo apt install -y nginx
```

<span lang="RU">5. </span><span lang="UK">Створити файл /etc/nginx/conf.d/upstream.conf та відкрити його на редагування за допомогою виконання наступної команди:</span>

```
sudo nano /etc/nginx/conf.d/upstream.conf
```

<span lang="UK">6. Додати наступні рядки до новоствореного файлу:</span>

```
upstream ss_cluster {
  server <Your-security-server-1-IP>;
  server <Your-security-server-2-IP>;
}
```

<span lang="UK">де &lt;Your-security-server-1-IP&gt; — внутрішня (локальна) </span>IP<span lang="UK">-адреса першого шлюзу безпечного обміну, який буде працювати в кластері,</span>

<span lang="UK">&lt;Your-security-server-2-IP&gt; — внутрішня (локальна) </span>IP<span lang="UK">-адреса другого шлюзу безпечного обміну, який буде працювати в кластері.</span>

![](https://docs.trembita.gov.ua/uploads/images/gallery/2024-06/CrVibwGpyuwCCndE-embedded-image-wpaolroj.png)

<span lang="UK">7. Створити файл /etc/nginx/conf.d/</span>upstream<span lang="UK">\_</span>log<span lang="UK">\_</span>def<span lang="UK">.</span>conf <span lang="UK">та відкрити його на редагування за допомогою виконання наступної команди:</span>

```
sudo nano /etc/nginx/conf.d/upstream_log_def.conf
```

<span lang="UK">8. Додати наступні рядки до новоствореного файлу:</span>

```
log_format upstreamlog '[$time_local] $remote_addr - $remote_user - $server_name $host to: $upstream_addr: $request $status upstream_response_time $upstream_response_time msec $msec request_time $request_time';
```

![](https://docs.trembita.gov.ua/uploads/images/gallery/2024-06/WtAHt65FeSJgM0cA-embedded-image-yif7215q.png)

<span lang="UK">9. Створити файл </span>/etc/nginx/sites-enabled/default <span lang="UK">та відкрити його на редагування за допомогою виконання наступної команди:</span>

```
sudo nano /etc/nginx/sites-enabled/default
```

<span lang="UK">10. Додати наступні рядки до новоствореного файлу (замінити вміст файлу, якщо даний файл не порожній):</span>

```
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    location / {
        proxy_pass http://ss_cluster;
        access_log /var/log/nginx/access_upstream.log upstreamlog;
    }
}
```

<span lang="UK">![](https://docs.trembita.gov.ua/uploads/images/gallery/2024-06/jlJX1oGPSwY8koVT-embedded-image-lrjjyd03.png)</span>

<span lang="UK">11. Перевірити конфігурацію за допомогою виконання наступної команди:</span>

```
sudo nginx -t
```

<span lang="UK">Якщо перевірку конфігурації пройдено успішно, буде виведено повідомлення «</span>test is successful<span lang="UK">»:</span>

![](https://docs.trembita.gov.ua/uploads/images/gallery/2024-06/na7RrlY0PYyPMucS-embedded-image-rc7zsiav.png)

<span lang="UK">12. Перезавантажити сервіс NGINX за допомогою виконання наступної команди:</span>

```
sudo service nginx reload
```

<span lang="UK">Після закінчення налаштування балансувальника навантаження необхідно переналаштувати вебклієнт таким чином, щоб запити надсилались на мережеву адресу балансувальника навантаження (замість </span>IP<span lang="UK">-адреси шлюзу безпечного обміну необхідно вказати </span>IP<span lang="UK">-адресу балансувальника навантаження, інши параметри запиту залишити без зміни), який буде автоматично розподіляти запити між шлюзами безпечного обміну порівну. Шлях URL в запиті буде повністю переадресовуватися на шлю</span><span lang="RU">з</span><span lang="UK">и безпечного обміну</span>

<span lang="UK">Приклад запиту до </span>REST<span lang="RU">-</span><span lang="UK">сервісу через балансувальник навантаження буде виглядати наступним чином:</span>

```
http://<Load-Balancer-IP_address>/restapi
```

<span lang="UK">де &lt;</span>Load<span lang="UK">-</span>Balancer<span lang="UK">-</span>IP<span lang="UK">\_</span>address<span lang="UK">&gt; — локальна </span>IP<span lang="UK">-адреса балансувальника навантаження.</span>