1. Введение
конечная точка API Google
API-интерфейсы Google Cloud предлагают различные типы конечных точек для доступа к сервисам, различающиеся главным образом способом маршрутизации запросов, размещения данных и региональной изоляции.
Пожалуйста, ознакомьтесь с документацией по продукту, чтобы узнать о типах конечных точек API .
Вот подробная информация о глобальных, региональных и локальных конечных точках:
- Глобальные конечные точки
- Формат: {service}.googleapis.com (например, storage.googleapis.com)
- Описание: Эти конечные точки предоставляют единую глобальную точку доступа к сервису. В URL-адресе не указывается регион.
- Маршрутизация: Запросы маршрутизируются глобальными интерфейсами Google (GFE) и глобальной системой балансировки нагрузки сервисов, как правило, направляя трафик в ближайший стабильный регион для минимизации задержки.
- Завершение TLS-соединения: происходит на ближайшем к клиенту GFE, который может находиться за пределами региона Google Cloud, где хранятся данные или ресурсы.
- Срок хранения данных: Гарантии на передачу данных не предоставляются. После расшифровки в GFE данные могут пересекать региональные границы.
- Региональная изоляция: ограниченная. Хотя бэкэнды часто имеют региональный характер, точка входа и балансировка нагрузки являются глобальными, а это означает, что проблемы в одной части глобальной инфраструктуры потенциально могут повлиять на работу сервисов в других регионах.
- Сценарий использования: Доступ общего назначения, где ключевое значение имеет низкая задержка для географически распределенных пользователей, а строгие требования к хранению данных при передаче не являются первостепенной задачей.
- Региональные конечные точки (РКП)
- Формат: {service}.{location}.rep.googleapis.com (например, storage.us-east1.rep.googleapis.com)
- Описание: Эти решения разработаны для обеспечения надежной региональной изоляции и гарантий размещения данных. Местоположение (конкретный регион Google Cloud) указывается в виде поддомена. Это современный стандарт, заменяющий Locational Endpoints.
- Маршрутизация: Используется полностью регионализованный стек интерфейсной части, включающий региональные внешние балансировщики нагрузки и региональную балансировку нагрузки сервисов. Весь путь запроса, от DNS до бэкэнда сервиса, остается в пределах указанного региона.
- Прекращение работы TLS: происходит в указанном регионе на региональных внешних балансировщиках нагрузки.
- Обеспечение конфиденциальности данных: Гарантирует, что данные остаются в пределах обозначенного региона как во время передачи, так и во время использования, отвечая строгим требованиям соответствия и суверенитета.
- Региональная изоляция: высокая. Сбои в инфраструктуре интерфейса одного региона не влияют на другие регионы.
- Пример использования: Приложения, требующие строгого соблюдения требований к размещению данных, высокой региональной изоляции и соответствия нормативным требованиям.
Обратите внимание, что не каждый API Google имеет региональную конечную точку. Список поддерживаемых региональных конечных точек можно посмотреть здесь .
Многорегиональные региональные конечные точки (mREP) также являются региональными конечными точками, такими как us (США), eu (Европейский Союз) и т. д. (например, storage.us.rep.googleapis.com).
- Конечные точки местоположения (LEP)
- Формат: {location}-{service}.googleapis.com (например, us-east1-storage.googleapis.com)
- Описание: Эти конечные точки представляли собой более ранний подход к обеспечению доступа с привязкой к местоположению. Местоположение является частью основного имени хоста. Примечание: Конечные точки, привязанные к местоположению, заменяются региональными конечными точками.
- Маршрутизация: по-прежнему зависит от глобальных интерфейсов Google.
- Завершение TLS-соединения: Обычно происходит на GFE, который может находиться не в регионе, указанном в имени хоста.
- Срок хранения данных: Невозможно гарантировать , что данные останутся в пределах указанного региона во время передачи при трафике из общедоступного интернета.
- Региональная изоляция: слабее, чем региональные конечные точки, поскольку использует глобальную инфраструктуру внешнего интерфейса.
- Сценарий применения: Исторически использовался для некоторых сценариев регионального доступа, но сейчас, как правило, не рекомендуется в пользу региональных конечных точек для более надежных гарантий.
Подключение частного сервиса к API Google
Private Service Connect — это функция сетевых возможностей Google Cloud, которая позволяет потребителям получать доступ к сервисам производителей. Это включает в себя возможность подключения к API Google через частную конечную точку, размещенную в VPC пользователя.
Как использовать конечную точку PSC для доступа к API Google:
- Конечная точка PSC для глобального API Google.
- Конечная точка PSC для регионального API Google.
- Для доступа к локальному API Google вы используете конечную точку PSC для глобального API Google.
Как использовать бэкэнд PSC для доступа к API Google:
- Бэкенд PSC для глобального API Google.
- PSC бэкэнд для регионального API Google
- Для доступа к локальному API Google вы используете бэкэнд PSC для глобального API Google.
Cloud Run направляет трафик в сеть VPC.
Прямой исходящий трафик VPC обеспечивает улучшенную инфраструктуру и упрощенную настройку исходящего трафика VPC в Cloud Run, включая следующие преимущества:
- Настройка : Сервисы и задания Cloud Run могут направлять трафик в сеть VPC без дополнительных затрат на управление коннектором Serverless VPC Access.
- Стоимость : Вы платите только за сетевой трафик, плата за который, как и за саму услугу, обнуляется.
- Безопасность : Для более детальной защиты сети можно использовать сетевые теги непосредственно в версиях сервисов.
- Производительность : меньшая задержка, более высокая пропускная способность.
Вы можете настроить службу, функцию, задание или пул рабочих процессов Cloud Run таким образом, чтобы весь трафик направлялся в сеть VPC с помощью функции Direct VPC egress.
2. Чему вы научитесь
- Как создать конечную точку PSC для глобального API Google.
- Как создать конечную точку PSC для регионального API Google.
- Как изменить конечную точку API в коде Cloud Run и настроить сеть для исходящего трафика.
3. Общая архитектура лаборатории

4. Этапы подготовки
Для работы в лаборатории требуются роли IAM.
Для начала необходимо назначить необходимые роли IAM учетной записи GCP на уровне проекта.
- Администратор вычислительной сети (
roles/compute.networkAdmin) Эта роль предоставляет вам полный контроль над сетевыми ресурсами Compute Engine. - Администратор ведения журналов (
roles/logging.admin) Эта роль предоставляет вам доступ ко всем разрешениям на ведение журналов, а также к зависимым разрешениям. - Администратор использования сервиса (
roles/serviceusage.serviceUsageAdmin) Эта роль позволяет включать, отключать и проверять состояния сервиса, контролировать операции, а также управлять квотой и выставлением счетов для потребительского проекта. - Администратор DNS (
roles/dns.admin) Эта роль предоставляет вам доступ на чтение и запись ко всем ресурсам Cloud DNS. - Администратор Cloud Run (
roles/run.admin) Эта роль предоставляет вам полный контроль над всеми ресурсами Cloud Run. - Администратор хранилища (
roles/storage.admin) Эта роль предоставляет вам полный контроль над объектами и хранилищами.
Включить API
Внутри Cloud Shell убедитесь, что ваш проект настроен правильно, и задайте переменные среды.
Внутри Cloud Shell выполните следующие действия:
gcloud auth login
gcloud config set project <your project id>
export project_id=<your project id>
export region=<your region>
export zone=$region-a
echo $project_id
echo $region
Включите все необходимые API Google в проекте. В Cloud Shell выполните следующие действия:
gcloud services enable \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com \
compute.googleapis.com \
dns.googleapis.com \
servicedirectory.googleapis.com \
networkconnectivity.googleapis.com
Создать VPC
В проекте создайте сеть VPC с пользовательским режимом подсети. Выполните следующие действия в Cloud Shell:
gcloud compute networks create mynet \
--subnet-mode=custom
Создание подсетей
Внутри Cloud Shell выполните следующие действия для создания подсети IPv4:
gcloud compute networks subnets create mysubnet \
--network=mynet \
--range=10.0.0.0/24 \
--region=$region
Создание облачного NAT и облачного маршрутизатора.
Cloud NAT используется для обеспечения возможности подключения заданий Cloud Run к внешним веб-сайтам.
gcloud compute routers create $region-cr \
--network=mynet \
--region=$region
gcloud compute routers nats create $region-nat \
--router=$region-cr \
--region=$region \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips
5. Создайте конечную точку PSC для облачного хранилища.
Вам потребуется создать две конечные точки PSC для облачного хранилища: одну для глобального доступа, а другую для регионального.
Создать конечную точку PSC в глобальной области видимости
С помощью Private Service Connect вы можете создавать частные конечные точки с глобальной областью действия, используя глобальные внутренние IP-адреса в вашей сети VPC.
Вам потребуется выделить уникальный IP-адрес, не определенный в вашей VPC. Пожалуйста, ознакомьтесь с документом, описывающим это требование к IP-адресу .
В Cloud Shell выполните следующие действия для создания IP-адреса. Измените параметр –addresses=<pscendpointip>, чтобы использовать выделенный вами IP-адрес.
gcloud compute addresses create pscglobalip \
--global \
--purpose=PRIVATE_SERVICE_CONNECT \
--addresses=<pscendpointip> \
--network=mynet
pscendpointip=$(gcloud compute addresses list --filter=name:pscglobalip --format="value(address)")
echo $pscendpointip
Создайте правило переадресации для подключения конечной точки к API и сервисам Google.
gcloud compute forwarding-rules create pscendpoint \
--global \
--network=mynet \
--address=pscglobalip \
--target-google-apis-bundle=all-apis
Проверьте p.googleapis.com в Cloud DNS.
При создании конечной точки автоматически создаются следующие DNS-конфигурации:
- Для p.googleapis.com создана частная DNS-зона каталога служб .
- DNS-записи создаются в p.googleapis.com для некоторых часто используемых API и сервисов Google, доступных через Private Service Connect, и имеют DNS-имена по умолчанию, заканчивающиеся на googleapis.com.
Глобальные конечные точки регистрируются в каталоге служб. Для доступа к облачному хранилищу вы будете использовать storage-[имя конечной точки psc].p.googleapis.com. Подробную информацию можно найти в документации по продукту .
Проверьте, создана ли зона p.googleaps.com, выполнив команду.
gcloud dns managed-zones list
Если вы хотите использовать DNS-имя по умолчанию, storage.googleapis.com, вам необходимо создать частную зону storage.googleapis.com в Cloud DNS и добавить запись apex, указывающую на конечную точку PSC с IP-адресом глобальной области видимости.
Создание конечной точки PSC в рамках региональной области действия для облачного хранилища.
Вам потребуется один IP-адрес из подсети VPC. Выполните команду ниже, и IP-адрес из подсети будет выделен для конечной точки PSC.
gcloud network-connectivity regional-endpoints create psc-regional-endpoint \
--region=$region \
--network=projects/$project_id/global/networks/mynet \
--subnetwork=projects/$project_id/regions/$region/subnetworks/mysubnet \
--target-google-api=storage.us-central1.rep.googleapis.com
Получите IP-адрес конечной точки, созданный на предыдущем шаге.
regionalip=$(gcloud network-connectivity regional-endpoints describe psc-regional-endpoint --region=$region --format="value(address)")
echo $regionalip
Для доступа к облачному хранилищу вы будете использовать storage.us-central1.rep.googleapis.com. Вам необходимо создать частную зону для storage.us-central1.rep.googleapis.com и запись apex для IP-адреса, который вы только что создали для региональной конечной точки в Cloud DNS.
Создание частной зоны для региональной конечной точки облачного хранилища
Для доступа к региональной конечной точке Cloud Storage вам потребуется использовать storage.[region name].rep.googleapis.com.
Вам потребуется создать частную зону в Cloud DNS и добавить запись APEX, указывающую на IP-адрес региональной конечной точки Cloud Storage.
В приведенной ниже команде us-central1 — это пример региона. Вам следует создать зону с именем вашего региона.
gcloud dns managed-zones create psc-regional-endpoint-zone \
--description="" \
--dns-name="storage.us-central1.rep.googleapis.com" \
--visibility="private" \
--networks="mynet"
gcloud dns record-sets create storage.us-central1.rep.googleapis.com. \
--rrdatas=$regionalip \
--ttl=300 \
--type=A \
--zone=psc-regional-endpoint-zone
6. Настройте задание Cloud Run с использованием конечной точки PSC в глобальной области видимости.
Получите код
Сначала вы изучаете приложение Node.js для создания скриншотов веб-страниц и сохранения их в Cloud Storage. Затем вы создаете образ контейнера для приложения и запускаете его в качестве задания в Cloud Run.
В оболочке Cloud Shell выполните следующую команду, чтобы клонировать код приложения из этого репозитория:
git clone https://github.com/GoogleCloudPlatform/jobs-demos.git
Перейдите в каталог, содержащий приложение:
cd jobs-demos/screenshot
Вы должны увидеть следующую структуру файла:
|
├── Dockerfile
├── README.md
├── screenshot.js
├── package.json
Вот краткое описание каждого файла:
- Файл screenshot.js содержит код Node.js для приложения. Приложение делает скриншоты веб-страниц и сохраняет их в облачном хранилище.
- В файле package.json определены зависимости библиотек.
- Dockerfile определяет образ контейнера.
Откройте код screenshot.js и измените apiEndpoint на глобальную конечную точку PSC. Найдите код и замените const storage = new Storage(); следующим:
const storage = new Storage(
{
apiEndpoint:'https://storage-pscendpoint.p.googleapis.com.',
useAuthWithCustomEndpoint: true
}
);
Развернуть задание
Перед созданием задания необходимо создать учетную запись службы, которая будет использоваться для его выполнения.
gcloud iam service-accounts create screenshot-sa --display-name="Screenshot app service account"
Предоставьте учетной записи службы роль storage.admin, чтобы она могла создавать корзины и объекты.
gcloud projects add-iam-policy-binding $project_id \
--role roles/storage.admin \
--member serviceAccount:screenshot-sa@$project_id.iam.gserviceaccount.com
Предоставьте учетной записи службы вычислительных ресурсов по умолчанию роли пользователя объектов хранилища, роль автора журналов и роль администратора репозитория реестра артефактов.
project_number=$(gcloud projects describe $project_id --format="value(projectNumber)")
gcloud projects add-iam-policy-binding $project_id \
--role roles/storage.objectUser \
--member serviceAccount:$project_number-compute@developer.gserviceaccount.com
gcloud projects add-iam-policy-binding $project_id \
--role roles/logging.logWriter \
--member serviceAccount:$project_number-compute@developer.gserviceaccount.com
gcloud projects add-iam-policy-binding $project_id \
--role roles/artifactregistry.repoAdmin \
--member serviceAccount:$project_number-compute@developer.gserviceaccount.com
Вам потребуется включить прямой исходящий трафик из VPC для заданий Cloud Run, чтобы весь трафик направлялся в сеть VPC.
Внутри Cloud Shell выполните следующие действия:
gcloud run jobs deploy screenshot-1 \
--source=. \
--args="https://example.com" \
--args="https://cloud.google.com" \
--tasks=2 \
--task-timeout=5m \
--region=$region \
--set-env-vars=BUCKET_NAME=screenshot-$project_id-$RANDOM \
--service-account=screenshot-sa@$project_id.iam.gserviceaccount.com \
--vpc-egress=all-traffic \
--network=mynet \
--subnet=mysubnet
Запустите задание
Внутри Cloud Shell выполните следующие действия:
gcloud run jobs execute screenshot-1 --region=$region
Проверьте статус задания и журналы. Перейдите в консоль Cloud Run и найдите задание. Щелкните по заданию и проверьте историю журналов. Вы увидите результаты выполнения задания, аналогичные приведенным ниже.

Для просмотра подробных журналов выполнения задания нажмите «Просмотреть журнал» рядом с задачей. Вы увидите журналы заданий, аналогичные приведенным ниже.

Создан новый сегмент хранилища. Вы можете перейти в консоль Cloud Storage и проверить созданный новый сегмент. Обратите внимание, что, поскольку вы используете Cloud Storage Global Endpoint, сегмент является многорегиональным. Вы можете проверить изображения, загруженные в этот сегмент.
В результате теста показано, что Cloud Run осуществляет частный доступ к глобальной конечной точке Cloud Storage, которую вы изменили в задании Cloud Run:
apiEndpoint:'https://storage-pscendpoint.p.googleapis.com.'
7. Настройте задание Cloud Run с использованием конечной точки PSC в рамках региональной области действия.
В коде вам нужно будет изменить apiEndpoint на конечную точку PSC с региональной областью видимости.
Найдите в коде и замените const storage = new Storage(); на следующий код (в качестве примера используется регион us-central1. Пожалуйста, измените его на свой):
const storage = new Storage(
{
apiEndpoint:'https://storage.us-central1.rep.googleapis.com.',
useAuthWithCustomEndpoint: true
}
);
Развернуть задание
Убедитесь, что вы находитесь в директории, содержащей приложение (jobs-demos/screenshot).
pwd
Вы включаете прямой исходящий трафик VPC для заданий, чтобы весь трафик направлялся в сеть VPC.
Внутри Cloud Shell выполните следующие действия:
gcloud run jobs deploy screenshot-2 \
--source=. \
--args="https://example.com" \
--args="https://cloud.google.com" \
--tasks=2 \
--task-timeout=5m \
--region=$region \
--set-env-vars=BUCKET_NAME=screenshot-$PROJECT_ID-$RANDOM \
--service-account=screenshot-sa@$project_id.iam.gserviceaccount.com \
--vpc-egress=all-traffic \
--network=mynet \
--subnet=mysubnet
Запустите задание
Внутри Cloud Shell выполните следующие действия:
gcloud run jobs execute screenshot-2 --region=$region
Проверьте статус задания и журналы. Перейдите в консоль Cloud Run и найдите задание. Щелкните по заданию и проверьте историю его выполнения. Вы увидите результаты выполнения задания, аналогичные приведенным ниже.

Для просмотра подробных журналов выполнения заданий нажмите «Просмотреть журнал». Вы увидите журналы заданий, аналогичные приведенным ниже.

Создан новый сегмент хранилища. Вы можете перейти в консоль Cloud Storage и проверить созданный новый сегмент. Обратите внимание, что, поскольку вы используете региональную конечную точку Cloud Storage, сегмент является сегментом одного региона. Вы можете проверить изображения, загруженные в этот сегмент.
В результате теста показано, что Cloud Run осуществляет частный доступ к региональной конечной точке Cloud Storage, которую вы изменили в задании Cloud Run:
apiEndpoint:'https://storage.us-central1.rep.googleapis.com.'
8. Уборка
Задание по очистке облака
gcloud run jobs delete screenshot-1 \
--region=$region --quiet
gcloud run jobs delete screenshot-2 \
--region=$region --quiet
gcloud iam service-accounts delete screenshot-sa@$project_id.iam.gserviceaccount.com --quiet
Очистка конечной точки PSC
gcloud compute forwarding-rules delete pscendpoint \
--global --quiet
gcloud network-connectivity regional-endpoints delete psc-regional-endpoint \
--region=$region --quiet
gcloud compute addresses delete pscglobalip \
--global --quiet
Очистка Cloud NAT, Cloud Router и VPC.
gcloud compute routers nats delete $region-nat \
--router=$region-cr \
--region=$region --quiet
gcloud compute routers delete $region-cr \
--region=$region --quiet
gcloud compute networks subnets delete mysubnet \
--region=$region --quiet
gcloud compute networks delete mynet --quiet
9. Поздравляем!
Вы успешно протестировали частный доступ Cloud Run к облачному хранилищу через глобальную и региональную конечные точки.