1. Введение
В этом документе представлена эталонная архитектура для настройки настраиваемого домена для доступа к AgentSpace через WIF. Вместо URL-адреса, управляемого Google, назначенного при создании приложения Agentspace, пользователи могут использовать настраиваемый домен. В этой лабораторной работе демонстрируется доступ к приложениям календаря и Диска Agentspace с использованием домена nip.io. nip.io — это бесплатный сервис с открытым исходным кодом, предоставляющий подстановочные DNS-запросы для любого IP-адреса. По сути, он позволяет создать имя хоста, которое преобразуется в конкретный IP-адрес, без необходимости настраивать собственный DNS-сервер или изменять файл /etc/hosts.
Рекомендуется использовать собственный домен, однако в демонстрационных целях в руководстве используется nip.io.
В показанном ниже сценарии развертывания (рисунок 1) AgentSpace опубликовал хранилище данных, содержащее приложение «Календарь», доступ к которому осуществляется через общедоступный URL-адрес, управляемый Google.
Рисунок 1
Продолжающийся рост хранилища данных и последующих приложений приводит к дальнейшему управлению общедоступными URL-адресами, управляемыми Google, как показано в сценарии развертывания ниже (рисунок 2), что приводит к соответствию 1:1 приложений Agentspace и URL-адресов.
Рисунок 2.
Пользовательский домен позволяет сопоставлять различные приложения AgentSpace с одним, заданным пользователем доменом клиента. Эта функция позволяет связать конкретный URL-путь с каждым приложением AgentSpace, обеспечивая большую гибкость, как показано в сценарии развертывания ниже (рис. 3). Например, управляемый клиентом домен agentspace.cosmopup.com сегментирован по правилам пути, каждое из которых сопоставлено с определенным приложением AgentSpace. Примеры включают:
- agentspace.cosmopup.com/drive-app, который соответствует приложению Agentspace для Workspace Drive
- agentspace.cosmopup.com/sharepoint-app, который соответствует приложению Agentspace для Sharepoint
Правила хоста и пути внешнего балансировщика нагрузки приложений, настроенные через URL MAP, управляют логикой сопоставления пользовательского домена с URL-адресом, управляемым Google. Он выполняет следующую функцию на примере agentspace.cosmopup.com/drive-app.
- Путь к хосту пользовательского домена agentspace.cosmopup.com/drive-app получен балансировщиком нагрузки
- Карта URL настроена на расширенное сопоставление правил хоста и пути.
- Хосты agentspace.cosmopup.com подходят для сопоставления путей и перенаправления
- Путь к хосту пользовательского домена agentspace.cosmopup.com/drive-app подлежит UrlRedirect
- pathRedirect — это путь к Agentspace: /us/home/cid/5970a1b4-080a-4b44-8acd-fa89460cf0cd
- hostRedirect — это хост Agentspace: vertexaisearch.cloud.google.com
- Путь к хосту пользовательского домена agentspace.cosmopup.com/sharepoint-app подлежит UrlRedirect
- pathRedirect — это путь к Agentspace: /signin/locations/global/workforcePools/your-pool-name/providers/your-provider-name?continueUrl=https://vertexaisearch.cloud.google/home/cid/f190000-0000-4d0a-0000-d08df6e3bef6
- hostRedirect — это хост Agentspace: auth.cloud.google
- Операция перенаправления выполняется перед маршрутизацией на внутреннюю службу.
Рисунок 3
Чему вы научитесь
- Создать глобальный внешний балансировщик нагрузки приложений
- Создайте маршрутизацию для перенаправления пользовательского домена в приложение Agentspace
- Как интегрировать nip.io и Cloud DNS для создания собственного домена
- Как проверить доступ к пользовательскому домену Agentspace
Что вам понадобится
- Проект Google Cloud с разрешениями владельца
- Существующие URL-адреса приложений Agentspace
- Собственный пользовательский домен (необязательно)
- Сертификаты — самоподписанные или управляемые Google
2. Что вы будете строить
Вы создадите глобальный внешний балансировщик нагрузки приложений с расширенными возможностями управления трафиком, чтобы обеспечить сопоставление настраиваемых путей домена для приложений Agentspace с помощью перенаправления хоста и пути. После развертывания вы выполните следующие действия для проверки доступа к приложению Agentspace:
- Чтобы получить доступ к приложению Agentspace, откройте веб-браузер и перейдите в свой пользовательский домен по указанному пути.
3. Требования к сети
Ниже приведена разбивка сетевых требований:
Компоненты | Описание |
VPC (agentspace-vpc) | Пользовательский режим VPC |
Интернет NEG | Ресурс, используемый для определения внешнего бэкэнда для балансировщика нагрузки , настроенного как полное доменное имя (FQDN), обозначающее полное доменное имя Agentspace, управляемое Google (vertexaisearch.cloud.google.com). Полное доменное имя в Интернете выполняет поиск DNS в VPC для разрешения имени. |
Бэкэнд-сервис | Бэкенд-сервис выступает в роли моста между балансировщиком нагрузки и вашими бэкенд-ресурсами. В этом руководстве бэкенд-сервис связан с интернет-сегментом NEG. |
Сертификаты | Чтобы настроить сертификаты для Application Load Balancer в Google Cloud, вам понадобится служба Certificate Manager и SSL-сертификаты , управляемые Google или самостоятельно управляемые. |
Облачный DNS | Публичная зона Cloud DNS используется для преобразования внешнего IP-адреса балансировщика нагрузки приложения в nip.io (agentspace.externalip.nip.io). В качестве альтернативы можно использовать собственный домен и запись A, содержащую IP-адрес балансировщика нагрузки. |
4. Топология кодлаб-программы
5. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в Google Cloud Console и создайте новый проект или используйте существующий. Если у вас ещё нет учётной записи Gmail или Google Workspace, вам необходимо её создать .
- Название проекта — отображаемое имя участников проекта. Это строка символов, не используемая API Google. Вы можете изменить её в любой момент.
- Идентификатор проекта уникален для всех проектов Google Cloud и неизменяем (нельзя изменить после установки). Cloud Console автоматически генерирует уникальную строку; обычно вам не важно, какой именно. В большинстве практических работ вам потребуется указать идентификатор проекта (обычно обозначаемый как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете сгенерировать другой случайный идентификатор. Вы также можете попробовать использовать свой собственный идентификатор и посмотреть, доступен ли он. После этого шага его нельзя будет изменить, и он останется на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трёх значениях можно узнать в документации .
- Далее вам нужно включить биллинг в Cloud Console для использования облачных ресурсов/API. Выполнение этой лабораторной работы не потребует больших затрат, если вообще потребует. Чтобы отключить ресурсы и избежать списания средств за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud могут воспользоваться бесплатной пробной версией стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лабораторной работе вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.
В консоли Google Cloud Console нажмите значок Cloud Shell на верхней правой панели инструментов:
Подготовка и подключение к среде займёт всего несколько минут. После завершения вы увидите примерно следующее:
Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объёмом 5 ГБ и работает в облаке Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять в браузере. Вам не нужно ничего устанавливать.
6. Прежде чем начать
Включить API
Внутри Cloud Shell убедитесь, что настроен идентификатор вашего проекта:
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
echo $project
echo $region
Включите все необходимые службы:
gcloud services enable compute.googleapis.com
gcloud services enable dns.googleapis.com
7. Настройте компоненты балансировщика нагрузки.
Зарезервируйте внешний IP-адрес балансировщика нагрузки.
Внутри Cloud Shell зарезервируйте внешний IP-адрес для балансировщика нагрузки:
gcloud compute addresses create external-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
Внутри Cloud Shell просмотрите зарезервированный IP-адрес:
gcloud compute addresses describe external-ip \
--global | grep -i address:
Пример вывода:
user@cloudshell$ gcloud compute addresses describe external-ip \
--global | grep -i address:
address: 34.54.158.206
Настройте Интернет NEG
Создайте интернет-сеть NEG и установите для параметра –network-endpoint-type значение internet-fqdn-port (имя хоста и порт, по которым доступен ваш внешний бэкенд). Для разрешения Agentspace используется полное доменное имя vertexaisearch.cloud.google.com и порт 443.
gcloud compute network-endpoint-groups create agentspace-ineg \
--network-endpoint-type="internet-fqdn-port" \
--global
gcloud compute network-endpoint-groups update agentspace-ineg \
--add-endpoint="fqdn=vertexaisearch.cloud.google.com,port=443" \
--global
Создайте балансировщик нагрузки
Внутри Cloud Shell выполните следующие действия:
gcloud compute backend-services create agentspace-ineg-bes \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTPS \
--global
gcloud compute backend-services add-backend agentspace-ineg-bes \
--network-endpoint-group=agentspace-ineg \
--global-network-endpoint-group \
--global
Создать сертификат
На этом этапе вы создали интернет-сервер и серверную службу. В следующем разделе вам потребуется создать ресурс сертификата для использования в целевом прокси-сервере HTTPS. Вы можете создать ресурс SSL-сертификата, используя либо SSL-сертификат, управляемый Google, либо SSL-сертификат, управляемый самостоятельно. Мы рекомендуем использовать сертификаты, управляемые Google, поскольку Google Cloud автоматически получает, управляет и обновляет эти сертификаты.
Дополнительную информацию о поддерживаемых сертификатах для глобального внешнего балансировщика нагрузки приложений, используемого в этом руководстве, см. в следующем разделе:
Обзор SSL-сертификатов | Балансировка нагрузки | Google Cloud
В следующем разделе вы создадите самоподписанный сертификат (хотя вместо него можно использовать управляемый сертификат Google), который требует сопоставления общего имени с полным доменным именем ( agentspace.YOUR-EXTERNAL-IP.nip.io) , соответствующим внешнему IP-адресу балансировщика нагрузки, сгенерированному ранее, пример ниже:
Распространенное имя: agentspace.34.54.158.206.nip.io
Внутри Cloud Shell создайте закрытый ключ.
openssl genrsa -out private-key-file.pem 2048
В Cloud Shell создайте файл config.txt, который будет использоваться для генерации PEM-файла. Укажите полное доменное имя в записи DNS 1 agentspace.YOUR-EXTERNAL-IP.nip.io , например, agentspace.34.54.158.206.nip.io, в конфигурации ниже.
cat <<'EOF' >config.txt
[req]
default_bits = 2048
req_extensions = extension_requirements
distinguished_name = dn_requirements
[extension_requirements]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @sans_list
[dn_requirements]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
organizationName = Organization Name (eg, company)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (e.g. server FQDN or YOUR name)
emailAddress = Email Address
[sans_list]
DNS.1 = agentspace.YOUR-EXTERNAL-IP.nip.io
EOF
Внутри Cloud Shell проверьте, созданы ли файлы config.txt и private-key-file.pem.
user@cloudshell:$ ls
config.txt private-key-file.pem
Внутри Cloud Shell выполните следующие действия.
sudo openssl req -new -key private-key-file.pem \
-out csr.pem \
-config config.txt
Пример:
user@cloudshell:$ sudo openssl req -new -key private-key-file.pem \
-out csr.pem \
-config config.txt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name)[]:agentspace.34.54.158.206.nip.io
Email Address []:
Внутри Cloud Shell проверьте создание необходимого pem-файла подписи сертификата.
user@cloudshell:$ ls
config.txt csr.pem private-key-file.pem
Внутри Cloud Shell сгенерируйте сертификат.
sudo openssl x509 -req \
-signkey private-key-file.pem \
-in csr.pem \
-out cert.cert \
-extfile config.txt \
-extensions extension_requirements \
-days 365
Пример вывода:
user@cloudshell:$ sudo openssl x509 -req \
-signkey private-key-file.pem \
-in csr.pem \
-out cert.cert \
-extfile config.txt \
-extensions extension_requirements \
-days 365
Certificate request self-signature ok
subject=CN = agentspace.34.54.158.206.nip.io
Внутри Cloud Shell проверьте создание файла cert.cert.
user@cloudshell:$ ls
cert.cert config.txt csr.pem private-key-file.pem
Создайте ресурс сертификата для связи с внешним балансировщиком нагрузки. Замените параметры сертификата и закрытого ключа на имена ваших файлов.
В Cloud Shell выполните следующие действия:
gcloud compute ssl-certificates create agentspace-self-signed-cert \
--certificate=cert.cert \
--private-key=private-key-file.pem \
--global
В Cloud Shell выполните следующие действия:
gcloud compute url-maps create agentspace-lb \
--default-service=agentspace-ineg-bes \
--global
В Cloud Shell выполните следующие действия:
gcloud compute target-https-proxies create https-proxy \
--ssl-certificates=agentspace-self-signed-cert \
--url-map=agentspace-lb \
--global
В Cloud Shell выполните следующие действия:
gcloud compute forwarding-rules create agentspace-fr \
--load-balancing-scheme=EXTERNAL_MANAGED \
--network-tier=PREMIUM \
--address=external-ip \
--target-https-proxy=https-proxy \
--global \
--ports=443
8. Создайте публичную DNS-зону
В следующем разделе вы создадите публичную DNS-зону, используемую nip.io для разрешения IP-адреса внешнего балансировщика нагрузки.
В Cloud Shell выполните следующие действия, чтобы создать переменную для IP-адреса внешнего балансировщика нагрузки:
externalip=<YOUR-EXTERNAL-IP>
echo $externalip
В Cloud Shell выполните следующие действия:
gcloud dns --project=$project managed-zones create agentspace-dns --description="Agentspace public dns" --dns-name="$externalip.nip.io." --visibility="public"
В Cloud Shell выполните следующие действия:
gcloud dns --project=$project record-sets create agentspace.$externalip.nip.io. --zone="agentspace-dns" --type="A" --ttl="300" --rrdatas="$externalip"
9. Определите URL-адреса приложений Agentspace
Следующая процедура определяет общедоступные URL-адреса Agentspace, управляемые Google, которые сопоставляются с Agentspace каждого приложения. Вывод URL-адресов — это примеры, основанные на эталонной архитектуре, поэтому необходимо убедиться в их точности.
Обязательно сохраните ссылку на ваше веб-приложение для каждого приложения.
Приложение Drive
URL-адрес веб-сайта Agentspace:
https://vertexaisearch.cloud.google.com/us/home/cid/5970a1b4-080a-4b44-8acd-fa89460cf0cd
Приложение SharePoint
URL-адрес веб-сайта Agentspace: https://auth.cloud.google/signin/locations/global/workforcePools/your-pool-name/providers/your-provider-name?continueUrl=https://vertexaisearch.cloud.google/home/cid/f190000-0000-4d0a-0000-d08df6e3bef6
10. Создайте расширенное правило для хоста и пути
В следующем разделе вы обновите правила маршрутизации балансировщика нагрузки, чтобы включить возможность определять правила для хостов и путей с помощью облачной консоли. В таблице ниже представлены пользовательские значения (в порядке убывания), которые можно обновить в зависимости от вашей среды:
Индивидуальное значение | Пример на основе учебного пособия | |
Хозяева | agentspace.ВАШ-ВНЕШНИЙ-IP.nip.io | agentspace.34.54.158.206.nip.io |
defaultService | projects/<projectid>/global/backendServices/agentspace-ineg-bes | projects/your-project-id/global/backendServices/agentspace-ineg-bes |
префиксMatch | /<имя приложения Agentspace#1> | /drive-app |
pathRedirect | /<URL-путь пространства агента приложения №1> | /us/home/cid/5970a1b4-080a-4b44-8acd-fa89460cf0cd |
hostRedirect | vertexaisearch.cloud.google.com | vertexaisearch.cloud.google.com |
префиксMatch | /<имя приложения Agentspace#2> | /sharepoint-app |
pathRedirect | /<URL-путь пространства агента приложения №2> | //signin/locations/global/workforcePools/имя-вашего-пула/providers/имя-вашего-провайдера?continueUrl=https://vertexaisearch.cloud.google/home/cid/f190000-0000-4d0a-0000-d08df6e3bef6 |
hostRedirect | auth.cloud.google | vertexaisearch.cloud.google.com |
Чтобы получить доступ к правилам хоста и пути, перейдите к следующему разделу.
Балансировка нагрузки → agentspace-lb → Выбрать редактирование
Выберите Правила маршрутизации → Расширенные правила для хостов и путей.
Выберите Добавить правило хоста и пути.
Теперь вам предлагается создать новое правило хоста и пути. В разделе хостов введите agentspace.YOUR-EXTERNAL-IP.nip.io или пользовательский домен.
В поле «Сопоставление путей» (совпадения, действия и службы) обновите содержимое ниже, указав конфигурацию вашей среды, затем выберите «Обновить».
defaultService: projects/<projectid>/global/backendServices/agentspace-ineg-bes
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /<name of Agentspace app#1>
priority: 1
urlRedirect:
pathRedirect: /<Agentspace URL path of app#1>
hostRedirect: vertexaisearch.cloud.google.com
redirectResponseCode: FOUND
- matchRules:
- prefixMatch: /<name of Agentspace app#2>
priority: 2
urlRedirect:
pathRedirect: /<Agentspace URL path of app#2>
hostRedirect: auth.cloud.google
redirectResponseCode: FOUND
Пример скриншота:
11. Проверка
Развёртывание завершено! Вы можете получить доступ к приложению Agentspace, используя пользовательский домен через веб-браузер или терминал, указав agentspace.ВАШ-ВНЕШНИЙ-IP.nip.io/path, например, agentspace.34.54.158.206.nip.io, примеры ниже:
Приложение Agentspace: drive-app
Путь: agentspace.34.54.158.206.nip.io/drive-app
Приложение Agentspace: sharepoint-app
Путь: agentspace.34.54.158.206.nip.io/sharepoint-app
12. Уборка
Удалите учетные данные OAuth, выполните следующие действия:
Перейдите в раздел APIS и службы → Учетные данные.
В разделе «Идентификаторы клиентов OAuth 2.0» выберите свои учетные данные, а затем удалите их.
Из одного терминала Cloud Shell удалите компоненты лаборатории:
gcloud compute forwarding-rules delete agentspace-fr --global -q
gcloud compute target-https-proxies delete https-proxy --global -q
gcloud compute url-maps delete agentspace-lb --global -q
cloud compute ssl-certificates delete agentspace-self-signed-cert --global -q
gcloud compute backend-services delete agentspace-ineg-bes --global -q
gcloud compute network-endpoint-groups delete agentspace-ineg --global -q
gcloud dns --project=$projectid record-sets delete agentspace.$externalip.nip.io --zone="agentspace-dns" --type="A"
gcloud dns --project=$projectid managed-zones delete agentspace-dns
gcloud compute addresses delete external-ip --global -q
gcloud compute networks delete agentspace-vpc -q
13. Поздравления
Поздравляем, вы успешно настроили и проверили подключение к Agentspace с использованием пользовательского домена, используя внешний балансировщик нагрузки приложений с расширенным управлением трафиком.
Вы создали инфраструктуру балансировщика нагрузки, узнали, как создать Интернет-NEG, облачный DNS и расширенное управление трафиком, которое позволило перенаправить хост и путь, что позволило подключиться к Agentspace с использованием настраиваемого домена.
Cosmopup считает, что лабораторные занятия — это здорово!