GSP041

Огляд
Внутрішній розподілювач навантаження додатків потрібен для створення надійних, безпечних і простих у керуванні внутрішніх додатків, які забезпечують роботу вашої компанії. На цьому практичному занятті ви дізнаєтеся, як розподіляти мережевий трафік у приватній хмарній мережі, не надаючи віртуальним машинам прямого доступу до мережі Інтернет. Це забезпечить ефективну роботу ваших сервісів і захистить їх.
Ви створите спрощений, але дуже поширений архітектурний шаблон, що має наведені нижче рівні.
- Вебрівень (загальнодоступний вебсайт), якому потрібна допомога іншого внутрішнього сервісу.
- Рівень внутрішнього сервісу (калькулятор простих чисел), який виконує певні завдання. Навантаження розподіляється між кількома машинами.
Завдяки такому підходу система працюватиме безперебійно, навіть якщо один із компонентів внутрішнього сервісу перевантажиться або вийде з ладу, оскільки розподілювач навантаження автоматично переспрямовуватиме запити на справні машини.
Завдання
- Дізнайтеся, з яких компонентів складається внутрішній розподілювач навантаження.
- Створіть групу серверних машин (калькулятор простих чисел).
- Налаштуйте внутрішній розподілювач навантаження, щоб спрямовувати внутрішній трафік на серверні машини.
- Перевірте роботу внутрішнього розподілювача навантаження з іншої внутрішньої машини.
- Налаштуйте загальнодоступний вебсервер, який використовує внутрішній розподілювач навантаження, щоб отримувати результати від внутрішнього сервісу ("калькулятора простих чисел").
Рівень попередньої підготовки
- Базові знання про Google Cloud Compute Engine: розуміти, що таке екземпляр віртуальної машини.
- Основні поняття мережі: знати, що таке IP-адреса.
- Основний командний рядок Unix/Linux: уміти вводити команди в терміналі.
- Певні знання про приватні хмарні сховища (VPC): розуміти, що ваші ресурси Google Cloud розміщено в приватній мережі.
Налаштування й вимоги
Перш ніж натиснути кнопку Start Lab (Почати практичну роботу)
Ознайомтеся з наведеними нижче вказівками. На виконання практичного заняття відводиться обмежений час, і його не можна призупинити. Щойно ви натиснете Почати заняття, з’явиться таймер, який показуватиме, скільки часу для роботи з ресурсами Google Cloud у вас залишилося.
Ви зможете виконати практичне заняття в дійсному робочому хмарному середовищі (не в симуляції або демонстраційному середовищі). Для цього на час практичного заняття вам надаються тимчасові облікові дані для реєстрації і входу в Google Cloud.
Для цього практичного заняття потрібно мати:
- стандартний вебпереглядач, наприклад Chrome (рекомендовано);
Примітка. Виконуйте практичне заняття в анонімному вікні вебпереглядача (рекомендовано). Так ви уникнете додаткової плати, що може стягуватися з вашого особистого облікового запису внаслідок його помилкового використання замість облікового запису для навчання.
- достатню кількість часу, оскільки почавши практичне заняття, ви не зможете призупинити його.
Примітка. Для виконання цього практичного заняття використовуйте лише обліковий запис для навчання, оскільки з іншого облікового запису Google Cloud може стягуватися плата.
Як почати виконувати практичну роботу й увійти в Google Cloud Console
-
Натисніть кнопку Start Lab (Почати практичне заняття). Якщо за практичне заняття необхідно заплатити, відкриється вікно, де ви зможете обрати спосіб оплати.
Ліворуч розміщено панель "Відомості про практичне заняття" з такими компонентами:
- кнопка "Відкрити консоль Google";
- час до закінчення;
- тимчасові облікові дані, які потрібно використовувати для доступу до цього практичного заняття;
- інша інформація, необхідна для виконання цього практичного заняття.
-
Натисніть Відкрити консоль Google або натисніть правою кнопкою миші й виберіть Відкрити анонімне вікно, якщо ви використовуєте вебпереглядач Chrome.
Завантажаться необхідні ресурси. Потім відкриється нова вкладка зі сторінкою "Увійти".
Порада. Упорядковуйте вкладки в окремих вікнах, розміщуючи їх поруч.
Примітка. Якщо з’явиться вікно Виберіть обліковий запис, натисніть Вибрати інший обліковий запис.
-
За потреби скопіюйте значення в полі Username (Ім’я користувача) нижче й вставте його у вікні Вхід.
{{{user_0.username | "Username"}}}
Поле "Ім’я користувача" також можна знайти на панелі "Відомості про практичне заняття".
-
Натисніть Далі.
-
Скопіюйте значення в полі Password (Пароль) нижче й вставте його у вікні Welcome (Привітання).
{{{user_0.password | "Password"}}}
Поле "Пароль" також можна знайти на панелі "Відомості про практичне заняття".
-
Натисніть Далі.
Важливо. Обов’язково використовуйте облікові дані, призначені для відповідного практичного заняття. Не використовуйте облікові дані Google Cloud.
Примітка. Якщо ввійти у власний обліковий запис Google Cloud, може стягуватися додаткова плата.
-
Що від вас очікується
- Прийміть Умови використання.
- Не додавайте способи відновлення й двохетапну перевірку (оскільки це тимчасовий обліковий запис).
- Не реєструйте безкоштовні пробні версії.
Через кілька секунд консоль Google Cloud відкриється в новій вкладці.
Примітка. Щоб отримати доступ до продуктів і сервісів Google Cloud, натисніть меню навігації або введіть назву сервісу чи продукту в полі пошуку.
Як активувати Cloud Shell
Cloud Shell – це віртуальна машина з попередньо завантаженими інструментами для розробників. Вона містить головний каталог обсягом 5 ГБ постійної пам’яті й працює в середовищі Google Cloud. Cloud Shell надає доступ до ресурсів Google Cloud через командний рядок.
-
Угорі консолі Google Cloud натисніть Activate Cloud Shell (Активувати Cloud Shell)
.
-
У вікнах, що відкриються, виконайте наведені нижче дії.
- У вікні з інформацією про Cloud Shell натисніть Continue (Далі).
- Дозвольте Cloud Shell використовувати ваші облікові дані, щоб здійснювати виклики Google Cloud API.
Щойно ви підключитеся, вас буде автентифіковано, а проєкт отримає ваш Project_ID (Ідентифікатор проєкту) – . Вивід міститиме рядок зі значенням Project_ID (Ідентифікатор проєкту) для цього сеансу:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
– це інструмент командного рядка для Google Cloud. Він входить у пакет Cloud Shell і підтримує функцію автозавершення клавішею TAB.
- (Необов’язково) Щоб вивести поточне ім’я облікового запису, введіть таку команду:
gcloud auth list
- Натисніть Authorize (Авторизувати).
Вивід:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (Необов’язково) Щоб вивести ідентифікатор проєкту, введіть таку команду:
gcloud config list project
Вивід:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Примітка. Щоб знайти повну документацію щодо gcloud
, перегляньте посібник з інтерфейсу командного рядка gcloud у Google Cloud.
Укажіть регіон і зону
- Укажіть регіон і зону проєкту для цього практичного заняття:
gcloud config set compute/region {{{project_0.default_region | Region}}}
gcloud config set compute/zone {{{project_0.default_zone | Zone}}}
- Створіть змінну для регіону:
export REGION={{{project_0.default_region | Region}}}
- Створіть змінну для зони:
export ZONE={{{project_0.default_zone | Zone}}}
Щоб дізнатися більше про регіони й зони, перегляньте відповідну документацію.
Примітка. Якщо ви запускаєте командний рядок gcloud
на власній машині, налаштування конфігурації зберігаються в різних сеансах. Однак у Cloud Shell вам потрібно вказувати їх для кожного нового сеансу або повторного підключення.
Завдання 1. Створіть віртуальне середовище
Віртуальне середовище впорядковує програмне забезпечення проєкту, і завдяки ньому ваш код завжди може працювати з потрібними версіями інструментів.
За допомогою віртуальних середовищ Python можна ізолювати встановлення пакетів від системи.
- Установіть середовище
virtualenv
:
sudo apt-get install -y virtualenv
- Створіть віртуальне середовище:
python3 -m venv venv
- Активуйте віртуальне середовище:
source venv/bin/activate
Завдання 2. Створіть групу керованих екземплярів для серверної частини
За допомогою такої групи керованих екземплярів Google Cloud може автоматично створювати й підтримувати ідентичні копії вашого сервісу. Якщо одна копія не працює, Google Cloud замінює її – це підвищує надійність сервісу.
Створіть скрипт запуску
Цей скрипт схожий на набір вказівок, яких дотримуватиметься кожна нова віртуальна машина у вашій групі під час запуску. Скрипт міститиме невеликий вебсервер, написаний мовою Python. Вебсервер визначатиме тип числа: якщо воно просте, ви отримаєте значення True (істина), якщо ні – False (хиба).
- Спочатку створіть скрипт
backend.sh
у головному каталозі:
touch ~/backend.sh
- Щоб відкрити редактор, натисніть відповідний значок у верхній частині Cloud Shell. Якщо з’явиться запит, натисніть Open in a new window (Відкрити в новому вікні).

Примітка. Якщо значка редактора коду немає, закрийте панель ліворуч, натиснувши значок меню навігації.
Після запуску редактора коду Cloud Shell переміститься в нове вікно. Редактор коду відкриється, і через кілька секунд з’явиться робоча область.
-
На панелі ліворуч виберіть файл backend.sh
.
-
Додайте наведений нижче скрипт у редактор праворуч.
sudo chmod -R 777 /usr/local/sbin/
sudo cat << EOF > /usr/local/sbin/serveprimes.py
import http.server
def is_prime(a): return a!=1 and all(a % i for i in range(2,int(a**0.5)+1))
class myHandler(http.server.BaseHTTPRequestHandler):
def do_GET(s):
s.send_response(200)
s.send_header("Content-type", "text/plain")
s.end_headers()
s.wfile.write(bytes(str(is_prime(int(s.path[1:]))).encode('utf-8')))
http.server.HTTPServer(("",80),myHandler).serve_forever()
EOF
nohup python3 /usr/local/sbin/serveprimes.py >/dev/null 2>&1 &
- Натисніть File (Файл) > Save (Зберегти).
Створіть шаблон екземпляра
- На панелі інструментів Cloud Shell натисніть Open Terminal (Відкрити термінал). Введіть наведену нижче команду, щоб створити шаблон екземпляра
primecalc
.
gcloud compute instance-templates create primecalc \
--metadata-from-file startup-script=backend.sh \
--no-address --tags backend --machine-type=e2-medium
Це слугуватиме макетом для серверних віртуальних машин. Зверніть увагу на частину --no-address
: це означає, що віртуальні машини не матимуть доступу до мережі Інтернет із міркувань безпеки.
Відкрийте брандмауер
Потрібно створити правило брандмауера, що дозволяє трафік через порт 80 (стандартний трафік HTTP) до серверних віртуальних машин. Це важливо для взаємодії між ними й внутрішнім розподілювачем навантаження додатків і перевірками стану.
- Відкрийте порт
80
у брандмауері:
gcloud compute firewall-rules create http --network default --allow=tcp:80 \
--source-ranges {{{project_0.startup_script.selected_cidr | IP}}} --target-tags backend
Щоб підтвердити виконання завдання, натисніть Підтвердити виконання нижче.
Створіть шаблон екземпляра й відкрийте порт 80 у брандмауері
Створіть групу екземплярів
- Створіть групу керованих екземплярів під назвою
backend
. Спочатку створіть 3 екземпляри:
gcloud compute instance-groups managed create backend \
--size 3 \
--template primecalc \
--zone $ZONE
- Коли скрипт виконається, поверніться на вкладку консолі. Перейдіть у розділ Compute Engine > VM instances (Екземпляри віртуальних машин). Група екземплярів має створити три серверні віртуальні машини.

Серверні віртуальні машини готові обробляти трафік.
Щоб підтвердити виконання завдання, натисніть Підтвердити виконання нижче.
Створіть групу екземплярів
Завдання 3. Налаштуйте внутрішній розподілювач навантаження
Потрібно створити єдиний приватний VIP-вхід для внутрішнього сервісу. З таким входом інші внутрішні додатки зможуть надійно отримувати доступ до калькулятора простих чисел, не знаючи, яка саме серверна віртуальна машина активна або доступна.
Тепер час налаштувати внутрішній розподілювач навантаження й підключити його до щойно створеної групи екземплярів.
Внутрішній розподілювач навантаження складається з трьох основних частин, описаних нижче.
- Правило переадресування. Це фактична приватна ІР-адреса, на яку надсилатимуть запити інші внутрішні сервіси. Правило "переадресовує" трафік до вашого серверного сервісу.
- Серверний сервіс. Визначає, як розподілювач навантаження розосереджує трафік між екземплярами віртуальних машин, а також передбачає перевірку стану.
- Перевірка стану. Це безперервне відстежування стану серверних віртуальних машин. Розподілювач навантаження надсилає трафік лише до тих машин, які проходять перевірку стану, щоб ваш сервіс завжди був доступний.
На наведеній нижче схемі показано, як розподіляється навантаження між екземплярами в кількох групах серверної частини в різних зонах.

Створіть перевірку стану
- Завдяки перевірці стану розподілювач навантаження надсилає трафік лише до справних екземплярів. Ваш серверний сервіс – це сервер HTTP, тому потрібно перевірити, чи дає він відповідь "200 OK" для певного URL-шляху (у цьому випадку
/2
, щоб перевірити, чи є 2 простим числом).
gcloud compute health-checks create http ilb-health --request-path /2
Оскільки сервіс HTTP надається, потрібно перевірити, чи заповнено відповідь 200 для певного URL-шляху (у цьому випадку /2
, щоб перевірити, чи є 2 простим числом).
Створіть серверний сервіс
- Створіть серверний сервіс із назвою
prime-service
:
gcloud compute backend-services create prime-service \
--load-balancing-scheme internal --region=$REGION \
--protocol tcp --health-checks ilb-health
Цей сервіс зв’яже перевірку стану з групою екземплярів.
Додайте групу екземплярів у серверний сервіс
- Підключіть групу екземплярів серверної частини до серверного сервісу prime-service. Так розподілювач навантаження знатиме, якими машинами він має керувати.
gcloud compute backend-services add-backend prime-service \
--instance-group backend --instance-group-zone=$ZONE \
--region=$REGION
Створіть правило переадресування
- Насамкінець створіть правило переадресування під назвою
prime-lb
зі статичною IP-адресою .
gcloud compute forwarding-rules create prime-lb \
--load-balancing-scheme internal \
--ports 80 --network default \
--region=$REGION --address {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}} \
--backend-service prime-service
Тепер ваш внутрішній сервіс обчислення простих чисел повністю налаштовано, і до нього можна надсилати запити через внутрішню IP-адресу.
Щоб підтвердити виконання завдання, натисніть Підтвердити виконання нижче.
Налаштуйте внутрішній розподілювач навантаження
Завдання 4. Протестуйте розподілювач навантаження
Ви маєте переконатися, що внутрішній розподілювач навантаження додатків правильно спрямовує трафік до серверних сервісів. Це означатиме, що інші внутрішні додатки можуть надійно підключатися до вашого сервісу через єдину стабільну IP-адресу, забезпечуючи безперервну роботу.
Щоб протестувати розподілювач навантаження, створіть новий екземпляр віртуальної машини в тій самій мережі, що й внутрішній розподілювач навантаження додатків. Він доступний лише з приватної хмарної мережі, а не безпосередньо із середовища Cloud Shell, розташованого за межами цієї мережі.
- Створіть простий тестовий екземпляр за допомогою
gcloud
у Cloud Shell:
gcloud compute instances create testinstance \
--machine-type=e2-standard-2 --zone $ZONE
- Потім підключіться до нього через SSH:
gcloud compute ssh testinstance --zone $ZONE
Якщо з’явиться запит, введіть Y і двічі натисніть клавішу Enter.
Виконайте запит до розподілювача навантаження
- У тестовому екземплярі за допомогою команди
curl
надішліть запит на ІР-адресу внутрішнього розподілювача навантаження додатків щодо того, чи є певні числа простими.
curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/2
curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/4
curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/5
Поруч із командним рядком відобразиться значення True (істина) або False (хиба), як показано нижче.
user@testinstance:~$ curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/2
Trueuser@testinstance:~$ curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/4
Falseuser@testinstance:~$ curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/5
Trueuser@testinstance:~$ exit
Ви побачите, що тип чисел визначено правильно: 2 й 5 є простими числами, а 4 – ні. Це підтверджує, що внутрішній розподілювач навантаження додатків працює. Він отримав запити й успішно переадресував їх на одну з ваших серверних віртуальних машин для обчислення простих чисел.
Сервіс правильно відповів, що 2 й 5 є простими числами, а 4 – ні.
- Вийдіть із тестового екземпляра:
exit
- Видаліть його, оскільки він більше не потрібен.
gcloud compute instances delete testinstance --zone=$ZONE
- Щоб підтвердити видалення, введіть Y.
Завдання 5. Створіть загальнодоступний вебсервер
Тепер ви знаєте, як загальнодоступний додаток (наприклад, вебсайт) може використовувати ваші внутрішні сервіси. Ви створите загальнодоступний вебсервер, який використовуватиме внутрішній сервіс "калькулятор простих чисел" (через внутрішній розподілювач навантаження додатків) для відображення матриці простих чисел.
- Спочатку створіть скрипт запуску для загальнодоступної інтерфейсної частини в головному каталозі:
touch ~/frontend.sh
- Редактор коду має бути відкритим. Якщо ні, запустіть редактор коду, вибравши його в Cloud Shell.

Через кілька секунд з’явиться робоча область.
- Додайте скрипт у редактор праворуч.
sudo chmod -R 777 /usr/local/sbin/
sudo cat << EOF > /usr/local/sbin/getprimes.py
import urllib.request
from multiprocessing.dummy import Pool as ThreadPool
import http.server
PREFIX="http://{{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/" #HTTP Load Balancer
def get_url(number):
return urllib.request.urlopen(PREFIX+str(number)).read().decode('utf-8')
class myHandler(http.server.BaseHTTPRequestHandler):
def do_GET(s):
s.send_response(200)
s.send_header("Content-type", "text/html")
s.end_headers()
i = int(s.path[1:]) if (len(s.path)>1) else 1
s.wfile.write("<html><body><table>".encode('utf-8'))
pool = ThreadPool(10)
results = pool.map(get_url,range(i,i+100))
for x in range(0,100):
if not (x % 10): s.wfile.write("<tr>".encode('utf-8'))
if results[x]=="True":
s.wfile.write("<td bgcolor='#00ff00'>".encode('utf-8'))
else:
s.wfile.write("<td bgcolor='#ff0000'>".encode('utf-8'))
s.wfile.write(str(x+i).encode('utf-8')+"</td> ".encode('utf-8'))
if not ((x+1) % 10): s.wfile.write("</tr>".encode('utf-8'))
s.wfile.write("</table></body></html>".encode('utf-8'))
http.server.HTTPServer(("",80),myHandler).serve_forever()
EOF
nohup python3 /usr/local/sbin/getprimes.py >/dev/null 2>&1 &
- Натисніть File (Файл) > Save (Зберегти).
Створіть екземпляр клієнтської частини
- У Cloud Shell створіть екземпляр під назвою
frontend
, на якому працюватиме цей вебсервер.
gcloud compute instances create frontend --zone=$ZONE \
--metadata-from-file startup-script=frontend.sh \
--tags frontend --machine-type=e2-standard-2
Відкрийте брандмауер для інтерфейсної частини
- Оскільки це загальнодоступний сервер, потрібно відкрити його брандмауер, щоб дозволити трафік із будь-якого джерела в Інтернеті (0.0.0.0/0) через порт 80.
gcloud compute firewall-rules create http2 --network default --allow=tcp:80 \
--source-ranges 0.0.0.0/0 --target-tags frontend
-
У меню навігації натисніть Compute Engine > VM instances (Екземпляри віртуальних машин). Якщо екземпляра frontend
немає, оновіть сторінку вебпереглядача.
-
Відкрийте зовнішню IP-адресу для інтерфейсної частини у вебпереглядачі:

Ви побачите матрицю, у якій усі прості числа до 100 позначено зеленим кольором:

- Додайте в шлях якесь число, наприклад http://your-ip/10000, щоб переглянути всі прості числа, починаючи із цього числа.

Примітка. Наведений скрипт запуску недостатньо ефективно обчислює прості числа. Крім того, він не має алгоритмів виявлення чи виправлення помилок. Якщо додати в шлях великі числа, час очікування сервісу буде перевищено.
Щоб підтвердити виконання завдання, натисніть Підтвердити виконання нижче.
Створіть загальнодоступний вебсервер
Вітаємо!
Вам вдалося створити надійний внутрішній сервіс за допомогою внутрішнього розподілювача навантаження додатків Google Cloud, а також продемонструвати, як загальнодоступний додаток може використовувати його в безпечний спосіб.
Наступні кроки/Докладніше
Навчання й сертифікація Google Cloud
…допомагають ефективно використовувати технології Google Cloud. Наші курси передбачають опанування технічних навичок, а також ознайомлення з рекомендаціями, що допоможуть вам швидко зорієнтуватися й вивчити матеріал. Ми пропонуємо курси різних рівнів – від базового до високого. Ви можете вибрати формат навчання (за запитом, онлайн або офлайн) відповідно до власного розкладу. Пройшовши сертифікацію, ви перевірите й підтвердите свої навички та досвід роботи з технологіями Google Cloud.
Посібник востаннє оновлено 18 липня 2025 року
Практичне заняття востаннє протестовано 18 липня 2025 року
© Google LLC 2025. Усі права захищено. Назва та логотип Google є торговельними марками Google LLC. Усі інші назви компаній і продуктів можуть бути торговельними марками відповідних компаній, з якими вони пов’язані.