Private Service Connect สำหรับ Google APIs

1. บทนำ

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

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

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

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

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

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

  • ความรู้เกี่ยวกับตัวแก้ไข DNS, นาโน หรือ vi

2. กรณีการใช้งานการเชื่อมต่อบริการส่วนตัว

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

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

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

5e142c2fbf6f010e.png

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

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 คุณจะเลือก Bundle ของ API ที่ต้องการเข้าถึง ได้แก่ all-apis หรือ vpc-sc

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

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

4. โทโพโลยีแบบ Codelab และ Use Case

2ac275eb86f26338.png

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

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

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

ทำให้ Lab นี้ใช้งานได้ทุกด้านภายใน Google Cloud Platform แต่จะใช้กรณีการใช้งานเดียวกันสำหรับการติดตั้งใช้งานระบบคลาวด์แบบผสมที่ต้องแยกการรับส่งข้อมูล

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

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

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

MrEseyJH4tg9PuS3GzJa72onCqawwQiRm04c0YjnpR6WD3IciP1ICDh5e5RoxrG3tc5y44_Ynn9GB0Igjo3sTE0BlsAnCxJdhXn7egP3tX4rkzkub7ZCjOKc70kJvl07REnmPb3TGg

HgKQ1sLCGDGbz0e3RCc-FNa3fQliCtq67H-Oj9jzzYn_upkmNN1lOMQrQm8Jdvo6EEYAvSwDEjpH37bIG9ouBJcmS_xFYV1IHJoyAhsasS1SfYtZkO-RBwWPXRrr3Zt4r31ETcjJeQ

KHAY2ncSMFGZ2vGxcMEcNoIy_cuWGCaWAsrH0KsOVwkV5e93Ypfcq3sQ_HPIrV-NSocegQN2PnRUku_CVi1MM89O6qHIU6E32ZypJPxojkbRTJXET5JvtskIXgzFMk18-4NnNjzCJA

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

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

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

เริ่มต้น Cloud Shell

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

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

yEqEFRN4OGfeGJEfJplSt5sGY95BluU78i3Lk0Opo9caOYfrWUPBi_RglIfo9x078tH5Z_Obgq1wOhrEPV8k5OvMgI5e3aam1a7teXuimwTy-evcupc34_UEMmfAFkV-hnXwl559rg

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

BxRCLVCDNXX4OxwHppzaY9ghvuFTsgsozreyEHvRK9GPfsh3sW-kdwev6_gZdkX5FWPvb7M_Vp4FoyjFWwZxBMK6CLXiPwJgFbhz8Tgec-tyQR7GEdNjGMBca052yM8ga0UqzdHAmw

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

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 APIs และบริการของ Google

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

สร้างที่เก็บข้อมูล 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 ในตัวอย่างด้านบน "พื้นที่เก็บข้อมูล" คือ 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"

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

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 Shell 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) ให้ยืนยันว่ามีการใช้ระเบียน 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 โดยการอัปเดตไฟล์ VM BOTO ใน 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 โดยใช้โปรแกรมแก้ไขนาโนหรือ VI ตรวจสอบว่าได้คัดลอกและวางรายการทั้งหมดแล้ว

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

บันทึกการแก้ไขข้อบกพร่องยืนยันว่าที่เก็บข้อมูลของพื้นที่เก็บข้อมูลเข้าถึงได้ผ่านปลายทาง "pscendpoint" ของ Private Service Connect

เอาต์พุต:

<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

ลบคอมโพเนนต์ห้องทดลองจากเทอร์มินัล 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" แล้วคลิก Delete Record Sets

e89394b43ddb5ce2.png

คลิก Delete Zone เพื่อทำความสะอาดห้องทดลองให้เสร็จสมบูรณ์

b2a612d7b3a80030.png

16. ยินดีด้วย

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

หัวข้อที่ครอบคลุม

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