Использование внешнего гибридного балансировщика нагрузки HTTP(s) для доступа к группе конечных точек сети

1. Введение

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

3312e69c63b02f73.png

В этой лабораторной работе вы узнаете, как создать группу сетевых конечных точек (NEG) с использованием двух виртуальных машин, доступных через внешний глобальный балансировщик нагрузки HTTP(s). Хотя группа NEG в лабораторной работе находится в GCP, та же процедура используется для связи с общедоступными или локальными ресурсами, доступными по IP-адресу.

Что вы узнаете

  • Создайте собственную VPC.
  • Создайте две виртуальные машины (ВМ), используемые в качестве группы сетевых конечных точек (NEG).
  • Создайте гибридный балансировщик нагрузки, серверную часть и соответствующие проверки работоспособности.
  • Создайте правило брандмауэра, разрешающее доступ к балансировщику нагрузки.
  • Для обеспечения возможности обновления пакетов из интернета будут созданы облачный маршрутизатор и NAT.
  • Проверьте доступность группы сетевых конечных точек.

Что вам понадобится

  • Знание балансировщиков нагрузки

Настройка среды для самостоятельного обучения

  1. Войдите в Cloud Console и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Название проекта — это ваш личный идентификатор для этого проекта. При условии соблюдения установленных правил именования, вы можете использовать любое название по своему усмотрению и изменять его в любое время.
  • Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как PROJECT_ID ), поэтому, если он вам не нравится, сгенерируйте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он "замораживается" после создания проекта.
  1. Далее вам потребуется включить оплату в Cloud Console, чтобы использовать ресурсы Google Cloud.

Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Обязательно следуйте инструкциям в разделе «Очистка», где указано, как отключить ресурсы, чтобы избежать дополнительных расходов после завершения этого урока. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.

В консоли GCP щелкните значок Cloud Shell на панели инструментов в правом верхнем углу:

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 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) и нажмите «Начать настройку».

70ccd168957e89d9.png

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

a55cd31dbeadfecc.png

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

f1589df43bf9e3e8.png

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

Выберите «Проверить и завершить», следуя инструкциям на предоставленном скриншоте, и нажмите «Создать».

bfa39f7dc3ad91e1.png

Проверка работоспособности бэкэнда

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

131bbfc955d6166c.png

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», затем выберите «Удалить».

53d7463fe354fe66.png

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

4d8f04264b44d03c.png

Из облачной оболочки удалить компоненты лаборатории

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