Пользовательский домен Agentspace, поддержка WIF

1. Введение

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

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

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

Рисунок 1

27591afa06891dcb.png

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

Рисунок 2.

c03abe66bd3ad4df.png

Пользовательский домен позволяет сопоставлять различные приложения 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

8344f80c160f30f8.png

Чему вы научитесь

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

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

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

2. Что вы будете строить

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

  • Чтобы получить доступ к приложению Agentspace, откройте веб-браузер и перейдите в свой пользовательский домен по указанному пути.

786e8b2de2d2c68b.png

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. Топология кодлаб-программы

786e8b2de2d2c68b.png

8344f80c160f30f8.png

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

Запустить Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

f8f850425fd11190.png

Приложение 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

f31a1939b9b83525.png

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 → Выбрать редактирование

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

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

4bc965db43aed21b.png

Теперь вам предлагается создать новое правило хоста и пути. В разделе хостов введите 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
  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

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

5470a123dca793b9.png

777dcb5191fd8d41.png

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 считает, что лабораторные занятия — это здорово!

c911c127bffdee57.jpeg

Справочные документы