Пользовательский домен Agentspace

1. Введение

В этом документе представлена ​​эталонная архитектура для настройки пользовательского домена для доступа к AgentSpace. Вместо управляемого Google URL-адреса, назначенного при создании приложения AgentSpace, пользователи могут использовать собственный домен. В этом практическом занятии демонстрируется доступ к приложениям календаря и дисков AgentSpace с использованием домена nip.io. nip.io — это бесплатный сервис с открытым исходным кодом, предоставляющий DNS-серверы с подстановочными знаками для любого IP-адреса. По сути, он позволяет создать имя хоста, которое разрешается в определенный IP-адрес, без необходимости настройки собственного DNS-сервера или изменения файла /etc/hosts.

Рекомендуется использовать собственный домен, однако в демонстрационных целях в руководстве используется nip.io.

В представленном ниже сценарии развертывания (Рисунок 1) AgentSpace опубликовал хранилище данных, содержащее приложение «Календарь», доступ к которому осуществляется через общедоступный URL-адрес, управляемый Google.

Рисунок 1

27591afa06891dcb.png

Постоянный рост хранилища данных и последующих приложений приводит к необходимости дальнейшего управления общедоступными URL-адресами, управляемыми Google, как показано в приведенном ниже сценарии развертывания (Рисунок 2), что приводит к сопоставлению приложений Agentspace и URL-адресов в соотношении 1:1.

Рисунок 2.

7e31bfae7ac56b22.png

Пользовательский домен позволяет сопоставлять различные приложения AgentSpace с одним, заданным пользователем доменом. Эта функция позволяет связать с каждым приложением AgentSpace определенный URL-адрес, обеспечивая большую гибкость, как показано в приведенном ниже сценарии развертывания (Рисунок 3). Например, управляемый клиентом домен agentspace.cosmopup.com сегментирован на правила пути, каждое из которых сопоставляется с определенным приложением AgentSpace, например:

  • agentspace.cosmopup.com/drive-app — это приложение Agentspace для Workspace Drive.
  • agentspace.cosmopup.com/calendar-app — это приложение Agentspace для Workspace Calendar.

Правила хоста и пути внешнего балансировщика нагрузки приложений, настроенные через URL MAP, управляют логикой сопоставления пользовательского домена с URL-адресом, управляемым Google. В качестве примера используется agentspace.cosmopup.com/drive-app, который выполняет следующую функцию.

  • Пользовательский путь к хосту домена agentspace.cosmopup.com/drive-app принимается балансировщиком нагрузки.
  • Карта URL-адресов настроена для расширенного сопоставления правил хоста и пути.
  • Хосты agentspace.cosmopup.com имеют право на сопоставление путей и перезапись.
  • Пользовательский путь к хосту домена agentspace.cosmopup.com/drive-app подчиняется протоколу UrlRewrite.
  • PathPrefixRewrite — это путь к Agentspace: /us/home/cid/5970a1b4-080a-4b44-8acd-fa89460cf0cd
  • hostRewrite — это хост Agentspace: vertexaisearch.cloud.google.com
  • Операция перезаписи выполняется перед переадресацией запроса на серверную часть.
  • Внутренняя служба направляет трафик к приложению drive-app на основе URL-адреса Agentspace.

Рисунок 3

f8d84ec5fef9af5a.png

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

  • Создайте глобальный внешний балансировщик нагрузки приложений.
  • Создайте запрос на переадресацию серверной части приложения Agentspace, используя пользовательский домен и операцию переадресации.
  • Как интегрировать nip.io и Cloud DNS для создания собственного домена
  • Как проверить доступ к пользовательскому домену Agentspace

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

  • Проект Google Cloud с правами владельца.
  • Существующие URL-адреса приложений Agentspace
  • Собственный домен (необязательно)
  • Сертификаты — самоподписанные или управляемые Google.

2. Что вы построите

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

  • Для доступа к приложению Agentspace откройте веб-браузер и перейдите по указанному вами домену и пути.

c62938d91e00ffa7.png

3. Требования к сети

Ниже приведено описание сетевых требований:

Компоненты

Описание

VPC (agentspace-vpc)

Пользовательский режим VPC

Интернет НЕГ

Ресурс, используемый для определения внешнего бэкэнда для балансировщика нагрузки, настроенного как FQDN, обозначающий FQDN, управляемый Google в Agentspace (vertexaisearch.cloud.google.com). Интернет-FQDN выполняет поиск DNS внутри VPC для разрешения имен.

Бэкенд-сервис

Серверная служба выступает в качестве связующего звена между вашим балансировщиком нагрузки и вашими серверными ресурсами. В данном руководстве серверная служба связана с интернет-сетью NEG.

Сертификаты

Для настройки сертификатов для Application Load Balancer в Google Cloud вам потребуется использовать службу Certificate Manager и либо управляемые Google, либо самостоятельно управляемые SSL-сертификаты.

Облачный DNS

Публичная зона Cloud DNS используется для преобразования внешнего IP-адреса балансировщика нагрузки внешних приложений в nip.io (agentspace.externalip.nip.io). В качестве альтернативы можно использовать собственный домен и запись A, содержащую IP-адрес балансировщика нагрузки.

4. Топология Codelab

c62938d91e00ffa7.png

f712980116d973a3.png

5. Настройка и требования

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы всегда можете его изменить.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор вашего проекта (обычно обозначается как PROJECT_ID ). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он сохраняется на протяжении всего проекта.
  • К вашему сведению, существует третье значение — номер проекта , которое используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
  1. Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не потребует больших затрат, если вообще потребует. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Запустить Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Вся работа в этом практическом задании может выполняться в браузере. Вам не нужно ничего устанавливать.

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. Создайте сеть VPC.

Сеть VPC

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks create agentspace-vpc --subnet-mode custom

8. Настройка компонентов балансировщика нагрузки

Зарезервируйте внешний 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-сертификата, используя либо управляемый Google SSL-сертификат, либо самостоятельно управляемый 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

9. Создайте публичную 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"

10. Учетные данные OAuth

В следующем разделе вы создадите учетные данные OAuth для веб-приложений, которые будут перенаправлять URL-адрес, управляемый Google, на oauth-redirect для аутентификации. Сгенерированные учетные данные не требуются для этого руководства.

Чтобы узнать больше об OAuth, обратитесь к следующей информации:

Добавление действий Google Календаря и Gmail | Google Agentspace

Создайте приложение OAuth и добавьте области действия (scopes).

  1. Перейдите в раздел «API и сервисы» > «Экран согласия OAuth»: Перейдите на экран согласия OAuth.
  2. Выберите «Внутренний» и нажмите «Создать».
  3. Введите название для вашего OAuth-приложения.
  4. Введите адрес электронной почты службы поддержки пользователей.
  5. Введите контактную информацию разработчика.
  6. Нажмите «Сохранить и продолжить».

Создайте идентификатор клиента OAuth.

В этой процедуре описывается, как создать новый идентификатор клиента OAuth для действий Google Cloud. Этот идентификатор клиента OAuth и секретный ключ также можно использовать для других действий Google Cloud. Если у вас уже есть идентификатор клиента OAuth Google Cloud для действий Google Cloud, вы можете использовать этот идентификатор клиента и секретный ключ для действий Google Calendar вместо создания нового идентификатора клиента.

  1. Перейдите на страницу «Учетные данные» и нажмите «Создать учетные данные» > «Идентификатор клиента OAuth».
  2. Выберите веб-приложение.
  3. Введите имя для вашего идентификатора клиента.
  4. Нажмите «Добавить URI» и введите следующий URI: https://vertexaisearch.cloud.google.com/oauth-redirect
  5. Нажмите «Создать» и скопируйте следующую информацию:
  • Идентификатор клиента
  • Секрет клиента

11. Определите URL-адреса приложения Agentspace.

Следующая процедура определяет общедоступные URL-адреса Agentspace, управляемые Google и сопоставляемые с каждым приложением в Agentspace. Представленные URL-адреса являются примерами, основанными на эталонной архитектуре, поэтому необходимо убедиться в точности ваших URL-адресов.

Обязательно сохраните ссылку на ваше веб-приложение для каждого приложения отдельно.

Приложение календаря

Веб-адрес Agentspace: https://vertexaisearch.cloud.google.com/us/home/cid/bb6b8b27-939b-494d-9227-45903bb8afcf

b90c67aafd825ccd.png

Приложение для управления

Веб-адрес Agentspace:

https://vertexaisearch.cloud.google.com/us/home/cid/5970a1b4-080a-4b44-8acd-fa89460cf0cd

f8f850425fd11190.png

12. Создайте расширенное правило для хоста и пути.

В следующем разделе вы обновите правила маршрутизации балансировщиков нагрузки, чтобы включить возможность определения правил для хостов и путей с помощью облачной консоли. В таблице ниже приведены пользовательские значения (в порядке убывания), обновите их в соответствии с вашей средой:

Индивидуальная стоимость

Пример, основанный на учебном пособии.

Хозяева

agentspace.YOUR-EXTERNAL-IP.nip.io

agentspace.34.54.158.206.nip.io

defaultService

projects/<projectid>/global/backendServices/agentspace-ineg-bes

См. скриншот

prefixMatch

/<название приложения Agentspace#1>

/drive-app

бэкендСервис

projects/<projectid>/global/backendServices/agentspace-ineg-bes

См. скриншот

pathPrefixRewrite

/<URL-адрес приложения #1 в пространстве агентов>

/us/home/cid/5970a1b4-080a-4b44-8acd-fa89460cf0cd

hostRewrite

vertexaisearch.cloud.google.com

vertexaisearch.cloud.google.com

prefixMatch

/<название приложения Agentspace#2>

/календарное приложение

бэкендСервис

projects/<projectid>/global/backendServices/agentspace-ineg-bes

См. скриншот

pathPrefixRewrite

/<URL-адрес приложения #2 в пространстве агентов>

/us/home/cid/bb6b8b27-939b-494d-9227-45903bb8afcf

hostRewrite

vertexaisearch.cloud.google.com

vertexaisearch.cloud.google.com

Для доступа к правилам хоста и пути перейдите по следующей ссылке.

Балансировка нагрузки → agentspace-lb → Выберите «Редактировать»

Выберите Правила маршрутизации → Расширенные правила хоста и пути

Выберите «Добавить правило хоста и пути».

4bc965db43aed21b.png

Теперь вам предлагается создать новое правило для хоста и пути. В разделе hosts вставьте agentspace.YOUR-EXTERNAL-IP.nip.io или пользовательский домен.

f36e4fa11c950d8d.png

В поле «Сопоставление путей» (соответствия, действия и службы) обновите приведенное ниже содержимое, указав конфигурацию вашей среды, а затем выберите «Обновить».

defaultService: projects/<projectid>/global/backendServices/agentspace-ineg-bes
name: matcher1
routeRules:
- matchRules:
 - prefixMatch: /<name of Agentspace app#1>
 priority: 1
 routeAction:
   weightedBackendServices:
   - backendService: projects/<projectid>/global/backendServices/agentspace-ineg-bes
     weight: 100
   urlRewrite:
     pathPrefixRewrite: /<Agentspace URL path of app#1>
     hostRewrite: vertexaisearch.cloud.google.com
- matchRules:
 - prefixMatch: /<name of Agentspace app#2>
 priority: 2
 routeAction:
   weightedBackendServices:
   - backendService: projects/<projectid>/global/backendServices/agentspace-ineg-bes
     weight: 101
   urlRewrite:
     pathPrefixRewrite: /<Agentspace URL path of app#2>
     hostRewrite: vertexaisearch.cloud.google.com

Пример скриншота:

22788283124c59ec.png

cef8f571ca17bf42.png

13. Валидация

Развертывание завершено! Вы можете получить доступ к приложению Agentspace, используя пользовательский домен, через веб-браузер или терминал, указав agentspace.YOUR-EXTERNAL-IP.nip.io/path, например, agentspace.34.54.158.206.nip.io (примеры ниже):

Приложение Agentspace: drive-app

Путь: agentspace.34.54.158.206.nip.io/drive-app

Приложение Agentspace: drive-app

Путь: agentspace.34.54.158.206.nip.io/calendar-app

14. Уборка

Удалите учетные данные OAuth и выполните следующие действия:

Перейдите в раздел API и сервисы → Учетные данные

В разделе «Идентификаторы клиентов 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

15. Поздравляем!

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

Вы создали инфраструктуру балансировки нагрузки, научились создавать Internet NEG, Cloud DNS и расширенное управление трафиком, которое позволило настроить перезапись хостов и путей, обеспечив тем самым подключение к Agentspace с использованием пользовательского домена.

Cosmopup считает, что Codelabs — это круто!!

c911c127bffdee57.jpeg

Справочная документация