1. Введение
Интерфейс Private Service Connect — это ресурс, который позволяет сети виртуального частного облака (VPC) производителя инициировать подключения к различным местам назначения в потребительской сети. Сети производителей и потребителей могут находиться в разных проектах и организациях.
Соединение между сетевым подключением и интерфейсом Private Service Connect аналогично соединению между конечной точкой Private Service Connect и сервисным подключением, но имеет два ключевых отличия:
- Сетевое подключение позволяет сети производителя инициировать подключения к сети потребителя (выход управляемой службы), а конечная точка позволяет сети потребителя инициировать подключения к сети производителя (вход управляемой службы).
- Соединение интерфейса Private Service Connect является транзитивным. Это означает, что сеть производителя может взаимодействовать с другими сетями, подключенными к сети потребителя.
Что ты построишь
Vertex AI Pipelines, развернутый в проекте арендатора, управляемого Google, будет использовать сетевое подключение PSC для создания экземпляра с несколькими компьютерами между сетью производителя и потребителя. Поскольку сетевое подключение PSC развертывается с помощью нескольких сетевых карт из потребительской сети, Vertex AI Pipelines может получать доступ к маршрутам, доступным из потребительской сети.
В этом руководстве вы собираетесь создать комплексную архитектуру интерфейса Private Service Connect (PSC) для Vertex AI Pipelines, которая использует правила облачного брандмауэра, чтобы разрешать или запрещать подключение от производителя к тестовым экземплярам потребителя, как показано на рисунке 1.
Рисунок 1
Вы создадите одно подключение psc-network-attachment в потребительском VPC, что приведет к следующим вариантам использования:
- Создайте правило входящего брандмауэра в потребительском vpc, разрешающее подсети Vertex AI Pipeline (192.168.10.0/28) использовать test-svc-1. Подтвердите успешный PING, сгенерированный из задания конвейера, для test-svc-1 с помощью TCPDUMP.
- Создайте правило входящего межсетевого экрана в потребительском vpc, запрещающее подсеть Vertex AI Pipeline (192.168.10.0/28) для test-svc-2. Подтвердите сбой PING на основе журналов брандмауэра, созданных Log Explorer.
Что вы узнаете
- Как создать сетевое подключение
- Как Vertex AI Pipelines может использовать сетевое подключение для создания интерфейса PSC
- Как наладить связь от производителя к потребителю
- Как разрешить доступ из Verex AI Pipelines к потребительской виртуальной машине, test-svc-1
- Как запретить доступ Verex AI Pipelines к потребительской виртуальной машине, test-svc-2 с помощью Cloud Firewall
Что вам понадобится
- Облачный проект Google
- IAM-разрешения
- Администратор экземпляра Compute (roles/compute.instanceAdmin)
- Администратор вычислительной сети (roles/compute.networkAdmin)
- Администратор службы безопасности вычислений (roles/compute.securityAdmin)
- Пользователь туннеля, защищенного IAP (roles/iap.tunnelResourceAccessor)
- Администратор ведения журнала ( roles/logging.admin)
- Администратор ноутбуков (roles/notebooks.admin)
- Администратор проекта IAM (roles/resourcemanager.projectIamAdmin)
- Администратор квот (roles/servicemanagement.quotaAdmin)
- Администратор учетной записи службы (roles/iam.serviceAccountAdmin)
- Пользователь учетной записи службы (roles/iam.serviceAccountUser)
- Администратор Vertex AI (roles/aiplatform.admin)
2. Прежде чем начать
В этом руководстве переменные $variables используются для облегчения реализации конфигурации gcloud в Cloud Shell.
Внутри Cloud Shell выполните следующие действия:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Обновите проект для поддержки руководства.
Внутри Cloud Shell выполните следующие действия:
gcloud services enable notebooks.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com
3. Настройка потребителя
Создайте потребительский VPC.
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom
Создайте потребительские подсети
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks subnets create test-subnet-1 --project=$projectid --range=192.168.20.0/28 --network=consumer-vpc --region=us-central1
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks subnets create test-subnet-2 --project=$projectid --range=192.168.30.0/28 --network=consumer-vpc --region=us-central1
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks subnets create workbench-subnet --project=$projectid --range=192.168.40.0/28 --network=consumer-vpc --region=us-central1 --enable-private-ip-google-access
Облачный маршрутизатор и конфигурация NAT
Трансляция сетевых адресов облака (NAT) используется в руководстве для загрузки пакета программного обеспечения ноутбука, поскольку экземпляр ноутбука не имеет внешнего IP-адреса. Облачный NAT предлагает возможности исходящего NAT. Это означает, что интернет-узлам не разрешается инициировать связь с ноутбуком, управляемым пользователем, что делает его более безопасным.
В Cloud Shell создайте региональный облачный маршрутизатор.
gcloud compute routers create cloud-router-us-central1 --network consumer-vpc --region us-central1
В Cloud Shell создайте региональный шлюз Cloud Nat.
gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1 --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
Создайте подсеть сетевых подключений Private Service Connect.
В Cloud Shell создайте подсеть сетевых подключений, используемую Vertex AI Pipelines.
gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1
4. Включите идентификацию прокси-сервера (IAP).
Чтобы разрешить IAP подключаться к вашим экземплярам виртуальных машин, создайте правило брандмауэра, которое:
- Применяется ко всем экземплярам виртуальных машин, доступ к которым вы хотите сделать с помощью IAP.
- Разрешает входящий трафик из диапазона IP 35.235.240.0/20. Этот диапазон содержит все IP-адреса, которые IAP использует для пересылки TCP.
В Cloud Shell создайте правило брандмауэра IAP.
gcloud compute firewall-rules create ssh-iap-consumer \
--network consumer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
5. Создайте экземпляры потребительских виртуальных машин.
Внутри Cloud Shell создайте потребительский экземпляр виртуальной машины test-svc-1.
gcloud compute instances create test-svc-1 \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=test-subnet-1 \
--shielded-secure-boot
Внутри Cloud Shell создайте экземпляр пользовательской виртуальной машины test-svc-2.
gcloud compute instances create test-svc-2 \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=test-subnet-2 \
--shielded-secure-boot
Получите и сохраните IP-адреса экземпляров:
В Cloud Shell выполните описание тестовых экземпляров виртуальной машины.
gcloud compute instances describe test-svc-1 --zone=us-central1-a | grep networkIP:
gcloud compute instances describe test-svc-2 --zone=us-central1-a | grep networkIP:
Пример:
user@cloudshell(psc-vertex)$ gcloud compute instances describe test-svc-1 --zone=us-central1-a | grep networkIP:
gcloud compute instances describe test-svc-2 --zone=us-central1-a | grep networkIP:
networkIP: 192.168.20.2
networkIP: 192.168.30.2
6. Сетевое подключение Private Service Connect
Сетевые вложения — это региональные ресурсы, представляющие потребительскую сторону интерфейса Private Service Connect. Вы связываете одну подсеть с сетевым подключением, а производитель (Vertex AI Pipelines) назначает IP-адреса интерфейсу Private Service Connect.
Создайте сетевое вложение
Внутри Cloud Shell создайте сетевое подключение.
gcloud compute network-attachments create psc-network-attachment \
--region=us-central1 \
--connection-preference=ACCEPT_MANUAL \
--subnets=intf-subnet
Список сетевых вложений
Внутри Cloud Shell укажите сетевое подключение.
gcloud compute network-attachments list
Опишите сетевые вложения
В Cloud Shell опишите сетевое подключение.
gcloud compute network-attachments describe psc-network-attachment --region=us-central1
Запишите URI psc-network-attachment, который будет использоваться производителем при создании интерфейса подключения частной службы.
В приведенном ниже примере URI сетевого подключения psc имеет следующий вид:
projects/psc-vertex/regions/us-central1/networkAttachments/psc-network-attachment
user@cloudshell$ gcloud compute network-attachments describe psc-network-attachment --region=us-central1
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2025-01-21T12:25:25.385-08:00'
fingerprint: m9bHc9qnosY=
id: '56224423547354202'
kind: compute#networkAttachment
name: psc-network-attachment
network: https://www.googleapis.com/compute/v1/projects/psc-vertex/global/networks/consumer-vpc
region: https://www.googleapis.com/compute/v1/projects/psc-vertex/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/psc-vertex/regions/us-central1/networkAttachments/psc-network-attachment
subnetworks:
- https://www.googleapis.com/compute/v1/projects/psc-vertex/regions/us-central1/subnetworks/intf-subnet
7. Настройка Vertex AI Workbench
В следующем разделе вы узнаете, как создать блокнот Jupyter. Этот блокнот будет использоваться для развертывания задания Pipelines, которое отправляет PING из Vertex AI Pipelines в тестовые экземпляры. Путь передачи данных между конвейерами Vertex AI и потребительской сетью, содержащей экземпляры, использует сетевой интерфейс Private Service Connect.
Создайте учетную запись службы, управляемую пользователем.
В следующем разделе вы создадите учетную запись службы, которая будет связана с экземпляром Vertex AI Workbench, используемым в руководстве.
В этом руководстве к учетной записи службы будут применены следующие роли:
В Cloud Shell создайте учетную запись службы.
gcloud iam service-accounts create notebook-sa \
--display-name="notebook-sa"
В Cloud Shell обновите учетную запись службы, указав роль администратора хранилища.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"
В Cloud Shell обновите учетную запись службы, указав роль пользователя Vertex AI.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
В Cloud Shell обновите учетную запись службы, указав роль администратора реестра артефактов.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"
В Cloud Shell разрешите учетной записи службы ноутбука использовать учетную запись службы Compute Engine по умолчанию для создания экземпляра задания конвейера.
gcloud iam service-accounts add-iam-policy-binding \
$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')-compute@developer.gserviceaccount.com \
--member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
Создайте экземпляр Vertex AI Workbench.
В следующем разделе создайте экземпляр Vertex AI Workbench, включающий ранее созданную учетную запись службы Notebook-sa.
Внутри Cloud Shell создайте экземпляр частного клиента.
gcloud workbench instances create workbench-tutorial --vm-image-project=deeplearning-platform-release --vm-image-family=common-cpu-notebooks --machine-type=n1-standard-4 --location=us-central1-a --subnet-region=us-central1 --subnet=workbench-subnet --disable-public-ip --shielded-secure-boot=true --service-account-email=notebook-sa@$projectid.iam.gserviceaccount.com
8. Конвейеры Vertex AI для подключения test-svc-1
Откройте новую вкладку Cloud Shell и обновите настройки проекта.
Внутри Cloud Shell выполните следующие действия:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Чтобы разрешить подключение из Vertex AI Pipelines к test-svc-1, создайте правила входящего брандмауэра, в которых сетевое подключение PSC будет указано в качестве источника (192.168.10.0/28), а IP-адрес test-svc-1 — в качестве места назначения.
В Cloud Shell обновите диапазон назначения, чтобы он соответствовал IP-адресу test-svc-1.
gcloud compute --project=$projectid firewall-rules create allow-icmp-vertex-pipelines-to-test-svc1-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=ALLOW --source-ranges=192.168.10.0/28 --destination-ranges=<your-test-svc-1-vm-ip> --rules=icmp
Пример:
gcloud compute --project=$projectid firewall-rules create allow-icmp-vertex-pipelines-to-test-svc1-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=ALLOW --source-ranges=192.168.10.0/28 --destination-ranges=192.168.20.2 --rules=icmp
Войдите в экземпляр test-svc-1, используя IAP в Cloud Shell.
gcloud compute ssh test-svc-1 --project=$projectid --zone=us-central1-a --tunnel-through-iap
В ОС выполните tcpdump для захвата любого icmp-трафика. Этот сеанс ОС будет использоваться для проверки связи между Vertex AI Pipeline и виртуальной машиной.
sudo tcpdump -i any icmp -nn
9. Обновление агента службы Vertex AI
Vertex AI Pipelines действует от вашего имени для выполнения таких операций, как получение IP-адреса из подсети сетевого подключения PSC, используемого для создания интерфейса PSC. Для этого Vertex AI Pipelines использует сервисный агент (перечислен ниже), которому требуется разрешение администратора сети .
service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com
В Cloud Shell получите номер вашего проекта.
gcloud projects describe $projectid | grep projectNumber
Пример:
gcloud projects describe $projectid | grep projectNumber:
projectNumber: '795057945528'
В Cloud Shell обновите учетную запись агента службы, указав роль Compute.networkAdmin.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-<your-projectnumber>@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"
Пример:
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-795057945528@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"
10. Обновление учетной записи службы по умолчанию
Включите API Compute Engine и предоставьте своей сервисной учетной записи по умолчанию доступ к Vertex AI. Обратите внимание, что для распространения изменения доступа может потребоваться некоторое время.
В Cloud Shell обновите учетную запись службы по умолчанию, указав роль aiplatform.user.
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:<your-projectnumber>-compute@developer.gserviceaccount.com" \
--role="roles/aiplatform.user"
Пример:
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:795057945528-compute@developer.gserviceaccount.com" \
--role="roles/aiplatform.user"
11. Развертывание задания Vertex AI Pipelines
В следующем разделе вы создадите блокнот для успешного выполнения PING с экземпляром потребительского test-svc-1.
Запустите задание обучения в экземпляре Vertex AI Workbench.
- В консоли Google Cloud перейдите на вкладку экземпляров на странице Vertex AI Workbench.
- Рядом с именем вашего экземпляра Vertex AI Workbench (учебник по рабочей среде) нажмите «Открыть JupyterLab». Ваш экземпляр Vertex AI Workbench откроется в JupyterLab.
- Выберите «Файл» > «Создать» > «Блокнот».
- Выберите Ядро > Python 3.
- В новой ячейке записной книжки выполните следующую команду, чтобы убедиться, что у вас установлена последняя версия pip:
! pip3 install --upgrade --quiet google-cloud-aiplatform \
kfp \
google-cloud-pipeline-components
- Установите переменные проекта в новой ячейке блокнота.
PROJECT_ID = "<your-projectid>"
REGION = "<your-region>"
NETWORK_ATTACHMENT_NAME = "psc-network-attachment"
Пример:
PROJECT_ID = "psc-vertex"
REGION = "us-central1"
NETWORK_ATTACHMENT_NAME = "psc-network-attachment"
- Определите глобально уникальное имя сегмента как переменную в новой ячейке записной книжки.
BUCKET_URI = f"gs://<your-bucket-name>"
Пример:
BUCKET_URI = f"gs://psc-vertex-bucket"
- В новой ячейке блокнота создайте сегмент
! gsutil mb -l {REGION} -p {PROJECT_ID} {BUCKET_URI}
В следующем разделе вы определите учетную запись службы вычислений по умолчанию, которая будет использоваться для запуска задания конвейера, а также предоставите ей необходимые разрешения.
shell_output = ! gcloud projects describe $PROJECT_ID
PROJECT_NUMBER = shell_output[-1].split(":")[1].strip().replace("'", "")
SERVICE_ACCOUNT = f"{PROJECT_NUMBER}-compute@developer.gserviceaccount.com"
print(f"Project Number: {PROJECT_NUMBER}")
print(f"Service Account: {SERVICE_ACCOUNT}")
Для подтверждения успешного выполнения распечатываются ваша учетная запись службы и номер проекта.
- В новой ячейке записной книжки предоставьте своей учетной записи службы разрешение на чтение и запись артефактов конвейера в корзину, созданную на предыдущем шаге.
! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectCreator {BUCKET_URI}
! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectViewer {BUCKET_URI}
- В новой ячейке записной книжки определите параметры конвейера. Обратите внимание: NETWORK_ATTACHMENT_NAME — это сетевое подключение PSC, поэтому оно должно совпадать.
PIPELINE_ROOT = f"{BUCKET_URI}/pipeline_root/psc_test"
NETWORK_ATTACHMENT_URI = f"projects/{PROJECT_NUMBER}/regions/{REGION}/networkAttachments/{NETWORK_ATTACHMENT_NAME}"
- В новой ячейке записной книжки инициализируйте Vertex AI SDK.
from kfp import dsl
from google.cloud import aiplatform, aiplatform_v1beta1
import time
from google.cloud.aiplatform_v1.types import pipeline_state
import yaml
from datetime import datetime
import logging
aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
- В новой ячейке записной книжки определите тестовый компонент.
@dsl.container_component
def ping_check(network_address: str):
"""Pings a network address
Args:
network_address: The IP address to ping
"""
return dsl.ContainerSpec(
image="ubuntu:22.04",
command=["sh", "-c"],
args=[
f"""
# Use sed for regex replacement, cleaner than bash parameter expansion for this
cleaned_address=$(echo "{network_address}" | sed 's/[^0-9.]//g')
apt-get update && apt-get install inetutils-traceroute inetutils-ping -y
echo "Will ping $cleaned_address"
if ! ping -c 3 $cleaned_address; then
echo "Ping failed"
traceroute -w 1 -m 7 $cleaned_address
exit 1
fi
"""
],
)
- В новой ячейке записной книжки определите конвейер.
@dsl.pipeline(name="check-connectivity")
def pipeline(ip_address: str):
"""Pings an IP address. Facilitated by a Private Service Connect Interface
Args:
ip_address: The IP address to ping
"""
ping_check(network_address=ip_address).set_caching_options(False)
return
- В новой ячейке блокнота выполните служебную функцию, дождитесь завершения конвейера.
def wait_for_pipeline(
project_id: str,
region: str,
pipeline_job_resource_name: str,
timeout: int = 20 * 60, # Default timeout of 20 minutes (in seconds)
) -> bool:
"""
Waits for a Vertex AI pipeline to finish, with a timeout.
Args:
project_id (str): The Google Cloud project ID.
region (str): The region where the pipeline is running.
pipeline_job_resource_name (str): The resource name of the pipeline job.
timeout (int): The maximum time to wait for the pipeline to finish, in seconds.
Defaults to 20 minutes (1200 seconds).
Returns:
bool: True if the pipeline succeeded, False otherwise.
Raises:
TimeoutError: If the pipeline does not finish within the specified timeout.
"""
# Initialize the AIPlatform client
aiplatform.init(project=project_id, location=region)
# Get the pipeline job
pipeline_job = aiplatform.PipelineJob.get(resource_name=pipeline_job_resource_name)
logging.info(
f"Vertex AI Console Link: https://console.cloud.google.com/vertex-ai/pipelines/locations/{region}/runs/{pipeline_job.resource_name.split('/')[-1]}?project={project_id}"
)
start_time = time.time()
while True:
status = pipeline_job.state
logging.info(f"Pipeline Job status: {status.name}")
if status in [
pipeline_state.PipelineState.PIPELINE_STATE_SUCCEEDED,
pipeline_state.PipelineState.PIPELINE_STATE_FAILED,
pipeline_state.PipelineState.PIPELINE_STATE_CANCELLED,
]:
break # Exit the loop if the job is finished
if time.time() - start_time > timeout:
logging.error(f"Pipeline timed out after {timeout} seconds.")
raise TimeoutError(f"Pipeline timed out after {timeout} seconds.")
# Wait for a short time before checking again
time.sleep(10) # Adjust the wait time as needed
# Do something based on the final status
if status == pipeline_state.PipelineState.PIPELINE_STATE_SUCCEEDED:
logging.info("Pipeline succeeded")
return True
elif status == pipeline_state.PipelineState.PIPELINE_STATE_CANCELLED:
logging.error("Pipeline cancelled")
raise Exception("Pipeline cancelled")
elif status == pipeline_state.PipelineState.PIPELINE_STATE_FAILED:
logging.error("Pipeline failed")
raise Exception("Pipeline failed")
- В новой ячейке записной книжки выполните служебную функцию для запуска конвейера.
def run_job_with_psc_interface_config(
project_id: str,
region: str,
pipeline_root: str,
network_attachment_name: str,
ip_address: str,
local_pipeline_file: str = "pipeline.yaml",
):
"""
Compiles, submits, and monitors a Vertex AI pipeline.
"""
parameter_values = {"ip_address": ip_address}
pipeline_root = f"{pipeline_root}/{datetime.now().strftime('%Y%m%d%H%M%S')}"
logging.info("Compiling pipeline")
try:
with open(local_pipeline_file, "r") as stream:
pipeline_spec = yaml.safe_load(stream)
logging.info(f"Pipeline Spec: {pipeline_spec}")
except yaml.YAMLError as exc:
logging.error(f"Error loading pipeline yaml file: {exc}")
raise
logging.info(f"Will use pipeline root: {pipeline_root}")
# Initialize the Vertex SDK using PROJECT_ID and LOCATION
aiplatform.init(project=project_id, location=region)
# Create the API endpoint
client_options = {"api_endpoint": f"{region}-aiplatform.googleapis.com"}
# Initialize the PipelineServiceClient
client = aiplatform_v1beta1.PipelineServiceClient(client_options=client_options)
# Construct the request
request = aiplatform_v1beta1.CreatePipelineJobRequest(
parent=f"projects/{project_id}/locations/{region}",
pipeline_job=aiplatform_v1beta1.PipelineJob(
display_name="pipeline-with-psc-interface-config",
pipeline_spec=pipeline_spec,
runtime_config=aiplatform_v1beta1.PipelineJob.RuntimeConfig(
gcs_output_directory=pipeline_root, parameter_values=parameter_values
),
psc_interface_config=aiplatform_v1beta1.PscInterfaceConfig(
network_attachment=network_attachment_name
),
),
)
# Make the API call
response = client.create_pipeline_job(request=request)
# Print the response
logging.info(f"Pipeline job created: {response.name}")
return response.name
- В новой ячейке блокнота скомпилируйте конвейер.
from kfp import compiler
compiler.Compiler().compile(pipeline_func=pipeline, package_path='pipeline.yaml')
- В новой ячейке записной книжки обновите TARGET_IP_ADDRESS, чтобы он отражал IP-адрес, полученный на предыдущем этапе для test-svc-1, и наблюдайте за состоянием задания конвейера.
TARGET_IP_ADDRESS = "<your-test-svc-1-ip>"
try:
job_name = run_job_with_psc_interface_config(
project_id=PROJECT_ID,
region=REGION,
pipeline_root=PIPELINE_ROOT,
network_attachment_name=NETWORK_ATTACHMENT_URI,
ip_address=TARGET_IP_ADDRESS,
)
wait_for_pipeline(
project_id=PROJECT_ID,
region=REGION,
pipeline_job_resource_name=job_name,
)
except Exception as e:
logging.error(f"An error occurred: {e}")
Пример:
TARGET_IP_ADDRESS = "192.168.20.2"
try:
job_name = run_job_with_psc_interface_config(
project_id=PROJECT_ID,
region=REGION,
pipeline_root=PIPELINE_ROOT,
network_attachment_name=NETWORK_ATTACHMENT_URI,
ip_address=TARGET_IP_ADDRESS,
)
wait_for_pipeline(
project_id=PROJECT_ID,
region=REGION,
pipeline_job_resource_name=job_name,
)
except Exception as e:
logging.error(f"An error occurred: {e}")
После выполнения шага 17 завершение конвейера займет около 8 минут.
12. Проверьте подключение к test-svc-1.
В ячейке, используемой для выполнения шага 17, обратите внимание на переход статуса задания конвейера с PIPELINE_STATE_PENDING на PIPELINE_STATE_RUNNING и, в конечном итоге, на PIPELINE_STATE_SUCCEEDED, что указывает на успешный пинг от Vertex AI Pipelines и ответ от test-svc-1.
Чтобы проверить трафик ICMP между Vertex AI Pipeline и test-svc-1, просмотрите ранее созданный сеанс tcpdump, выполненный в ОС test-svc-1, который предоставляет журналы, указывающие двунаправленный трафик.
В примере с tcpdump Vertex AI Pipelines получила IP-адрес 192.168.10.3 из подсети 192.168.10.0/28, 192.168.20.2 — это IP-адрес test-svc-1. Обратите внимание: в вашей среде IP-адреса могут отличаться.
user@test-svc-1:~$ sudo tcpdump -i any icmp -nn
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
18:57:54.737490 ens4 In IP 192.168.10.3 > 192.168.20.2: ICMP echo request, id 257, seq 0, length 64
18:57:54.737523 ens4 Out IP 192.168.20.2 > 192.168.10.3: ICMP echo reply, id 257, seq 0, length 64
13. Vertex AI передает AI для подключения test-svc-2
В следующем разделе вы создадите входное правило брандмауэра для запрета трафика из подсети Vertex AI Pilelines (192.168.10.0/28) к test-svc-2, после чего обновите блокнот, чтобы отразить IP-адрес test-svc-2, а затем, наконец, выполните запуск заданий Pipelines.
В ячейке «Записная книжка» в статусе задания конвейера будет указано «Ошибка — сбой конвейера», кроме того, журналы брандмауэра предоставят информацию о неудачном соединении.
Создайте правило брандмауэра, запрещающее входной доступ.
Чтобы запретить подключение Vertex AI Pipelines к test-svc-2, создайте правила входящего брандмауэра, в которых сетевое подключение PSC будет указано в качестве источника (192.168.10.0/28), а IP-адрес test-svc-2 — в качестве места назначения.
В Cloud Shell обновите диапазон назначения, чтобы он соответствовал IP-адресу test-svc-2.
gcloud compute --project=$projectid firewall-rules create deny-icmp-vertex-pipelines-to-test-svc2-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=DENY --source-ranges=192.168.10.0/28 --rules=ALL --destination-ranges=<your-test-svc-2-vm-ip> --rules=icmp --enable-logging
Пример:
gcloud compute --project=$projectid firewall-rules create deny-icmp-vertex-pipelines-to-test-svc2-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=DENY --source-ranges=192.168.10.0/28 --rules=ALL --destination-ranges=192.168.30.2 --enable-logging
Выполнение задания конвейера из Notebook Cell
В новой ячейке записной книжки обновите TARGET_IP_ADDRESS, чтобы он отражал IP-адрес, полученный на предыдущем этапе для test-svc-2, и наблюдайте за состоянием задания конвейеров.
TARGET_IP_ADDRESS = "<your-test-svc-2-ip>"
try:
job_name = run_job_with_psc_interface_config(
project_id=PROJECT_ID,
region=REGION,
pipeline_root=PIPELINE_ROOT,
network_attachment_name=NETWORK_ATTACHMENT_URI,
ip_address=TARGET_IP_ADDRESS,
)
wait_for_pipeline(
project_id=PROJECT_ID,
region=REGION,
pipeline_job_resource_name=job_name,
)
except Exception as e:
logging.error(f"An error occurred: {e}")
Пример:
TARGET_IP_ADDRESS = "192.168.30.2"
try:
job_name = run_job_with_psc_interface_config(
project_id=PROJECT_ID,
region=REGION,
pipeline_root=PIPELINE_ROOT,
network_attachment_name=NETWORK_ATTACHMENT_URI,
ip_address=TARGET_IP_ADDRESS,
)
wait_for_pipeline(
project_id=PROJECT_ID,
region=REGION,
pipeline_job_resource_name=job_name,
)
except Exception as e:
logging.error(f"An error occurred: {e}")
После выполнения задание конвейера займет около 8 минут.
14. Проверка неудачного подключения к test-svc-2.
В ячейке, используемой для выполнения задания конвейеров, обратите внимание на переход состояния с PIPELINE_STATE_PENDING на PIPELINE_STATE_FAILED, указывающий на неудачный пинг от Vertex AI Pipelines и ответ от test-svc-2.
С помощью обозревателя журналов вы можете просмотреть записи журнала брандмауэра, соответствующие правилу запрета входа, состоящему из подсети Vertex AI Pipelines (192.168.10.0/28) и IP-адреса test-svc-2.
Выберите «Показать запрос» и вставьте фильтр ниже, последние 15 минут, а затем «Выполнить запрос».
jsonPayload.rule_details.reference:("network:consumer-vpc/firewall:deny-icmp-vertex-pipelines-to-test-svc2-vm")
Выберите запись журнала, а затем разверните вложенные поля, чтобы отобразить информационные элементы, состоящие из конвейеров AI Vertex и IP-адреса test-svc-2, подтверждающего правило брандмауэра запрещенного входящего доступа.
15. Очистка
Из Cloud Shell удалите компоненты учебника.
gcloud compute instances delete test-svc-1 test-svc-2 --zone=us-central1-a --quiet
gcloud workbench instances delete workbench-tutorial --location=us-central1-a --quiet
gcloud compute firewall-rules delete deny-icmp-vertex-pipelines-to-test-svc2-vm allow-icmp-vertex-pipelines-to-test-svc1-vm ssh-iap-consumer --quiet
gcloud compute routers nats delete cloud-nat-us-central1 --router=cloud-router-us-central1 --region us-central1 --quiet
gcloud compute routers delete cloud-router-us-central1 --region=us-central1 --quiet
16. Поздравления
Поздравляем, вы успешно настроили и проверили интерфейс подключения частных служб, а также соединение потребителей и производителей, реализовав брандмауэр разрешения и запрета входящего трафика.
Вы создали потребительскую инфраструктуру и добавили сетевое подключение, которое позволило сервису Vertex AI Pipelines создать виртуальную машину интерфейса PSC для соединения между потребителем и производителем. Вы узнали, как создавать правила брандмауэра в потребительской сети VPC, которые разрешали и запрещали подключение к экземплярам в потребительской сети.
Cosmopup считает, что уроки потрясающие!!