Private Service Connect สำหรับ Google APIs

1. บทนำ

Private Service Connect ช่วยให้คุณสร้างปลายทางส่วนตัวได้โดยใช้ที่อยู่ IP ภายในแบบสากลภายในเครือข่าย VPC คุณสามารถกำหนดชื่อ DNS ให้กับที่อยู่ IP ภายในเหล่านี้ด้วยชื่อที่มีความหมาย เช่น storage-pscendpoint.p.googleapis.com และ bigtable-adsteam.p.googleapis.com แทนที่จะส่งคำขอ API ไปยังปลายทางของบริการสาธารณะ เช่น storage.googleapis.com คุณสามารถส่งคำขอไปยังปลายทาง Private Service Connect ซึ่งเป็นแบบส่วนตัวและอยู่ภายในเครือข่าย VPC

ชื่อและที่อยู่ IP เหล่านี้อยู่ภายในเครือข่าย VPC และเครือข่ายภายในองค์กรที่เชื่อมต่อกับเครือข่ายดังกล่าวโดยใช้อุโมงค์ Cloud VPN หรือไฟล์แนบ Cloud Interconnect (VLAN)

คุณควบคุมได้ว่าการรับส่งข้อมูลใดจะไปยังปลายทางใด และแสดงให้เห็นว่าการรับส่งข้อมูลยังคงอยู่ภายใน Google Cloud

สิ่งที่คุณจะได้เรียนรู้

  • กรณีการใช้งาน Private Service Connect
  • ข้อกำหนดเกี่ยวกับเครือข่าย
  • API ที่รองรับ
  • สร้างปลายทาง Private Service Connect
  • สร้างที่เก็บข้อมูลในระบบคลาวด์
  • สร้างและอัปเดตโซนส่วนตัวของ Cloud DNS
  • สร้าง NAT GW เพื่อเข้าถึง googleapis สาธารณะ
  • สร้างและอัปเดตไฟล์การกำหนดค่า BOTO
  • เรียกใช้ gsutil list ใน VM1 ที่แก้ไขเทียบกับปลายทางบริการ PSC
  • เรียกใช้ gsutil list ใน VM2 ที่แก้ไขกับ googleapis.com สาธารณะ
  • ใช้ Tcpdump เพื่อตรวจสอบการแปลง DNS

สิ่งที่คุณต้องมี

  • ความรู้เกี่ยวกับ DNS, nano หรือ vi editor

2. กรณีการใช้งาน Private Service Connect

คุณสร้างปลายทาง Private Service Connect ได้หลายรายการในเครือข่าย VPC เดียวกัน ไม่มีการจำกัดแบนด์วิดท์ไปยังปลายทางใดปลายทางหนึ่ง เนื่องจากปลายทาง Private Service Connect ใช้ที่อยู่ IP ภายในแบบสากล จึงใช้ได้กับทรัพยากรใดก็ได้ในเครือข่าย VPC

เมื่อมีปลายทางหลายรายการ คุณจะระบุเส้นทางเครือข่ายที่แตกต่างกันได้โดยใช้ Cloud Router และกฎไฟร์วอลล์

  • คุณสามารถสร้างกฎไฟร์วอลล์เพื่อป้องกันไม่ให้ VM บางรายการเข้าถึง Google APIs ผ่านปลายทาง Private Service Connect ในขณะที่อนุญาตให้ VM อื่นๆ เข้าถึงได้
  • คุณสามารถมีกฎไฟร์วอลล์ในอินสแตนซ์ VM ที่ไม่อนุญาตการรับส่งข้อมูลทั้งหมดไปยังอินเทอร์เน็ตได้ แต่การรับส่งข้อมูลที่ส่งไปยังปลายทาง Private Service Connect จะยังคงไปถึง Google
  • หากคุณมีโฮสต์ในองค์กรที่เชื่อมต่อกับ VPC โดยใช้ช่องทาง Cloud VPN หรือการเชื่อมต่อ Cloud Interconnect (VLAN) คุณจะส่งคำขอบางรายการผ่านช่องทางหรือ VLAN ขณะที่ส่งคำขออื่นๆ ผ่านอินเทอร์เน็ตสาธารณะได้ การกำหนดค่านี้ช่วยให้คุณข้ามอุโมงค์หรือ VLAN สำหรับบริการต่างๆ เช่น Google Books ที่ Private Google Access ไม่รองรับได้ หากต้องการสร้างการกำหนดค่านี้ ให้สร้างปลายทาง Private Service Connect, ประกาศที่อยู่ IP ของปลายทาง Private Service Connect โดยใช้การประกาศเส้นทางที่กำหนดเองของ Cloud Router และเปิดใช้นโยบายการส่งต่อขาเข้าของ Cloud DNS แอปพลิเคชันสามารถส่งคำขอผ่านอุโมงค์ Cloud VPN หรือการเชื่อมต่อ Cloud Interconnect (VLAN) ได้โดยใช้ชื่อของปลายทาง Private Service Connect และส่งคำขออื่นๆ ผ่านอินเทอร์เน็ตได้โดยใช้ชื่อ DNS เริ่มต้น
  • หากเชื่อมต่อเครือข่ายภายในองค์กรกับเครือข่าย VPC โดยใช้ไฟล์แนบ Cloud Interconnect หลายรายการ (VLAN) คุณจะส่งการรับส่งข้อมูลบางส่วนจากภายในองค์กรผ่าน VLAN หนึ่ง และที่เหลือผ่าน VLAN อื่นๆ ได้ ดังที่แสดงในรูปที่ 2 ซึ่งช่วยให้คุณใช้เครือข่ายบริเวณกว้างของคุณเองแทนของ Google และควบคุมการเคลื่อนย้ายข้อมูลเพื่อให้เป็นไปตามข้อกำหนดทางภูมิศาสตร์ได้ หากต้องการสร้างการกำหนดค่านี้ ให้สร้างปลายทาง Private Service Connect 2 รายการ สร้างการประกาศเส้นทางที่กำหนดเองสำหรับปลายทางแรกในเซสชัน BGP ของ Cloud Router ที่จัดการ VLAN แรก และสร้างการประกาศเส้นทางที่กำหนดเองที่แตกต่างกันสำหรับปลายทางที่สองในเซสชัน BGP ของ Cloud Router ที่จัดการ VLAN ที่สอง โฮสต์ในองค์กรที่กำหนดค่าให้ใช้ชื่อปลายทาง Private Service Connect จะส่งการรับส่งข้อมูลผ่านไฟล์แนบ Cloud Interconnect (VLAN) ที่เกี่ยวข้อง
  • นอกจากนี้ คุณยังใช้ไฟล์แนบ Cloud Interconnect (VLAN) หลายรายการในโทโพโลยีที่ใช้งานอยู่/ใช้งานอยู่ได้ด้วย หากคุณโฆษณาที่อยู่ IP ของอุปกรณ์ปลายทาง Private Service Connect เดียวกันโดยใช้การโฆษณาเส้นทางที่กำหนดเองสำหรับเซสชัน BGP ใน Cloud Router ที่จัดการ VLAN ระบบจะกำหนดเส้นทางแพ็กเก็ตที่ส่งจากระบบในองค์กรไปยังอุปกรณ์ปลายทางผ่าน VLAN โดยใช้ ECMP

5e142c2fbf6f010e.png

รูปที่ 1 การกำหนดค่า Private Service Connect, Cloud Router และโฮสต์ในองค์กรจะช่วยให้คุณควบคุมได้ว่าจะใช้ไฟล์แนบ Cloud Interconnect (VLAN) ใดในการส่งการรับส่งข้อมูลไปยัง Google API

3. ข้อกำหนดเกี่ยวกับเครือข่าย

หากต้องการใช้ Private Service Connect อินสแตนซ์เครื่องเสมือน (VM) ที่ไม่มีที่อยู่ IP ภายนอกต้องมีอินเทอร์เฟซหลักในเครือข่ายย่อยที่เปิดใช้การเข้าถึง Google แบบส่วนตัว

VM ที่มีที่อยู่ IP ภายนอกจะเข้าถึง Google APIs และบริการต่างๆ ได้โดยใช้ปลายทาง Private Service Connect ไม่ว่าจะเปิดใช้การเข้าถึง Google แบบส่วนตัวสำหรับเครือข่ายย่อยหรือไม่ก็ตาม การเชื่อมต่อกับปลายทาง Private Service Connect จะยังคงอยู่ภายในเครือข่ายของ Google

คุณเข้าถึงปลายทาง Private Service Connect จากเครือข่าย VPC ที่เพียร์ไม่ได้

API ที่รองรับ

เมื่อสร้างปลายทาง Private Service Connect คุณจะเลือกชุด API ที่ต้องการเข้าถึงได้ ไม่ว่าจะเป็น all-apis หรือ vpc-sc

แพ็กเกจ API จะให้สิทธิ์เข้าถึง API เดียวกันกับที่พร้อมใช้งานผ่าน VIP ของการเข้าถึง Google แบบส่วนตัว

  • แพ็กเกจ all-apis จะให้สิทธิ์เข้าถึง API เดียวกันกับ private.googleapis.com
  • ชุด vpc-sc จะให้สิทธิ์เข้าถึง API เดียวกันกับ restricted.googleapis.com

4. โทโพโลยีและกรณีการใช้งานของ Codelab

2ac275eb86f26338.png

รูปที่ 1 - โทโพโลยี Codelab

กรณีการใช้งาน Codelab -

ลูกค้าของเราต้องการใช้ทั้งการเข้าถึง Googleapis แบบส่วนตัว (การเชื่อมต่อ) และแบบสาธารณะสำหรับการโอนข้อมูลที่เก็บข้อมูลบนระบบคลาวด์ เราจะติดตั้งใช้งาน Private Service Connect ซึ่งประกอบด้วยที่อยู่ /32 ที่ไม่ซ้ำกัน การกำหนดค่า BOTO และการอัปเดตระเบียน DNS เพื่อให้เป็นไปตามข้อกำหนดของลูกค้า เครื่องเสมือน 1 จะใช้ PSC สำหรับการเข้าถึงที่เก็บข้อมูลในระบบคลาวด์ ในขณะที่ VM2 จะใช้ช่วง IP ของ googleapis.com สาธารณะผ่าน NAT GW

ทุกแง่มุมของแล็บได้รับการติดตั้งใช้งานภายใน Google Cloud Platform แต่ Use Case เดียวกันนี้ใช้ได้กับการติดตั้งใช้งาน Hybrid Cloud ที่ต้องมีการแยกการรับส่งข้อมูล

5. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)

MrEseyJH4tg9PuS3GzJa72onCqawwQiRm04c0YjnpR6WD3IciP1ICDh5e5RoxrG3tc5y44_Ynn9GB0Igjo3sTE0BlsAnCxJdhXn7egP3tX4rkzkub7ZCjOKc70kJvl07REnmPb3TGg

HgKQ1sLCGDGbz0e3RCc-FNa3fQliCtq67H-Oj9jzzYn_upkmNN1lOMQrQm8Jdvo6EEYAvSwDEjpH37bIG9ouBJcmS_xFYV1IHJoyAhsasS1SfYtZkO-RBwWPXRrr3Zt4r31ETcjJeQ

KHAY2ncSMFGZ2vGxcMEcNoIy_cuWGCaWAsrH0KsOVwkV5e93Ypfcq3sQ_HPIrV-NSocegQN2PnRUku_CVi1MM89O6qHIU6E32ZypJPxojkbRTJXET5JvtskIXgzFMk18-4NnNjzCJA

โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID ในภายหลังใน Codelab นี้

  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud

การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย โปรดทำตามวิธีการในส่วน "การล้างข้อมูล" ซึ่งจะแนะนำวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

จาก GCP Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

yEqEFRN4OGfeGJEfJplSt5sGY95BluU78i3Lk0Opo9caOYfrWUPBi_RglIfo9x078tH5Z_Obgq1wOhrEPV8k5OvMgI5e3aam1a7teXuimwTy-evcupc34_UEMmfAFkV-hnXwl559rg

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อเสร็จแล้ว คุณควรเห็นข้อความคล้ายกับตัวอย่างต่อไปนี้

BxRCLVCDNXX4OxwHppzaY9ghvuFTsgsozreyEHvRK9GPfsh3sW-kdwev6_gZdkX5FWPvb7M_Vp4FoyjFWwZxBMK6CLXiPwJgFbhz8Tgec-tyQR7GEdNjGMBca052yM8ga0UqzdHAmw

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดในห้องทดลองนี้ได้โดยใช้เพียงเบราว์เซอร์

6. ก่อนเริ่มต้น

เปิดใช้ API

ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว

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

เอาต์พุต

Created
NAME     SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
psc-lab  CUSTOM       REGIONAL

สร้างซับเน็ต

จาก 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

เอาต์พุต

Created
NAME             REGION       NETWORK  RANGE
psclab-subnet  us-central1  psc-lab  10.0.0.0/24

สร้างกฎไฟร์วอลล์

จาก Cloud Shell

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

เอาต์พุต

NAME        NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
psclab-ssh  psc-lab  INGRESS    1000      tcp:22        False

สร้างอินสแตนซ์ 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

เมื่อกำหนดค่า IP ของปลายทาง Private Service Connect <pscendpointip> คุณจะต้องระบุที่อยู่ IP ที่ไม่ซ้ำกันซึ่งไม่ได้กำหนดไว้ใน VPC

จาก Cloud Shell

gcloud beta compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=<pscendpointip> \
    --network=psc-lab

จัดเก็บ "pscendpointip" เป็นระยะเวลาของแล็บ

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

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

สร้างกฎการส่งต่อเพื่อเชื่อมต่อปลายทางกับ Google API และบริการ

จาก Cloud Shell

gcloud beta 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. สร้างที่เก็บข้อมูล

สร้าง Bucket ของ 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

สมมติว่าคุณมีแอปพลิเคชันที่ใช้ Google Cloud Storage หากไม่มี Private Service Connect แอปพลิเคชันอาจเชื่อมต่อกับ "storage.googleapis.com" ซึ่งโดยค่าเริ่มต้นจะเปลี่ยนเส้นทางไปยังที่อยู่สาธารณะบางรายการ Private Service Connect ช่วยให้คุณสร้างและใช้ชื่ออย่าง "storage-psclab.p.googleapis.com" ได้ ชื่อและที่อยู่จะเป็นแบบส่วนตัวสำหรับเครือข่าย VPC และเครือข่ายในองค์กรที่แนบมา

Private Service Connect สำหรับ DNS จะเป็นไปตามรูปแบบการตั้งชื่อ SERVICE-ENDPOINT.p.googleapis.com ในตัวอย่างที่ระบุไว้ข้างต้น "storage" คือ SERVICE และ "psclab" คือ ENDPOINT คุณต้องใส่ "-" ระหว่าง SERVICE กับ ENDPOINT

หากต้องการเข้าถึง Cloud Storage โดยใช้ปลายทาง Private Service Connect ให้สร้างระเบียน DNS (A) storage-psclab.p.googleapis.com ที่ชี้ไปยังที่อยู่ IP ของปลายทาง Private Service Connect

สร้างโซนส่วนตัวของ DNS

gcloud dns --project=$projectname managed-zones create psc-dns-zone --description="" --dns-name="p.googleapis.com." --visibility="private" --networks="psc-lab"

สร้างระเบียน A ของ DNS

gcloud dns --project=$projectname record-sets transaction start --zone=psc-dns-zone

gcloud dns --project=$projectname record-sets transaction add $pscendpointip --name=storage-pscendpoint.p.googleapis.com. --ttl=300 --type=A --zone=psc-dns-zone

gcloud dns --project=$projectname record-sets transaction execute --zone=psc-dns-zone

11. สร้างเครื่องเสมือน

สร้างเครื่องเสมือน (psc-instance-1) ที่ใช้เพื่อตรวจสอบ Private Service Connect

จาก 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)

SSH เข้าสู่ VM ผ่าน Cloud Shell

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

สร้างเทอร์มินัล Cloud Shell เพิ่มเติมโดยคลิก + (ภาพหน้าจอด้านล่าง) 3 ครั้ง

69ea94e1527912bb.png

สร้างเครื่องเสมือน (psc-instance-2) ที่ใช้เพื่อตรวจสอบ Googleapis สาธารณะ

จากแท็บ 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 ให้ SSH เข้าสู่ VM ผ่าน Cloud Shell

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 ให้ SSH ไปยัง psc-instance-1 ผ่าน Cloud Shell

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 ให้ SSH ไปยัง psc-instance-2 ผ่าน Cloud Shell

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

ตรวจสอบการค้นหา DNS ของที่เก็บข้อมูลจากแท็บ 2 (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) ให้ตรวจสอบว่ามีการใช้ระเบียน A ของ DNS สาธารณะ GoogleAPI.com เมื่อเข้าถึงที่เก็บข้อมูล

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

โปรดจำไว้ว่าในขั้นตอนก่อนหน้า คุณได้สร้างโซน DNS ส่วนตัวและระเบียน A ที่แมปกับที่อยู่ IP ของปลายทาง PSC ในขั้นตอนถัดไป เราจะควบคุมลักษณะการทำงานของ gsutil โดยการอัปเดตไฟล์ BOTO ของ VM ใน psc-instance-1

ดูการกำหนดค่า BOTO เริ่มต้นจากเทอร์มินัลอินสแตนซ์ VM จากแท็บ 1 (psc-instance-1)

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

เอาต์พุต (project_id ของคุณจะแตกต่างกัน)

[GSUtil]
default_project_id  = 234086459238
default_api_version = 2

[GoogleCompute]
service_account = default

อัปเดตการกำหนดค่า BOTO โดยใช้ Nano หรือ VI Editor และตรวจสอบว่าได้คัดลอกและวางรายการทั้งหมดแล้ว

ตัวอย่าง: 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  = 234086459238
default_api_version = 2

[GoogleCompute]
service_account = default

14. ยืนยันลักษณะการทำงานของการค้นหา gsutil ที่อัปเดตแล้ว

จากแท็บ 3 (psc-instance-1) ให้เริ่ม tcpdump และตรวจสอบการรับส่งข้อมูล DNS

sudo tcpdump -vv -i eth0 port 53

ตรวจสอบการค้นหา gsutil ของที่เก็บข้อมูลจากแท็บ 1 (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) ให้ตรวจสอบว่า IP ของปลายทาง PSC คือระเบียน 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)

ตรวจสอบว่าตอนนี้ระบบใช้ IP ของปลายทาง Private Service Connect สำหรับการแก้ปัญหา DNS แล้ว

จากแท็บ 1

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

ลบคอมโพเนนต์ของ Lab จากเทอร์มินัล Cloud Shell เดียว

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

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

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

gcloud beta 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

d0ed4bd585006e45.png

ระบุและคลิก "psc-dns-zone"

903532e68a262111.png

เลือกชุดระเบียน "storage-pscendpoint.p.googleapis.com" แล้วคลิกลบชุดระเบียน

e89394b43ddb5ce2.png

คลิกลบโซนเพื่อล้างข้อมูลใน Lab ให้เสร็จสมบูรณ์

b2a612d7b3a80030.png

16. ยินดีด้วย

ขอแสดงความยินดีที่ทำ Codelab เสร็จสมบูรณ์

สิ่งที่เราได้พูดถึง

  • กรณีการใช้งาน Private Service Connect
  • ข้อกำหนดเกี่ยวกับเครือข่าย
  • API ที่รองรับ
  • สร้างปลายทาง Private Service Connect
  • สร้าง Bucket ของพื้นที่เก็บข้อมูลระบบคลาวด์
  • สร้างโซนส่วนตัวของ Cloud DNS
  • อัปเดตไฟล์การกำหนดค่า BOTO
  • สร้าง NAT GW
  • เรียกใช้ gsutil list ใน VM1 ที่แก้ไขเทียบกับปลายทางบริการ PSC
  • เรียกใช้ gsutil list ใน VM2 ที่จะแก้ไขกับ googleapis.com สาธารณะ
  • ใช้ Tcpdump เพื่อตรวจสอบการแปลง DNS