Google API용 Private Service Connect

1. 소개

Private Service Connect를 사용하면 VPC 네트워크 내의 전역 내부 IP 주소를 사용하여 비공개 엔드포인트를 만들어 Google API에 액세스할 수 있습니다. 이러한 내부 IP 주소에 storage-pscendpoint.p.googleapis.com 및 Bigtable-adsteam.p.googleapis.com과 같은 의미 있는 이름을 사용하여 DNS 이름을 할당할 수 있습니다. storage.googleapis.com과 같은 공개 서비스 엔드포인트로 API 요청을 전송하는 대신 VPC 네트워크 내부의 비공개인 Private Service Connect 엔드포인트로 요청을 전송할 수 있습니다.

이러한 이름과 IP 주소는 VPC 네트워크 및 Cloud VPN 터널 또는 Cloud Interconnect 연결 (VLAN)을 사용하여 연결된 모든 온프레미스 네트워크 내부에 있습니다.

어떤 트래픽이 어느 엔드포인트로 이동하는지 제어하고 트래픽이 Google Cloud 내에 머무르는 것을 보여줄 수 있습니다.

학습할 내용

  • Private Service Connect 사용 사례
  • 네트워크 요구사항
  • 지원되는 API
  • Private Service Connect 엔드포인트 만들기
  • Cloud Storage 버킷 만들기
  • Cloud DNS 비공개 영역 만들기 및 업데이트
  • 공개 googleapis에 액세스할 NAT GW 만들기
  • BOTO 구성 파일 생성 및 업데이트
  • PSC 서비스 엔드포인트에 대해 확인된 VM1에서 gsutil 목록 수행
  • VM2에서 공개 googleapis.com에 대해 확인된 gsutil 목록 수행
  • Tcpdump를 사용하여 DNS 변환 확인

필요한 항목

  • DNS, nano 또는 vi 편집기에 대한 지식

2. Private Service Connect 사용 사례

동일한 VPC 네트워크에 여러 Private Service Connect 엔드포인트를 만들 수 있습니다. 특정 엔드포인트의 대역폭에는 제한이 없습니다. Private Service Connect 엔드포인트는 전역 내부 IP 주소를 사용하므로 VPC 네트워크의 모든 리소스에서 사용할 수 있습니다.

엔드포인트가 여러 개인 경우 Cloud Router 및 방화벽 규칙을 사용하여 서로 다른 네트워크 경로를 지정할 수 있습니다.

  • 방화벽 규칙을 만들어 일부 VM이 Private Service Connect 엔드포인트를 통해 Google API에 액세스하지 못하게 하고 다른 VM이 액세스하도록 허용할 수 있습니다.
  • VM 인스턴스에 인터넷으로 전송되는 모든 트래픽을 허용하지 않는 방화벽 규칙을 설정할 수 있습니다. Private Service Connect 엔드포인트로 전송된 트래픽은 계속 Google에 도달합니다.
  • Cloud VPN 터널 또는 Cloud Interconnect 연결 (VLAN)을 사용하여 VPC에 연결된 온프레미스 호스트가 있는 경우 일부 요청은 터널 또는 VLAN을 통해 보내고 다른 요청은 공개 인터넷을 통해 전송할 수 있습니다. 이 구성을 사용하면 비공개 Google 액세스에서 지원하지 않는 서비스(예: Google 도서)의 터널 또는 VLAN을 우회할 수 있습니다. 이 구성을 만들려면 Private Service Connect 엔드포인트를 만들고, Cloud Router 커스텀 경로 공지를 사용하여 Private Service Connect 엔드포인트 IP 주소를 공지하고, Cloud DNS 인바운드 전달 정책을 사용 설정합니다. 애플리케이션은 Private Service Connect 엔드포인트의 이름을 사용하여 Cloud VPN 터널 또는 Cloud Interconnect 연결 (VLAN)을 통해 일부 요청을 전송하고 기본 DNS 이름을 사용하여 인터넷을 통해 다른 요청을 전송할 수 있습니다.
  • 여러 Cloud Interconnect 연결 (VLAN)을 사용하여 온프레미스 네트워크를 VPC 네트워크에 연결하면 그림 2와 같이 온프레미스에서 하나의 VLAN을 통해 일부 트래픽을 전송하고 나머지는 다른 VLAN을 통해 전송할 수 있습니다. 이를 통해 Google 네트워킹 대신 자체 광역 네트워킹을 사용하고 데이터 이동을 제어하여 지리적 요구사항을 충족할 수 있습니다. 이 구성을 만들려면 Private Service Connect 엔드포인트를 2개 만드세요. 첫 번째 VLAN을 관리하는 Cloud Router의 BGP 세션에서 첫 번째 엔드포인트에 대한 커스텀 경로 공지를 만들고, 두 번째 VLAN을 관리하는 Cloud Router의 BGP 세션에서 두 번째 엔드포인트에 대한 다른 커스텀 경로 공지를 만듭니다. Private Service Connect 엔드포인트 이름을 사용하도록 구성된 온프레미스 호스트는 해당 Cloud Interconnect 연결 (VLAN)을 통해 트래픽을 전송합니다.
  • 활성/활성 토폴로지에서 여러 개의 Cloud Interconnect 연결 (VLAN)을 사용할 수도 있습니다. VLAN을 관리하는 Cloud Router의 BGP 세션에 대한 커스텀 경로 공지를 사용하여 동일한 Private Service Connect 엔드포인트 IP 주소를 공지하는 경우 온프레미스 시스템에서 엔드포인트로 전송된 패킷은 ECMP를 사용하여 VLAN을 통해 라우팅됩니다.

5e142c2fbf6f010e.png

그림 1. Private Service Connect, Cloud Router, 온프레미스 호스트를 구성하면 Google API로 트래픽을 전송하는 데 사용할 Cloud Interconnect 연결 (VLAN)을 관리할 수 있습니다.

3. 네트워크 요구사항

Private Service Connect를 사용하려면 외부 IP 주소가 없는 가상 머신 (VM) 인스턴스의 서브넷에 비공개 Google 액세스가 사용 설정된 기본 인터페이스가 있어야 합니다.

외부 IP 주소가 있는 VM은 서브넷에 비공개 Google 액세스가 사용 설정되어 있는지 여부와 관계없이 Private Service Connect 엔드포인트를 사용하여 Google API 및 서비스에 액세스할 수 있습니다. Private Service Connect 엔드포인트에 대한 연결은 Google 네트워크 내에서 유지됩니다.

피어링된 VPC 네트워크에서 Private Service Connect 엔드포인트에 액세스할 수 없습니다.

지원되는 API

Private Service Connect 엔드포인트를 만들 때 all-apis 또는 vpc-sc에 액세스해야 하는 API 번들을 선택합니다.

API 번들은 비공개 Google 액세스 VIP를 통해 제공되는 것과 동일한 API에 대한 액세스 권한을 제공합니다.

  • all-apis 번들은 private.googleapis.com과 동일한 API에 대한 액세스를 제공합니다.
  • vpc-sc 번들은 restricted.googleapis.com과 동일한 API에 대한 액세스를 제공합니다.

4. Codelab 토폴로지 및 활용 사례

2ac275eb86f26338.png

그림 1 - Codelab 토폴로지

Codelab 사용 사례 -

Google Cloud 고객은 클라우드 스토리지 데이터 전송을 위해 비공개 (상호 연결) 및 공개 googleapis 액세스를 혼합해야 합니다. 고객 요구사항을 충족하기 위해 고유한 /32 주소, BOTO 구성, DNS 레코드 업데이트로 구성된 Private Service Connect를 배포할 예정입니다. 가상 머신 1은 클라우드 스토리지 버킷 액세스에 PSC를 활용합니다. 반면에 VM2는 NAT GW를 통해 공개 googleapis.com IP 범위를 사용합니다.

실습의 모든 측면은 Google Cloud Platform 내에서 배포되지만 트래픽 분리가 필요한 하이브리드 클라우드 배포에 동일한 사용 사례가 적용됩니다.

5. 설정 및 요구사항

자습형 환경 설정

  1. Cloud 콘솔에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID라고 부릅니다.

  1. 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.

이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 신규 사용자에게는 미화$300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.

bce75f34b2c53987.png

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

f6ef2b5f13479f3a.png

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉토리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 실습의 모든 작업은 브라우저만으로 수행할 수 있습니다.

6. 시작하기 전에

API 사용 설정

Cloud Shell 내에서 프로젝트 ID가 설정되어 있는지 확인합니다.

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

필요한 모든 서비스 사용 설정

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com

7. VPC 네트워크 만들기

VPC 네트워크

Cloud Shell 사용

gcloud compute networks create psc-lab --subnet-mode custom

서브넷 만들기

Cloud Shell 사용

gcloud compute networks subnets create psclab-subnet \
--network psc-lab --range 10.0.0.0/24 --region us-central1 --enable-private-ip-google-access

방화벽 규칙 만들기

IAP에서 VM 인스턴스에 연결할 수 있도록 허용하려면 다음과 같은 방화벽 규칙을 만듭니다.

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

Cloud Shell 사용

gcloud compute firewall-rules create psclab-ssh \
    --network psc-lab --allow tcp:22 --source-ranges=35.235.240.0/20

Cloud NAT 인스턴스 만들기

Cloud Router 만들기

Cloud Shell 사용

gcloud compute routers create crnat \
    --network psc-lab \
    --asn 65000 \
    --region us-central1

Cloud NAT 만들기

Cloud Shell 사용

gcloud compute routers nats create cloudnat \
    --router=crnat \
    --auto-allocate-nat-external-ips \
    --nat-all-subnet-ip-ranges \
    --enable-logging \
    --region us-central1

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

Private Service Connect 엔드포인트 IP <pscendpointip>를 구성할 때 VPC에 정의되지 않은 고유한 IP 주소를 제공해야 합니다.

Cloud Shell 사용

gcloud compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=192.168.255.250 \
    --network=psc-lab

'pscendpointip' 저장 실습 기간 동안

pscendpointip=$(gcloud compute addresses list --filter=name:psc-ip --format="value(address)")

echo $pscendpointip

엔드포인트를 Google API 및 서비스에 연결하는 전달 규칙을 만듭니다.

Cloud Shell 사용

gcloud compute forwarding-rules create pscendpoint \
    --global \
    --network=psc-lab \
    --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 \
    pscendpoint --global

9. 버킷 만들기

Cloud Storage 버킷을 만들고 BUCKET_NAME을 원하는 전역적으로 고유한 이름으로 바꿉니다.

Cloud Shell 사용

gsutil mb  -l us-central1 -b on gs://BUCKET_NAME

'BUCKET_NAME' 저장 실습 기간 동안

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

10. DNS 구성

Private Service Connect 엔드포인트를 만들면 서비스 디렉터리가 해당 엔드포인트를 사용하여 사용할 수 있는 API 및 서비스의 DNS 레코드를 생성합니다.

DNS 레코드는 Private Service Connect 엔드포인트 IP 주소를 가리키며 SERVICE-ENDPOINT.p.googleapis.com 형식입니다.

API 요청에 이러한 DNS 이름을 사용하여 요청을 Private Service Connect 엔드포인트로 전달할 수 있습니다. 요청의 호스트 헤더에서도 이러한 DNS 이름을 사용할 수 있습니다.

Google API 및 서비스에 액세스하는 클라이언트 또는 애플리케이션에서 Private Service Connect 엔드포인트를 사용하려면 p.googleapis.com DNS 이름을 사용하도록 클라이언트 또는 애플리케이션을 업데이트하세요.

자세한 내용은 클라이언트 또는 클라이언트 라이브러리의 문서를 참조하세요. 예를 들면 다음과 같습니다.

  • Python: google-api-core 패키지의 클라이언트 옵션 클래스에서 api_endpoint를 구성할 수 있습니다.
  • Go: API 패키지의 클라이언트 옵션 패키지에서 WithEndpoint를 구성할 수 있습니다.
  • gcloud: 이 명령어를 사용하여 api_endpoint_overrides를 구성할 수 있습니다. gcloud config set api_endpoint_overrides/SERVICE ENDPOINT_URL

예: gcloud config set api_endpoint_overrides/storage https://storage-xyz.p.googleapis.com/storage/v1/

다른 엔드포인트를 사용하도록 클라이언트 또는 애플리케이션을 구성할 수 없는 경우 기본 DNS 이름과 일치하도록 DNS 레코드를 만드세요. 예: storage.googleapis.com 기본 DNS 이름을 사용하여 DNS 레코드 만들기를 참조하세요.

DNS 레코드 확인

Cloud 콘솔에서 네트워크 서비스 → Cloud DNS에 있는 생성된 DNS 항목의 유효성을 검사합니다. 생성된 DNS 이름 'p.googleapis.com'을 기록해 둡니다.

11. 가상 머신 만들기

Private Service Connect를 검증하는 데 사용되는 가상 머신 (psc-instance-1)을 만듭니다.

Cloud Shell 사용

  gcloud compute instances create psc-instance-1 \
    --subnet psclab-subnet \
    --zone us-central1-a \
    --image=centos-7-v20210122 \
    --image-project=centos-cloud \
    --no-address \
    --metadata=startup-script=yum\ install\ tcpdump\ -y$'\n'yum\ install\ bind-utils\ -y$'\n'yum\ install\ nano\ -y 

VM 인스턴스 (psc-instance-1)에 로그인합니다.

Cloud Shell을 통해 SSH를 통해 VM에 연결

gcloud compute ssh --zone "us-central1-a" "psc-instance-1" --project "$projectname"

+ (아래 스크린샷)를 세 번 클릭하여 Cloud Shell 터미널을 추가로 만듭니다.

69ea94e1527912bb.png

공개 Googleapis를 검증하는 데 사용되는 가상 머신 (psc-instance-2)을 만듭니다.

탭 2에서

  gcloud compute instances create psc-instance-2 \
    --subnet psclab-subnet \
    --zone us-central1-a \
    --image=centos-7-v20210122 \
    --image-project=centos-cloud \
    --no-address \
    --metadata=startup-script=yum\ install\ tcpdump\ -y$'\n'yum\ install\ bind-utils\ -y$'\n'yum\ install\ nano\ -y 

탭 2에서 Cloud Shell을 통해 SSH를 통해 VM에 연결

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


gcloud compute ssh --zone "us-central1-a" "psc-instance-2" --project "$projectname"

탭 3에서 Cloud Shell을 통해 SSH를 통해 psc-instance-1에 연결합니다.

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


gcloud compute ssh --zone "us-central1-a" "psc-instance-1" --project "$projectname"

탭 4에서 Cloud Shell을 통해 SSH를 통해 psc-instance-2로 연결합니다.

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


gcloud compute ssh --zone "us-central1-a" "psc-instance-2" --project "$projectname"

12. 기존 Gsutil 동작 확인

탭 4 (psc-instance-2)에서 tcpdump를 시작하고 DNS 트래픽 모니터링

sudo tcpdump -vv -i eth0 port 53

탭 2의 스토리지 버킷 DNS 조회 검사 (psc-instance-2)

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME
gsutil -D ls gs://$BUCKET_NAME

gsutil 디버그를 검사합니다. HOST storage.googleapis.com이 DNS 확인에 사용됩니다.

<snip>
send: 'GET /storage/v1/b/$BUCKET_NAME/o?delimiter=%2F&projection=noAcl&versions=False&fields=prefixes%2CnextPageToken%2Citems%2Fname&alt=json&maxResults=1000 HTTP/1.1\r\nHost: storage.googleapis.com\r\ncontent-length: 0\r\nauthorization: Bearer ya29.c.KpkB7wfaMjfc_WXEKCeNF4Md0fEHnfDU7tqBf3cd0u43yEmYXqj8fX_X5wWdNdDVH6k1EkjeAeIJDzKGvyjPOkf1Io2kVeUqYX69sDv53huW1NslffjAHKchbZ0CP3Cg83TS3Pa55jLcuE0TLbYycVrgSbD3H90LaapUGbWD3kj4IsJLf9J8R98Bqobu8HZwwqk92hlZ4zVzRqOM\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: apitools Python/2.7.5 gsutil/4.57 (linux2) analytics/disabled interactive/True command/ls google-cloud-sdk/324.0.0\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
<snip>

탭 4(psc-instance-2)에서 스토리지 버킷에 액세스할 때 GoogleAPI.com 공개 DNS A 레코드가 사용되는지 확인합니다.

metadata.google.internal.domain > psc-instance-2.c.yourprojectname.internal.33973: [udp sum ok] 36442 q: A? storage.googleapis.com. 11/0/0 storage.googleapis.com. A 108.177.111.128, storage.googleapis.com. A 142.250.128.128, storage.googleapis.com. A 74.125.70.128, storage.googleapis.com. A 74.125.201.128, storage.googleapis.com. A 64.233.183.128, storage.googleapis.com. A 173.194.198.128, storage.googleapis.com. A 172.217.219.128, storage.googleapis.com. A 142.250.136.128, storage.googleapis.com. A 209.85.234.128, storage.googleapis.com. A 172.217.212.128, storage.googleapis.com. A 172.217.214.128

13. Gsutil 동작 수정

이전 단계에서 PSC 엔드포인트 IP 주소에 매핑된 비공개 DNS 영역과 A 레코드를 만들었습니다. 다음 단계에서는 이제 psc-instance-1에서 VM BOTO 파일을 업데이트하여 gsutil의 동작을 제어합니다.

탭 1 (psc-instance-1)의 VM 인스턴스 터미널에서 기본 BOTO 구성 보기

[psc-instance ~]$ more  /etc/boto.cfg

출력 (project_id는 다름)

[GSUtil]
default_project_id  = [your project number]
default_api_version = 2

[GoogleCompute]
service_account = default

nano 또는 VI 편집기를 사용하여 BOTO 구성을 업데이트합니다. 모든 항목을 복사하고 붙여넣어야 합니다.

예: sudo nano /etc/boto.cfg

또는

예: sudo vi /etc/boto.cfg

VM 인스턴스 터미널 탭 1(psc-instance-1)에서

[Credentials]
gs_host = storage-pscendpoint.p.googleapis.com
gs_host_header = storage.googleapis.com
gs_json_host = storage-pscendpoint.p.googleapis.com
gs_json_host_header = www.googleapis.com

구성을 확인합니다. DNS 조회에는 [사용자 인증 정보] 순서가 중요합니다.

more /etc/boto.cfg
[Credentials]
gs_host = storage-pscendpoint.p.googleapis.com
gs_host_header = storage.googleapis.com
gs_json_host = storage-pscendpoint.p.googleapis.com
gs_json_host_header = www.googleapis.com

[GSUtil]
default_project_id  = [your project number
default_api_version = 2

[GoogleCompute]
service_account = default

14. 업데이트된 gsutil 조회 동작 확인

탭 3 (psc-instance-1)에서 tcpdump를 시작하고 DNS 트래픽 모니터링

sudo tcpdump -vv -i eth0 port 53

탭 1에서 스토리지 버킷 gsutil 조회 검사 (psc-instance-1)

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

gsutil -D ls gs://$BUCKET_NAME

Private Service Connect 엔드포인트 'pscendpoint'를 통해 스토리지 버킷에 연결할 수 있는지 디버그 로그에서 확인합니다.

출력:

<snip>
INFO 0131 22:14:18.795986 base_api.py] Making http GET to https://storage-pscendpoint.p.googleapis.com/storage/v1/b/$BUCKET_NAME/o?delimiter=%2F&projection=noAcl&versions=False&fields=prefixes%2CnextPageToken%2Citems%2Fname&alt=json&maxResults=1000
INFO 0131 22:14:18.796415 base_api.py] Headers: {u'Host': 'www.googleapis.com',
 'accept': 'application/json',
 'accept-encoding': 'gzip, deflate',
 'content-length': '0',
 'user-agent': 'apitools Python/2.7.5 gsutil/4.57 (linux2) analytics/disabled interactive/True command/ls google-cloud-sdk/324.0.0'}
INFO 0131 22:14:18.796502 base_api.py] Body: (none)
connect: (storage-pscendpoint.p.googleapis.com, 443)
send: 'GET /storage/v1/b/psc-bucket/o?delimiter=%2F&projection=noAcl&versions=False&fields=prefixes%2CnextPageToken%2Citems%2Fname&alt=json&maxResults=1000 HTTP/1.1\r\ncontent-length: 0\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: apitools Python/2.7.5 gsutil/4.57 (linux2) analytics/disabled interactive/True command/ls google-cloud-sdk/324.0.0\r\nhost: www.googleapis.com\r\nauthorization: Bearer ya29.c.KpkB7wd3XWiYeRyTuth5_HPlNV-hPwc2Nn7RSIeMpzrpa_j4EsMPl2m_mDGKAcGHvYIgiC5bT2UVQirAPpSbbpToa6G6lkaBbH5SZwHwgNXYfisp5Ww1UjXe4rTa69a_Wp0WesafcwPNnYzDo3xf5VGh3iGhySA04kTXuyT--MgOU8U-XLII2LJQxUWlV8KEdrvyCuqRb-jsDdk_\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
<snip>

탭 3 (psc-instance-1)에서 스토리지 버킷에 액세스를 시도할 때 PSC 엔드포인트 IP가 DNS A 레코드인지 확인합니다.

@psc-instance-1 ~]$ sudo tcpdump -vv -i eth0 port 53
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
05:02:33.936256 IP (tos 0x0, ttl 64, id 55416, offset 0, flags [DF], proto UDP (17), length 82)
    psc-instance-1.c.yourprojectname.internal.42296 > metadata.google.internal.domain: [bad udp cksum 0x5e4e -> 0xcceb!] 34796+ A? storage-pscendpoint.p.googleapis.com. (54)
05:02:33.936269 IP (tos 0x0, ttl 64, id 55417, offset 0, flags [DF], proto UDP (17), length 82)
    psc-instance-1.c.yourprojectname.internal.42296 > metadata.google.internal.domain: [bad udp cksum 0x5e4e -> 0x3ebd!] 5632+ AAAA? storage-pscendpoint.p.googleapis.com. (54)
05:02:33.944018 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 98)
    metadata.google.internal.domain > psc-instance-1.c.yourprojectname.42296: [udp sum ok] 34796 q: A? storage-pscendpoint.p.googleapis.com. 1/0/0 storage-pscendpoint.p.googleapis.com. A 10.10.110.10 (70)
05:02:33.946005 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 175)

이제 Private Service Connect 엔드포인트 IP가 DNS 변환에 사용되는지 확인

tab1에서

nslookup storage-pscendpoint.p.googleapis.com

출력

@psc-instance ~]$ nslookup storage-pscendpoint.p.googleapis.com
Server:         169.254.169.254
Address:        169.254.169.254#53

Non-authoritative answer:
Name:   storage-pscendpoint.p.googleapis.com
Address: <pscip>

15. 삭제 단계

VM 인스턴스에서 종료 (모든 탭)

exit

단일 Cloud Shell 터미널에서 실습 구성요소 삭제

gcloud compute routers nats delete cloudnat --router=crnat --region=us-central1 --quiet

gcloud compute routers delete crnat --region=us-central1 --quiet

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

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

gsutil rm -r gs://$BUCKET_NAME

gcloud compute instances delete psc-instance-1 --zone=us-central1-a --quiet

gcloud compute instances delete psc-instance-2 --zone=us-central1-a --quiet

gcloud compute firewall-rules delete psclab-ssh --quiet

gcloud compute networks subnets delete psclab-subnet --region us-central1 --quiet

gcloud compute networks delete psc-lab --quiet

콘솔에서 올바른 프로젝트가 표시되는지 확인한 다음 네트워킹 서비스 → Cloud DNS를 선택합니다.

16. 축하합니다.

축하합니다. Codelab을 완료했습니다.

학습한 내용

  • Private Service Connect 사용 사례
  • 네트워크 요구사항
  • 지원되는 API
  • Private Service Connect 엔드포인트를 만들었습니다.
  • Cloud Storage 버킷 생성됨
  • BOTO 구성 파일이 업데이트되었습니다.
  • NAT GW 생성
  • PSC 서비스 엔드포인트에 대해 확인되는 VM1에서 gsutil 목록 수행
  • VM2에서 공개 googleapis.com을 확인하는 gsutil 목록 수행
  • Tcpdump를 사용하여 DNS 변환 확인