1. Введение
Гибридная стратегия — это прагматичное решение, позволяющее адаптироваться к меняющимся требованиям рынка и постепенно модернизировать ваши приложения. Поддержка гибридных балансировщиков нагрузки Google Cloud (как внешних, так и внутренних HTTP(s)) расширяет возможности балансировки нагрузки в облаке на бэкэнды, расположенные как локально, так и в других облаках, и является ключевым фактором для вашей гибридной стратегии. Это может быть временным решением для миграции на современное облачное решение или постоянной частью ИТ-инфраструктуры вашей организации.

В этой лабораторной работе вы узнаете, как создать группу сетевых конечных точек (NEG) с использованием двух виртуальных машин, доступных через внешний глобальный балансировщик нагрузки HTTP(s). Хотя группа NEG в лабораторной работе находится в GCP, та же процедура используется для связи с общедоступными или локальными ресурсами, доступными по IP-адресу.
Что вы узнаете
- Создайте собственную VPC.
- Создайте две виртуальные машины (ВМ), используемые в качестве группы сетевых конечных точек (NEG).
- Создайте гибридный балансировщик нагрузки, серверную часть и соответствующие проверки работоспособности.
- Создайте правило брандмауэра, разрешающее доступ к балансировщику нагрузки.
- Для обеспечения возможности обновления пакетов из интернета будут созданы облачный маршрутизатор и NAT.
- Проверьте доступность группы сетевых конечных точек.
Что вам понадобится
- Знание балансировщиков нагрузки
Настройка среды для самостоятельного обучения
- Войдите в Cloud Console и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это ваш личный идентификатор для этого проекта. При условии соблюдения установленных правил именования, вы можете использовать любое название по своему усмотрению и изменять его в любое время.
- Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID), поэтому, если он вам не нравится, сгенерируйте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он "замораживается" после создания проекта.
- Далее вам потребуется включить оплату в Cloud Console, чтобы использовать ресурсы Google Cloud.
Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Обязательно следуйте инструкциям в разделе «Очистка», где указано, как отключить ресурсы, чтобы избежать дополнительных расходов после завершения этого урока. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.
В консоли GCP щелкните значок Cloud Shell на панели инструментов в правом верхнем углу:

Подготовка и подключение к среде займут всего несколько минут. После завершения вы должны увидеть что-то подобное:

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории можно выполнять с помощью обычного браузера.
2. Прежде чем начать
Внутри Cloud Shell убедитесь, что идентификатор вашего проекта указан правильно.
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] Perform setting your projectID: projectid=YOUR-PROJECT-ID echo $projectid
3. Создайте новую сеть VPC в пользовательском режиме.
В этом задании вы создадите виртуальную частную сеть (VPC), которая станет основой сети.
Сеть VPC
Из Cloud Shell
gcloud compute networks create hybrid-network-lb --subnet-mode custom
Создать подсеть
Из Cloud Shell
gcloud compute networks subnets create network-endpoint-group-subnet --network hybrid-network-lb --range 192.168.10.0/24 --region us-west1
Создать экземпляр Cloud NAT
Хотя это и не является обязательным условием для гибридной сети, вычислительному экземпляру необходимо подключение к интернету для загрузки приложений и обновлений.
В этом задании вам предстоит создать экземпляр облачного маршрутизатора и NAT, обеспечивающие подключение виртуальных машин к интернету.
Создать облачный маршрутизатор
Из Cloud Shell
gcloud compute routers create crnat --network hybrid-network-lb --region us-west1
Создать облачный NAT
Из Cloud Shell
gcloud compute routers nats create cloudnat --router=crnat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west1
4. Создайте два экземпляра виртуальной машины.
В этом задании вы создадите два экземпляра виртуальных машин с запущенным Apache, которые позже в ходе лабораторной работы объединятся в группу сетевых конечных точек (NEG).
В Cloud Shell создайте первый локальный экземпляр, on-prem-neg-1
gcloud compute instances create on-prem-neg-1 \
--zone=us-west1-a \
--tags=allow-health-check \
--image-family=debian-9 \
--image-project=debian-cloud \
--subnet=network-endpoint-group-subnet --no-address \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'
В Cloud Shell создайте первый локальный экземпляр, on-prem-neg-2
gcloud compute instances create on-prem-neg-2 \
--zone=us-west1-a \
--tags=allow-health-check \
--image-family=debian-9 \
--image-project=debian-cloud \
--subnet=network-endpoint-group-subnet --no-address \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'
5. Создайте NEG, содержащий вашу локальную конечную точку.
Сначала создайте NEG с именами on-prem-neg-1 и on-prem-neg-2. Также укажите, что балансировщик нагрузки должен учитывать, что для целей маршрутизации и балансировки нагрузки эти конечные точки находятся в зоне GCP us-west1-a. Рекомендуется, чтобы настроенная зона соответствовала любой зоне, связанной с регионом межсетевого соединения/VPN-шлюза, для измерений балансировки нагрузки на основе близости, используемых для балансировки нагрузки.
В Cloud Shell создайте on-prem-neg-1
gcloud compute network-endpoint-groups create on-prem-neg-1 \
--network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
--zone "us-west1-a" \
--network hybrid-network-lb
В Cloud Shell создайте on-prem-neg-2
gcloud compute network-endpoint-groups create on-prem-neg-2 \
--network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
--zone "us-west1-a" \
--network hybrid-network-lb
В практическом задании группа сетевых конечных точек представляет собой экземпляр GCE, работающий под управлением Apache в GCP. В качестве альтернативы вы можете указать в качестве сетевой конечной точки локальную или интернет-конечную точку.
В Cloud Shell определите IP-адреса GCE.
gcloud compute instances list | grep -i on-prem
Свяжите группу сетевых конечных точек с IP-адресом экземпляра GCE, определенным ранее на предыдущем шаге; для каждого neg — on-prem-neg-1 & on-prem-neg-2.
В Cloud Shell, при подключении on-prem-neg-1, обновите xxxx, указав свой идентифицированный IP-адрес.
gcloud compute network-endpoint-groups update on-prem-neg-1 \
--zone="us-west1-a" \
--add-endpoint="ip=x.x.x.x,port=80"
В Cloud Shell, при подключении on-prem-neg-2, обновите xxxx, указав свой идентифицированный IP-адрес.
gcloud compute network-endpoint-groups update on-prem-neg-2 \
--zone="us-west1-a" \
--add-endpoint="ip=x.x.x.x,port=80"
6. Создайте службу проверки работоспособности HTTP, серверную службу и брандмауэр.
На этом шаге вы создадите глобальную серверную службу с именем on-prem-backend-service. Эта серверная служба определяет, как ваша плоскость данных будет направлять трафик в вашу NEG.
Сначала создайте проверку работоспособности с именем on-prem-health-check для мониторинга состояния всех конечных точек, принадлежащих этой группе сетевых элементов (то есть вашей локальной конечной точке).
Из Cloud Shell
gcloud compute health-checks create http on-prem-health-check
Создайте серверную службу с именем on-prem-backend-service и свяжите её с проверкой работоспособности.
Из Cloud Shell
gcloud compute backend-services create on-prem-backend-service \
--global \
--load-balancing-scheme=EXTERNAL \
--health-checks on-prem-health-check
Внешний балансировщик нагрузки HTTP(S) и бэкэнд выполняют проверки работоспособности, исходящие из подсетей 35.191.0.0/16 и 130.211.0.0/22; поэтому для маршрутизации от балансировщика нагрузки к бэкэнду требуется правило брандмауэра.
Из Cloud Shell
gcloud compute firewall-rules create fw-allow-health-check \
--network=hybrid-network-lb \
--action=allow \
--direction=ingress \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--target-tags=allow-health-check \
--rules=tcp:80
7. Свяжите NEG и бэкэнд-сервис.
Добавьте on-prem-neg-1 NEG в этот бэкэнд-сервис.
Из Cloud Shell
gcloud compute backend-services add-backend on-prem-backend-service \
--global \
--network-endpoint-group on-prem-neg-1 \
--network-endpoint-group-zone us-west1-a \
--balancing-mode RATE \
--max-rate-per-endpoint 5
Добавьте on-prem-neg-2 NEG в этот бэкэнд-сервис.
Из Cloud Shell
gcloud compute backend-services add-backend on-prem-backend-service \
--global \
--network-endpoint-group on-prem-neg-2 \
--network-endpoint-group-zone us-west1-a \
--balancing-mode RATE \
--max-rate-per-endpoint 5
Зарезервируйте статический IP-адрес IPv4 для доступа к вашей сетевой конечной точке.
Из Cloud Shell
gcloud compute addresses create hybrid-lb-ip --project=$projectid --global
Настройка через CLI завершена. Давайте закончим настройку через Cloud Console.
8. Создайте внешний HTTP-балансировщик нагрузки и свяжите его с серверной службой.
В консоли Cloud перейдите в раздел «Балансировка нагрузки» и выберите «Создать балансировщик нагрузки».
Найдите компонент балансировки нагрузки HTTP(S) и нажмите «Начать настройку».

Выберите пункт «Из интернета на мои виртуальные машины», как показано на скриншоте ниже, чтобы разрешить публичный доступ к вашей виртуальной машине.

Укажите "xlb" в качестве имени балансировщика нагрузки и выберите ранее созданную службу бэкэнда "on-prem-backend-service", затем нажмите "ОК", как показано на предоставленном скриншоте.

Выберите конфигурацию интерфейса, обновите имя "xlb-fe" и выберите ранее созданный статический IPv4-адрес, убедитесь, что изображение соответствует предоставленному скриншоту. 
Выберите «Проверить и завершить», следуя инструкциям на предоставленном скриншоте, и нажмите «Создать».

Проверка работоспособности бэкэнда
В консоли облака убедитесь, что бэкэнд "xlb" находится в рабочем состоянии (зеленый индикатор, как показано на предоставленном скриншоте).

9. Убедитесь, что NEG доступен из интернета.
Напомним, что внешний статический IP-адрес, использованный при создании балансировщика нагрузки, теперь является внешним IP-адресом конечных точек вашей сети. Давайте проверим IP-адрес перед выполнением заключительного теста.
Из Cloud Shell
gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:
Результат (Ваш IP-адрес будет отличаться)
Вывод из Cloudshell
$ gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress: IPAddress: 34.96.103.132
Используя IP-адрес интерфейса глобального балансировщика нагрузки, вы можете получить доступ к серверной части сетевой конечной точки. Обратите внимание, что в практическом задании конечной точкой является экземпляр GCE, однако вы можете использовать его, например, с локальными конечными точками.
С локального компьютера запустите терминал и выполните команду curl для подключения к IP-адресу балансировщика нагрузки.
С вашего рабочего места выполните команду curl к IP-адресу внешнего интерфейса. Увидите ответ 200 OK и получите подробную информацию, включая имя отрицательного экземпляра и регион.
myworkstation$ curl -v 34.96.103.132
* Trying 34.96.103.132...
* TCP_NODELAY set
* Connected to 34.96.103.132 (34.96.103.132) port 80 (#0)
> GET / HTTP/1.1
> Host: 34.96.103.132
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 10 Aug 2021 01:21:54 GMT
< Server: Apache/2.4.25 (Debian)
< Last-Modified: Tue, 10 Aug 2021 00:35:41 GMT
< ETag: "24-5c929ae7384f4"
< Accept-Ranges: bytes
< Content-Length: 36
< Content-Type: text/html
< Via: 1.1 google
<
Page on on-prem-neg-2 in us-west1-a
* Connection #0 to host 34.96.103.132 left intact
* Closing connection 0
Поздравляем, вы успешно развернули гибридный балансировщик нагрузки L7 с NEGs.
Поздравляем с завершением практического занятия!
Что мы рассмотрели
- Создайте собственную VPC.
- Создайте две виртуальные машины (ВМ), используемые в качестве группы сетевых конечных точек (NEG).
- Создайте гибридный балансировщик нагрузки, серверную часть и соответствующие проверки работоспособности.
- Создайте правило брандмауэра, разрешающее доступ к балансировщику нагрузки.
- Проверьте доступность группы сетевых конечных точек.
10. Этапы очистки
В пользовательском интерфейсе Cloud Console найдите и отметьте балансировщик нагрузки «xlb», затем выберите «Удалить» через «Сетевые службы» → «Балансировка нагрузки». После выбора отметьте «on-premise-backend service» и «on-premise-health-check», затем выберите «Удалить».

В пользовательском интерфейсе Cloud Console перейдите в Compute Engine → Network Endpoint Groups. После выбора отметьте галочками 'on-prem-neg-1' и 'on-prem-neg-2', затем выберите «Удалить».

Из облачной оболочки удалить компоненты лаборатории
gcloud compute routers nats delete cloudnat --router=crnat --region us-west1 --quiet gcloud compute routers delete crnat --region us-west1 --quiet gcloud compute instances delete on-prem-neg-1 --zone=us-west1-a --quiet gcloud compute instances delete on-prem-neg-2 --zone=us-west1-a --quiet gcloud compute firewall-rules delete fw-allow-health-check --quiet gcloud compute networks subnets delete network-endpoint-group-subnet --region=us-west1 --quiet gcloud compute networks delete hybrid-network-lb --quiet gcloud compute addresses delete hybrid-lb-ip --global --quiet