Vertex AI가 PSC를 사용하여 온라인 예측 엔드포인트에 비공개로 액세스

1. 소개

온프레미스 호스트는 기본적으로 공개 인터넷 (옵션 1)을 통해 또는 온프레미스 네트워크의 Private Service Connect (PSC)와 함께 Cloud VPN 또는 Cloud Interconnect를 사용(옵션 2)하여 온라인 예측에 연결할 수 있습니다. 두 경우 모두 SSL/TLS 암호화를 제공합니다. 상호 연결을 통한 온라인 예측에 대한 하이브리드 연결은 인터넷보다 성능이 우수하므로 그림 1과 같이 중요한 애플리케이션에 권장됩니다.

이 튜토리얼에서는 고가용성 VPN (HA VPN)을 사용하여 멀티 클라우드 및 온프레미스 비공개 연결의 기반으로 사용할 수 있는 두 VPC 네트워크 간에 비공개로 온라인 예측에 액세스하는 방법을 보여줍니다.

Vertex 온라인 예측은 공개 엔드포인트이므로 VPC 서비스 제어 (VPC-SC)를 통해 보안 경계를 만들어 Vertex 및 기타 Googleapis에 대한 액세스를 허용하거나 거부하는 방식으로 액세스를 제한하는 것이 좋습니다. 이 튜토리얼에서는 VPC-SC를 다루지 않습니다. 자세한 내용은 Vertex AI를 사용한 VPC 서비스 제어를 참조하세요.

24a07ba49a7bcb16.png

빌드할 항목

온프레미스 환경을 나타내는 on-prem-vpc라는 VPC 네트워크를 설정합니다. 배포 시 on-prem-vpc이(가) 존재하지 않으며 대신 온프레미스 데이터 센터 또는 클라우드 제공업체에 대한 하이브리드 네트워킹이 사용됩니다.

아래 세부정보에 따라 Cloud NAT를 통해 온라인 예측에 공개적으로 액세스하고 HA VPN을 통해 PSC를 비공개적으로 사용하는 방법을 보여주는 포괄적인 Private Service Connect 아키텍처를 빌드하겠습니다.

b545c808b366341a.png

온라인 예측이 Google Cloud 프로젝트에 배포되면 다음 사용 사례를 살펴봅니다.

온라인 예측에 대한 공개 액세스는 다음으로 구성됩니다.

  • 이그레스 인터넷 액세스에 NAT를 활용하는 GCE 인스턴스 (nat-client) 만들기
  • CURL을 사용하여 모델에 대한 추론
  • TCPDUMP를 사용하여 공개 VIP를 통해 온라인 예측에 액세스하는지 검증

온라인 예측에 대한 비공개 액세스로, 다음으로 구성됩니다.

  • 프로젝트의 Vertex 온라인 예측 엔드포인트에 모델 배포
  • challengel-vpc에서 Private Service Connect (Googleapis) 엔드포인트 만들기
  • 클라우드 라우터를 통해 온프렘 VPC에 커스텀 공지로 PSC IP 주소 내보내기
  • GCE 인스턴스 (비공개-클라이언트)를 만들고 PSC 엔드포인트 IP로 etc/hosts 파일을 업데이트합니다.
  • CURL을 사용하여 모델에 대한 추론
  • TCPDUMP를 사용하여 PSC 엔드포인트 IP 주소를 통해 온라인 예측에 액세스하는지 확인

학습할 내용

  • Private Service Connect 엔드포인트를 설정하는 방법
  • Cloud Router를 통해 PSC 엔드포인트 IP를 공지하는 방법
  • TCPDUMP를 사용하여 공개 및 비공개 온라인 예측 액세스의 유효성을 검사하는 방법

필요한 항목

  • Google Cloud 프로젝트

IAM 권한

Compute 네트워크 관리자

서비스 디렉터리 편집자

DNS 관리자

네트워크 관리자

할당량 관리자

Notebooks 관리자

서비스 계정 사용자

스토리지 관리자

Vertex AI 사용자

서비스 계정 관리자

2. 시작하기 전에

튜토리얼을 지원하도록 프로젝트 업데이트

이 튜토리얼에서는 $variables를 사용하여 Cloud Shell에서 gcloud 구성을 구현하는 데 도움을 줍니다.

Cloud Shell 내에서 다음을 수행합니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

3. 서비스 사용 설정

Cloud Shell 내에서 다음을 수행합니다.

gcloud services enable dns.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable iam.googleapis.com 
gcloud services enable compute.googleapis.com 
gcloud services enable notebooks.googleapis.com

4. goal-vpc 설정

Goal-vpc 만들기

Cloud Shell 내에서 다음을 수행합니다.

gcloud compute networks create aiml-vpc --project=$projectid --subnet-mode=custom

사용자 관리형 노트북 서브넷 만들기

Cloud Shell 내에서 다음을 수행합니다.

gcloud compute networks subnets create workbench-subnet --project=$projectid --range=172.16.10.0/28 --network=aiml-vpc --region=us-central1 --enable-private-ip-google-access

Cloud Router 및 NAT 구성

사용자 관리 노트북 인스턴스에는 외부 IP 주소가 없기 때문에 Cloud NAT가 노트북 소프트웨어 패키지 다운로드에 사용됩니다. Cloud NAT는 이그레스 NAT 기능도 제공합니다. 즉, 인터넷 호스트가 사용자 관리 노트북과 통신을 시작할 수 없으므로 보다 안전합니다.

Cloud Shell 내에서 리전별 Cloud Router를 만듭니다.

gcloud compute routers create cloud-router-us-central1-aiml-nat --network aiml-vpc --region us-central1

Cloud Shell 내에서 리전별 Cloud NAT 게이트웨이를 만듭니다.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

5. 온프렘 VPC 설정

on-prem-vpc 만들기

Cloud Shell 내에서 다음을 수행합니다.

gcloud compute networks create on-prem-vpc --project=$projectid --subnet-mode=custom

nat-subnet 만들기

Cloud Shell 내에서 다음을 수행합니다.

gcloud compute networks subnets create nat-subnet --project=$projectid --range=192.168.10.0/28 --network=on-prem-vpc --region=us-central1

private-ip-subnet 만들기

Cloud Shell 내에서 다음을 수행합니다.

gcloud compute networks subnets create private-ip-subnet --project=$projectid --range=192.168.20.0/28 --network=on-prem-vpc --region=us-central1

Cloud Router 및 NAT 구성

Cloud NAT는 소프트웨어 패키지 다운로드 가이드에서 사용됩니다. Cloud NAT는 이그레스 NAT 기능도 제공합니다. 즉, 인터넷 호스트가 컴퓨팅과 통신을 시작할 수 없으므로 보안이 강화됩니다.

Cloud Shell 내에서 리전별 Cloud Router를 만듭니다.

gcloud compute routers create cloud-router-us-central1-on-prem-nat --network on-prem-vpc --region us-central1

Cloud Shell 내에서 리전별 Cloud NAT 게이트웨이를 만듭니다.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-on-prem-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

6. Private Service Connect 엔드포인트 만들기

다음 섹션에서는 on-prem-vpc에서 Vertex API에 액세스하는 데 사용할 Private Service Connect (PSC) 엔드포인트를 만듭니다. PSC IP 주소 100.100.10.10은 다음 단계에서 온프레미스 네트워크에 대한 커스텀 라우터 공지로 goall-vpc-cloud-router-vpn에서 공지됩니다.

Cloud Shell 사용

gcloud compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=100.100.10.10 \
    --network=aiml-vpc

PSC 엔드포인트 만들기

Cloud Shell 사용

gcloud compute forwarding-rules create pscvertex \
    --global \
    --network=aiml-vpc \
    --address=psc-ip \
    --target-google-apis-bundle=all-apis

구성된 Private Service Connect 엔드포인트 나열

Cloud Shell 사용

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

구성된 Private Service Connect 엔드포인트 설명

Cloud Shell 사용

gcloud compute forwarding-rules describe \
    pscvertex --global

7. 하이브리드 연결

다음 섹션에서는 경계 게이트웨이 프로토콜 (BGP)을 사용하여 Virtual Private Cloud (VPC)와 피어 네트워크 간에 경로를 동적으로 교환할 수 있는 Cloud Router를 만듭니다.

Cloud Router는 Cloud VPN 터널을 통해 BGP 세션을 설정하여 네트워크를 연결할 수 있습니다. 새 서브넷 IP 주소 범위를 자동으로 학습하여 피어 네트워크에 알립니다.

이 가이드에서는 aiml-vpcon-prem-vpc 간에 HA VPN을 배포합니다.

aiml-vpc의 HA VPN 게이트웨이를 만듭니다.

각 게이트웨이가 생성되면 각 게이트웨이 인터페이스에 하나씩 두 개의 외부 IPv4 주소가 자동으로 할당됩니다.

Cloud Shell 내에서 HA VPN 게이트웨이를 만듭니다.

gcloud compute vpn-gateways create aiml-vpn-gw \
   --network=aiml-vpc\
   --region=us-central1

on-prem-vpc에 대해 HA VPN 게이트웨이를 만듭니다.

각 게이트웨이가 생성되면 각 게이트웨이 인터페이스에 하나씩 두 개의 외부 IPv4 주소가 자동으로 할당됩니다. 나중에 구성 단계에서 사용할 수 있도록 이 IP 주소를 기록해 둡니다.

Cloud Shell 내에서 HA VPN 게이트웨이를 만듭니다.

gcloud compute vpn-gateways create on-prem-vpn-gw \
   --network=on-prem-vpc\
   --region=us-central1

HA VPN 게이트웨이 생성 확인

콘솔을 사용하여 하이브리드 연결 → VPN → Cloud VPN 게이트웨이로 이동한 다음 게이트웨이 IP가 생성되었는지 확인합니다.

66312b1b53c233d7.png

rememberl-vpc용 Cloud Router 만들기

Cloud Shell 내에서 us-central1에 Cloud Router를 만듭니다.

gcloud compute routers create aiml-cr-us-central1 \
   --region=us-central1 \
   --network=aiml-vpc\
   --asn=65001

on-prem-vpc용 Cloud Router 만들기

Cloud Shell 내에서 us-central1에 Cloud Router를 만듭니다.

gcloud compute routers create on-prem-cr-us-central1 \
   --region=us-central1 \
   --network=on-prem-vpc \
   --asn=65002

aml-vpc용 VPN 터널 만들기

각 HA VPN 게이트웨이에 2개의 VPN 터널을 만듭니다.

VPN 터널0 만들기

Cloud Shell 내에서 tunnel0을 만듭니다.

gcloud compute vpn-tunnels create aiml-vpc-tunnel0 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router aiml-cr-us-central1 \
    --vpn-gateway aiml-vpn-gw \
    --interface 0

VPN 터널1 만들기

Cloud Shell 내에서 tunnel1을 만듭니다.

gcloud compute vpn-tunnels create aiml-vpc-tunnel1 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router aiml-cr-us-central1 \
    --vpn-gateway aiml-vpn-gw \
    --interface 1

on-prem-vpc용 VPN 터널 만들기

각 HA VPN 게이트웨이에 2개의 VPN 터널을 만듭니다.

VPN 터널0 만들기

Cloud Shell 내에서 tunnel0을 만듭니다.

gcloud compute vpn-tunnels create on-prem-tunnel0 \
    --peer-gcp-gateway aiml-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 0

VPN 터널1 만들기

Cloud Shell 내에서 tunnel1을 만듭니다.

gcloud compute vpn-tunnels create on-prem-tunnel1 \
    --peer-gcp-gateway aiml-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 1

VPN 터널 생성 검사

콘솔을 사용하여 하이브리드 연결 → VPN → 클라우드 VPN 터널로 이동합니다.

e8e13ebaed09f1.png

8. BGP 이웃 설정

BGP 세션 만들기

이 섹션에서는 Cloud Router 인터페이스와 BGP 피어를 구성합니다.

wantl-vpc용 BGP 인터페이스 및 피어링 만들기

Cloud Shell 내에서 BGP 인터페이스를 만듭니다.

gcloud compute routers add-interface aiml-cr-us-central1 \
    --interface-name if-tunnel0-to-onprem \
    --ip-address 169.254.1.1 \
    --mask-length 30 \
    --vpn-tunnel aiml-vpc-tunnel0 \
    --region us-central1

Cloud Shell 내에서 BGP 피어를 만듭니다.

gcloud compute routers add-bgp-peer aiml-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel0 \
    --interface if-tunnel1-to-onprem \
    --peer-ip-address 169.254.1.2 \
    --peer-asn 65002 \
    --region us-central1

Cloud Shell 내에서 BGP 인터페이스를 만듭니다.

gcloud compute routers add-interface aiml-cr-us-central1 \
    --interface-name if-tunnel1-to-onprem \
    --ip-address 169.254.2.1 \
    --mask-length 30 \
    --vpn-tunnel aiml-vpc-tunnel1 \
    --region us-central1

Cloud Shell 내에서 BGP 피어를 만듭니다.

gcloud compute routers add-bgp-peer aiml-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel1 \
    --interface if-tunnel2-to-onprem \
    --peer-ip-address 169.254.2.2 \
    --peer-asn 65002 \
    --region us-central1

on-prem-vpc용 BGP 인터페이스 및 피어링 만들기

Cloud Shell 내에서 BGP 인터페이스를 만듭니다.

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel0-to-aiml-vpc\
    --ip-address 169.254.1.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel0 \
    --region us-central1

Cloud Shell 내에서 BGP 피어를 만듭니다.

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-aiml-vpc-tunnel0 \
    --interface if-tunnel1-to-aiml-vpc\
    --peer-ip-address 169.254.1.1 \
    --peer-asn 65001 \
    --region us-central1

Cloud Shell 내에서 BGP 인터페이스를 만듭니다.

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel1-to-aiml-vpc\
    --ip-address 169.254.2.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel1 \
    --region us-central1

Cloud Shell 내에서 BGP 피어를 만듭니다.

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-aiml-vpc-tunnel1\
    --interface if-tunnel2-to-aiml-vpc\
    --peer-ip-address 169.254.2.1 \
    --peer-asn 65001 \
    --region us-central1

하이브리드 연결 → VPN으로 이동하여 VPN 터널 세부정보를 확인합니다.

cb91b4476a88acd3.png

HA VPN을 통한 목표-vpc 학습된 경로 검증

콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → goall-vpc→ 경로 → 리전 → US-CENTRAL1 → 보기로 이동합니다.

목표-vpc가 on-prem-vpc nat-subnet 및 private-ip-subnet에서 경로를 학습했는지 관찰

f407ed6e1a6233db.png

on-prem-vpc가 HA-VPN을 통해 Workbench-subnet을 학습했는지 확인

콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → on-prem-vpc → 경로 → 리전 → US-CENTRAL1 → 보기로 이동합니다.

7957e5d898a9e7e0.png

9. 커스텀 경로 공지 생성 subjectl-vpc

서브넷이 VPC에 구성되어 있지 않으므로 Private Service Connect 엔드포인트 IP는 목표-cr-us-central1 클라우드 라우터에서 자동으로 공지되지 않습니다.

대신, on-prem-vpc로의 BGP를 통해 온프레미스 환경으로 공지될 엔드포인트 IP 주소 100.100.10.10에 대해 목표-cr-us-central Cloud Router에서 커스텀 경로 공지를 만들어야 합니다.

콘솔에서 하이브리드 연결 → 클라우드 라우터 → sum-cr-us-central1로 이동한 다음 수정을 선택합니다.

c8fb02ed59a5b068.png

공지된 경로 섹션에서 커스텀 경로 만들기 옵션을 선택하고 아래 예를 기반으로 필드를 업데이트하고 완료를 선택한 후 저장을 클릭합니다.

5996464e3aae0665.png

f799082ab2cd7e31.png

확인

on-prem-vpc가 HA-VPN을 통한 PSC 엔드포인트 IP 주소를 학습했는지 확인

콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → on-prem-vpc → 경로 → 리전 → US-CENTRAL1 → 보기로 이동합니다.

1b42673e6f940bf2.png

10. on-prem-vpc 커스텀 경로 공지 만들기

온프렘-vpc 클라우드 라우터는 기본적으로 모든 서브넷을 공지하지만 private-ip-subnet만 필요합니다.

다음 섹션에서는 on-prem-cr-us-central1 클라우드 라우터의 경로 공지를 업데이트합니다.

콘솔에서 하이브리드 연결 → 클라우드 라우터 → on-prem-cr-us-central1로 이동한 다음 수정을 선택합니다.

bd96bde9550d516a.png

공지된 경로 섹션에서 커스텀 경로 만들기 옵션을 선택하고 아래 예를 기반으로 필드를 업데이트하고 완료를 선택한 후 저장을 클릭합니다.

f8b61f669a9cfeef.png

확인

목표-vpc가 on-prem-vpc에서 private-ip-subnet 경로를 학습했는지 확인합니다.

콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → suml-vpc → 경로 → 리전 → US-CENTRAL1 → 보기로 이동합니다.

2b1a7a5f918e9f50.png

11. 사용자 관리형 서비스 계정 (GCE 인스턴스) 만들기

Vertex API에 세밀한 제어를 제공하려면 nat 및 비공개 클라이언트 인스턴스에 적용될 사용자 관리 서비스 계정이 필요합니다. 생성된 서비스 계정 권한은 비즈니스 요구사항에 따라 수정할 수 있습니다. 이 튜토리얼에서는 사용자 관리형 서비스 계정인 vertex-sa에 다음 역할이 적용됩니다.

계속하기 전에 Service Account API를 해야 합니다.

Cloud Shell 내에서 서비스 계정을 만듭니다.

gcloud iam service-accounts create gce-vertex-sa \
    --description="service account for vertex" \
    --display-name="gce-vertex-sa"

Cloud Shell 내에서 컴퓨팅 인스턴스 관리자 역할로 서비스 계정을 업데이트합니다.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:gce-vertex-sa@$projectid.iam.gserviceaccount.com" --role="roles/compute.instanceAdmin.v1"

Cloud Shell 내에서 Vertex AI 사용자 역할로 서비스 계정을 업데이트합니다.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:gce-vertex-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

12. 사용자 관리형 서비스 계정 만들기 (노트북)

다음 섹션에서는 튜토리얼에 사용되는 Vertex Workbench (노트북)와 연결할 사용자 관리형 서비스 계정을 만듭니다.

이 가이드에서는 서비스 계정에 다음 역할이 적용됩니다.

Cloud Shell 내에서 서비스 계정을 만듭니다.

gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"

Cloud Shell 내에서 스토리지 관리자 역할로 서비스 계정을 업데이트합니다.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"

Cloud Shell 내에서 Vertex AI 사용자 역할로 서비스 계정을 업데이트합니다.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

Cloud Shell 내에서 Artifact Registry 관리자 역할로 서비스 계정을 업데이트합니다.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"

Cloud Shell 내에서 서비스 계정을 나열하고 사용자 관리 노트북을 만들 때 사용할 이메일 주소를 기록합니다.

gcloud iam service-accounts list

13. 테스트 인스턴스를 만들었습니다.

다음 섹션에서는 테스트 인스턴스를 만들어 Vertex API에 도달하기 위한 다양한 메서드, 특히 다음을 검증합니다.

  • nat-client, 인스턴스가 Cloud NAT를 사용하여 Vertex AI를 확인하므로 인터넷을 통해 온라인 예측 엔드포인트에 액세스합니다.
  • private-client 인스턴스는 Private Service Connect IP 100.100.10.10을 사용하여 HA-VPN을 통해 온라인 예측 엔드포인트에 액세스합니다.

Cloud Shell 내에서 nat-client 인스턴스를 만듭니다.

gcloud compute instances create nat-client \
    --zone=us-central1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=nat-subnet \
    --service-account=vertex-sa@$projectid.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

Cloud Shell 내에서 private-client 인스턴스를 만듭니다.

gcloud compute instances create private-client \
    --zone=us-central1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=private-ip-subnet \
    --service-account=vertex-sa@$projectid.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

IAP (Identity-Aware Proxy)에서 VM 인스턴스에 연결하도록 허용하려면 다음과 같은 방화벽 규칙을 만듭니다.

  • IAP를 사용하여 액세스할 수 있게 하려는 모든 VM 인스턴스에 적용됩니다.
  • IP 범위 35.235.240.0/20에서 들어오는 인그레스 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달에 사용하는 모든 IP 주소가 포함됩니다.

Cloud Shell 내에서 IAP 방화벽 규칙을 만듭니다.

gcloud compute firewall-rules create ssh-iap-on-prem-vpc \
    --network on-prem-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

14. 사용자 관리 노트북 만들기

노트북 API

다음 섹션에서는 이전에 만든 서비스 계정 user-managed-notebook-sa를 포함하는 사용자 관리 노트북을 만듭니다.

Cloud Shell 내에서 비공개 클라이언트 인스턴스를 만듭니다.

gcloud notebooks 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 \
      --no-public-ip    --service-account=user-managed-notebook-sa@$projectid.iam.gserviceaccount.com

15. 모델 및 온라인 예측 배포

다음 섹션에서는 제공된 Codelab, Vertex AI:Sklearn과 함께 커스텀 예측 루틴을 사용하여 예측을 위한 데이터 사전 처리 및 사후 처리를 사용합니다. 이전 단계에서 이미 노트북을 만들었으므로 섹션 7부터 시작합니다. 모델이 배포되면 튜토리얼로 돌아가서 다음 섹션을 시작하세요.

ee68b7ba0cfd2746.png

16. 인터넷을 통한 Vertex API 액세스 검증

다음 섹션에서는 인스턴스 nat-client에 로그인하고 Vertex API를 확인하는 데 사용되는 us-central1-aiplatform.googleapis.com 도메인에 대해 dig 및 tcpdump를 사용하여 Vertex AI에 대한 연결을 확인합니다.

Cloud Shell에서 IAP를 사용하여 nat-client에 로그인하고 꼭짓점 도메인 us-central1-aiplatform.googleapis.com에 대해 조사를 수행하여 Vertex API에 대한 연결을 확인합니다.

gcloud compute ssh nat-client --project=$projectid --zone=us-central1-a --tunnel-through-iap

분석을 실행합니다.

dig us-central1-aiplatform.googleapis.com

예를 들어 DNS 응답의 공개 IP를 기록해 둡니다.

user@nat-client:~$ dig us-central1-aiplatform.googleapis.com

; <<>> DiG 9.16.42-Debian <<>> us-central1-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56761
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-aiplatform.googleapis.com. IN A

;; ANSWER SECTION:
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.111.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.250.1.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.121.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.250.103.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.120.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.171.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.250.159.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.120.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.161.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.172.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.126.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.70.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.132.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.201.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.202.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.69.95

;; Query time: 4 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Thu Jun 29 01:35:57 UTC 2023
;; MSG SIZE  rcvd: 322

온라인 예측에 대해 curl을 수행할 때 nat-client OS에서 tcpdump를 실행하여 DNS 확인을 검증합니다.

 sudo tcpdump -i any port 53 -n

예:

user@nat-client:~$ sudo tcpdump -i any port 53 -n 
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

'+'를 선택하여 새 Cloud Shell 터미널을 엽니다. 새 탭이 열리면 프로젝트 이름 변수를 업데이트합니다.

Cloud Shell 내에서 프로젝트 이름 변수를 업데이트합니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

Cloud Shell 2 내에서 nat-client 인스턴스에 대한 SSH를 수행합니다.

gcloud compute ssh --zone "us-central1-a" "nat-client" --project "$projectid"

다음 섹션에서는 sudo VI 편집기 또는 nano를 사용하여 instances.json 파일을 만들고 배포된 모델에서 예측을 얻는 데 사용되는 데이터 문자열을 삽입합니다.

nat-client OS에서 아래의 데이터 문자열로 instances.json 파일을 만듭니다.

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

예:

user@nat-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@nat-client:$

Cloud 콘솔에서 후속 단계에서 사용할 온라인 예측 엔드포인트 ID를 가져옵니다.

Vertex AI → 온라인 예측으로 이동합니다.

237d413ccde1e95b.png

nat-client OS에서 다음 변수를 만듭니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

예:

ENDPOINT_ID="3328226095324463104"

nat-client OS에서 curl을 수행하여 모델의 응답을 가져옵니다.

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

예를 들어 성공적인 예측을 확인합니다.

user@nat-client$ curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "1949163636186415104",
  "model": "projects/234086459238/locations/us-central1/models/947543727654567936",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}

17. 검증 - Vertex API에 대한 인터넷 액세스

예측을 실행했으므로 이제 Vertex AI 도메인 us-central1-aiplatform.googleapis.com의 로컬 DNS 서버 169.254.169.254에 대해 DNS 쿼리를 수행하는 nat-client 인스턴스 (192.168.10.2)를 나타내는 TCPDUMP 결과 (터미널 1)를 살펴보겠습니다. DNS 쿼리의 결과는 아래에 설명된 Vertex API의 공개 가상 IP 주소 (VIPS)입니다.

user@nat-client:~$ sudo tcpdump -i any port 53 -n
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
20:05:09.260937 ens4  Out IP 192.168.10.2.40782 > 169.254.169.254.53: 47190+ A? oauth2.googleapis.com. (39)
20:05:09.260946 ens4  Out IP 192.168.10.2.40782 > 169.254.169.254.53: 28075+ AAAA? oauth2.googleapis.com. (39)
20:05:09.263556 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.40782: 28075 4/0/0 AAAA 2607:f8b0:4001:c34::5f, AAAA 2607:f8b0:4001:c54::5f, AAAA 2607:f8b0:4001:c16::5f, AAAA 2607:f8b0:4001:c17::5f (151)
20:05:09.265018 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.40782: 47190 16/0/0 A 74.125.201.95, A 74.125.202.95, A 74.125.69.95, A 64.233.183.95, A 173.194.193.95, A 173.194.194.95, A 173.194.195.95, A 173.194.196.95, A 173.194.197.95, A 64.233.191.95, A 173.194.74.95, A 173.194.192.95, A 209.85.145.95, A 209.85.146.95, A 209.85.147.95, A 142.250.125.95 (295)
20:05:09.474478 ens4  Out IP 192.168.10.2.57356 > 169.254.169.254.53: 36008+ A? us-central1-aiplatform.googleapis.com. (55)
20:05:09.474488 ens4  Out IP 192.168.10.2.57356 > 169.254.169.254.53: 47020+ AAAA? us-central1-aiplatform.googleapis.com. (55)
20:05:09.477190 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.57356: 36008 16/0/0 A 173.194.194.95, A 173.194.195.95, A 173.194.196.95, A 173.194.197.95, A 173.194.74.95, A 173.194.192.95, A 209.85.145.95, A 209.85.146.95, A 209.85.147.95, A 142.250.125.95, A 142.250.136.95, A 142.250.148.95, A 209.85.200.95, A 209.85.234.95, A 142.250.152.95, A 142.250.128.95 (311)
20:05:09.478607 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.57356: 47020 4/0/0 AAAA 2607:f8b0:4001:c1b::5f, AAAA 2607:f8b0:4001:c0c::5f, AAAA 2607:f8b0:4001:c0e::5f, AAAA 2607:f8b0:4001:c1e::5f (167)

18. Vertex API에 대한 비공개 액세스 사용 설정

다음 섹션에서는 하이브리드 네트워킹 (HA VPN)을 통해 Private Service Connect를 사용하여 Vertex API에 액세스하여 비공개로 온라인 예측에 도달합니다. 튜토리얼에 사용된 예시에서는 비공개 클라이언트 인스턴스의 /etc/hosts 파일을 업데이트합니다.

온프레미스 환경에서는 테스트를 위해 한 개 또는 소수의 머신 /etc/hosts 파일을 업데이트하는 것이 적절하지만 대규모 및 프로덕션 환경의 경우 PSC 엔드포인트 FQDN을 사용하여 새 전달 영역을 만드는 것이 더 바람직합니다.

예를 들어 튜토리얼에서 만든 psc 엔드포인트는 pscvertex라고 하며 이는 pscvertex.p.googleapis.com으로 변환됩니다.이때 꼭짓점에 엔드포인트를 사용하면 서비스(예: us-central1-aiplatform-pscvertex.p.googleapis.com)와 함께 FQDN을 추가할 수 있습니다.

또한 PSC 엔드포인트로 온프레미스 DNS를 업데이트하려면 FDQN을 호출하도록 로컬 애플리케이션을 리팩터링해야 합니다(예: 네이티브 공개 엔드포인트 us-central1-aiplatform.googleapis.com 대신 us-central1-aiplatform-pscvertex.p.googleapis.com).

커스텀 엔드포인트를 사용하도록 구성할 수 있는 클라이언트는 p.googleapis.com DNS 이름을 사용하여 엔드포인트에 요청을 보낼 수 있습니다.

커스텀 엔드포인트를 사용하도록 구성하는 방법은 클라이언트 또는 클라이언트 라이브러리에 대한 문서를 참조하세요. 예를 들면 다음과 같습니다.

'+'를 선택하여 새 Cloud Shell 터미널을 엽니다. 새 탭이 열리면 프로젝트 이름 변수를 업데이트합니다.

Cloud Shell에서

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

새 Cloud Shell에서 IAP를 사용하여 비공개 클라이언트에 로그인하고 꼭짓점 도메인 us-central1-aiplatform.googleapis.com에 대해 조사를 수행하여 Vertex API에 대한 연결을 확인합니다.

Cloud Shell에서 비공개 클라이언트 OS 인스턴스에 로그인합니다.

gcloud compute ssh private-client --project=$projectid --zone=us-central1-a --tunnel-through-iap

분석을 실행합니다.

dig us-central1-aiplatform.googleapis.com

예를 들어 DNS 응답을 기반으로 하는 공개 IP를 기록해 둡니다.

user@private-client:~$ dig us-central1-aiplatform.googleapis.com

; <<>> DiG 9.16.42-Debian <<>> us-central1-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33311
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-aiplatform.googleapis.com. IN A

;; ANSWER SECTION:
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.132.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.201.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.202.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.69.95
us-central1-aiplatform.googleapis.com. 300 IN A 64.233.182.95
us-central1-aiplatform.googleapis.com. 300 IN A 64.233.183.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.193.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.194.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.195.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.196.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.197.95
us-central1-aiplatform.googleapis.com. 300 IN A 64.233.191.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.74.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.192.95
us-central1-aiplatform.googleapis.com. 300 IN A 209.85.145.95
us-central1-aiplatform.googleapis.com. 300 IN A 209.85.146.95

;; Query time: 4 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Sun Jul 02 20:5

sudo VI 편집기 또는 nano를 사용하여 비공개 클라이언트 인스턴스 /etc/hosts를 업데이트하여 추가 변경 없이 PSC 엔드포인트 100.100.10.10을 가리키는 Vertex AI FQDN us-central1-aiplatform.googleapis.com의 레코드를 만듭니다.

예:

user@private-client:~$ more /etc/hosts
127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

100.100.10.10 us-central1-aiplatform.googleapis.com
192.168.20.2 private-client.c.$projectid.internal private-client  # Added by Google
169.254.169.254 metadata.google.internal  # Added by Google

비공개 클라이언트 OS에서 Vertex API 엔드포인트로 PING를 수행합니다.

ping us-central1-aiplatform.googleapis.com

예를 들어 PING는 PSC 엔드포인트 IP를 반환하지만 응답이 필요하지 않습니다.

user@private-client:~$ ping us-central1-aiplatform.googleapis.com
PING us-central1-aiplatform.googleapis.com (100.100.10.10) 56(84) bytes of data.

비공개 클라이언트 OS에서 tcpdump를 실행하여 온라인 예측에 대해 curl을 수행할 때 PSC 엔드포인트에 대한 DNS 변환과 IP 데이터 경로를 검증합니다.

 sudo tcpdump -i any port 53 -n or host 100.100.10.10

'+'를 선택하여 네 번째 Cloud Shell 터미널을 엽니다. 새 탭이 열리면 프로젝트 이름 변수를 업데이트합니다.

Cloud Shell 내에서 프로젝트 이름 변수를 업데이트합니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

Cloud Shell 4 내에서 비공개 클라이언트 인스턴스에 대한 SSH를 수행합니다.

gcloud compute ssh --zone "us-central1-a" "private-client" --project "$projectid"

다음 섹션에서는 sudo VI 편집기 또는 nano를 사용하여 instances.json 파일을 만들고 배포된 모델에서 예측을 얻는 데 사용되는 데이터 문자열을 삽입합니다.

비공개 클라이언트 OS에서 아래의 데이터 문자열로 instances.json 파일을 만듭니다.

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

예:

user@private-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@private-client:$

비공개 클라이언트 OS에서 다음 변수를 만듭니다.

gcloud config list project
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

예:

ENDPOINT_ID="3328226095324463104"

Cloud Shell 4의 비공개 클라이언트 OS에서 curl을 수행하여 모델의 응답을 가져옵니다.

curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

19. 검증 - Vertex API에 대한 비공개 액세스

Cloud Shell 4의 비공개 클라이언트 OS에서 Vertex API에 액세스하는 데 PSC 엔드포인트 IP (100.100.10.10)가 사용되었습니다.

user@private-client$ curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 100.100.10.10:443...
* Connected to us-central1-aiplatform.googleapis.com (100.100.10.10) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=upload.video.google.com
*  start date: May 29 08:21:36 2023 GMT
*  expire date: Aug 21 08:21:35 2023 GMT
*  subjectAltName: host "us-central1-aiplatform.googleapis.com" matched cert's "*.googleapis.com"
*  issuer: C=US; O=Google Trust Services LLC; CN=GTS CA 1C3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55f2ab65c2c0)
> POST /v1/projects/$projectid/locations/us-central1/endpoints/3328226095324463104:predict HTTP/2
> Host: us-central1-aiplatform.googleapis.com
> user-agent: curl/7.74.0
> accept: */*
> authorization: Bearer ya29.a0AbVbY6NdCbIJYj0mQROeq-xYgQCw534TTtjRc1kBAEOimKCFxb3gqgD5AvhfefJatSNr33eW1YJirfQVMptFoqfjRoB-i8zEJJ_GGCVqhsVnpSOjK0hzJQSuo2YGjIiSe1o1zdo7lWmh1Px-vLe8FImieGkrQ1hqVaa6aCgYKAXgSARESFQFWKvPlUQ_FuKB2hrDJRyFDjupL1g0171
> content-type: application/json
> content-length: 154
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
* We are completely uploaded and fine
< HTTP/2 200 
< content-type: application/json; charset=UTF-8
< x-vertex-ai-internal-prediction-backend: harpoon
< date: Mon, 03 Jul 2023 22:13:35 GMT
< vary: X-Origin
< vary: Referer
< vary: Origin,Accept-Encoding
< server: scaffolding on HTTPServer2
< cache-control: private
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< accept-ranges: none
< 
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "1949163636186415104",
  "model": "projects/234086459238/locations/us-central1/models/947543727654567936",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}
* Connection #0 to host us-central1-aiplatform.googleapis.com left intact

Cloud Shell 3의 TCPDUMP 터미널에서 /etc/host 파일은 우선 적용되었지만 PSC IP 주소 100.100.10.10이 데이터 경로에 사용되었기 때문에 us-central1-aiplatform.googleapis.com에 대한 DNS 조회가 관찰되지 않았음을 검증할 수 있습니다.

user@private-client:~$ sudo tcpdump -i any port 53 -n or host 100.100.10.10
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
22:13:35.507625 ens4  Out IP 192.168.20.2.37004 > 169.254.169.254.53: 58585+ A? oauth2.googleapis.com. (39)
22:13:35.507631 ens4  Out IP 192.168.20.2.37004 > 169.254.169.254.53: 15580+ AAAA? oauth2.googleapis.com. (39)
22:13:35.511796 ens4  In  IP 169.254.169.254.53 > 192.168.20.2.37004: 58585 16/0/0 A 142.251.6.95, A 108.177.112.95, A 74.125.124.95, A 172.217.212.95, A 172.217.214.95, A 172.253.114.95, A 172.253.119.95, A 108.177.111.95, A 142.250.1.95, A 108.177.121.95, A 142.250.103.95, A 108.177.120.95, A 142.251.171.95, A 142.250.159.95, A 142.251.120.95, A 142.251.161.95 (295)
22:13:35.512002 ens4  In  IP 169.254.169.254.53 > 192.168.20.2.37004: 15580 4/0/0 AAAA 2607:f8b0:4001:c2b::5f, AAAA 2607:f8b0:4001:c18::5f, AAAA 2607:f8b0:4001:c5f::5f, AAAA 2607:f8b0:4001:c58::5f (151)
22:13:35.722145 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [S], seq 1951267724, win 65320, options [mss 1420,sackOK,TS val 1371205990 ecr 0,nop,wscale 7], length 0
22:13:35.730727 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [S.], seq 3198878726, ack 1951267725, win 65535, options [mss 1366,sackOK,TS val 67847676 ecr 1371205990,nop,wscale 8], length 0
22:13:35.730760 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [.], ack 1, win 511, options [nop,nop,TS val 1371205999 ecr 67847676], length 0
22:13:35.738339 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 1:518, ack 1, win 511, options [nop,nop,TS val 1371206006 ecr 67847676], length 517
22:13:35.739922 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [.], ack 518, win 261, options [nop,nop,TS val 67847688 ecr 1371206006], length 0
22:13:35.740860 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [.], seq 1:2709, ack 518, win 261, options [nop,nop,TS val 67847689 ecr 1371206006], length 2708
22:13:35.740863 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [P.], seq 2709:4699, ack 518, win 261, options [nop,nop,TS val 67847689 ecr 1371206006], length 1990
22:13:35.740874 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [.], ack 2709, win 497, options [nop,nop,TS val 1371206009 ecr 67847689], length 0
22:13:35.740886 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [.], ack 4699, win 485, options [nop,nop,TS val 1371206009 ecr 67847689], length 0
22:13:35.742709 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 518:598, ack 4699, win 501, options [nop,nop,TS val 1371206011 ecr 67847689], length 80
22:13:35.743996 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 598:644, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 46
22:13:35.744011 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 644:693, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 49
22:13:35.744082 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 693:728, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 35
22:13:35.744165 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 728:1069, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 341

하이브리드 네트워킹 및 Private Service Connect (googleapis)를 사용하여 인터넷을 통해 그리고 비공개로 공개 엔드포인트를 통해 온라인 예측에 연결하는 것을 성공적으로 검증했습니다. OS를 종료하고 Cloud Shell 프롬프트로 돌아갑니다.

20. 삭제

Cloud Shell에서 튜토리얼 구성요소를 삭제합니다.

gcloud compute forwarding-rules delete pscvertex --global --quiet

gcloud compute instances delete workbench-tutorial --zone=us-central1-a --quiet 

gcloud compute addresses delete psc-ip --global --quiet

gcloud compute networks subnets delete workbench-subnet --region=us-central1 --quiet 

gcloud compute vpn-tunnels delete aiml-vpc-tunnel0 aiml-vpc-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=us-central1 --quiet

gcloud compute vpn-gateways delete aiml-vpn-gw on-prem-vpn-gw --region=us-central1 --quiet 

gcloud compute routers delete aiml-cr-us-central1 cloud-router-us-central1-aiml-nat --region=us-central1 --quiet 

gcloud compute routers delete cloud-router-us-central1-on-prem-nat on-prem-cr-us-central1 --region=us-central1 --quiet

gcloud compute instances delete nat-client private-client --zone=us-central1-a --quiet

gcloud compute firewall-rules delete ssh-iap-on-prem-vpc --quiet

gcloud compute networks subnets delete nat-subnet  private-ip-subnet --region=us-central1 --quiet

gcloud compute networks delete on-prem-vpc --quiet

gcloud compute networks delete aiml-vpc --quiet

Vertex 구성요소 삭제

컨테이너 이미지를 삭제하려면 Artifact Registry로 이동하여 내가 만든 저장소를 선택한 후 삭제를 선택합니다.

616a3108bc2e48c8.png

스토리지 버킷을 삭제하려면 Cloud 콘솔의 탐색 메뉴를 사용하여 Storage로 이동하고 버킷을 선택한 후 삭제를 클릭합니다.

eddd1f9fdfaede8.png

엔드포인트에서 모델 배포를 취소합니다. Vertex AI로 이동 → 온라인 예측 → diamonds-cpr_endpoint 선택 → 엔드포인트에서 모델 배포 취소 → 배포 취소

bc95f092d21d4698.png

모델을 삭제합니다. Vertex AI → 모델 레지스트리 → 모델 삭제로 이동합니다.

ec4afff091e11606.png

온라인 예측 엔드포인트를 삭제합니다. Vertex AI로 이동 → 온라인 예측 → diamonds-cpr_endpoint 선택 → 엔드포인트 삭제

7453760299bdfb9a.png

21. 축하합니다

수고하셨습니다. Private Service Connect 및 하이브리드 네트워킹으로 기본적으로 인터넷을 사용하고 비공개로 온라인 예측에 연결하는 과정을 구성하고 검증했습니다.

nat-client와 private-client를 만들고 TCPDUMP를 사용하여 Vertex API에 연결하는 데 사용되는 IP 주소의 유효성을 검사했습니다. 또한 Private Service Connect (googleapis)에 대해 알아보고 이를 사용하여 고객 PSC 엔드포인트를 활용하여 온프레미스 및 멀티 클라우드 애플리케이션을 격리하는 방법을 알아보았습니다.

Cosmopup은 튜토리얼이 멋지다고 생각합니다.

e6d3675ca7c6911f.jpeg

다음 단계

다음 튜토리얼을 확인하세요.

추가 자료 및 동영상

참조 문서