1. บทนำ
Private Service Connect ช่วยให้คุณสร้างปลายทางส่วนตัวได้โดยใช้ที่อยู่ IP ภายในแบบสากลภายในเครือข่าย VPC เพื่อเข้าถึง Google APIs คุณสามารถกำหนดชื่อ 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

รูปที่ 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

รูปที่ 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. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



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

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

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 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
สร้างซับเน็ต
จาก 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 ให้สร้างกฎไฟร์วอลล์ที่มีลักษณะดังนี้
- มีผลกับอินสแตนซ์ VM ทั้งหมดที่คุณต้องการให้เข้าถึงได้โดยใช้ IAP
- อนุญาตการรับส่งข้อมูลขาเข้าจากช่วง IP 35.235.240.0/20 ช่วงนี้มีที่อยู่ IP ทั้งหมดที่ IAP ใช้สำหรับการส่งต่อ TCP
จาก 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
เมื่อกำหนดค่า IP ของปลายทาง Private Service Connect <pscendpointip> คุณจะต้องระบุที่อยู่ IP ที่ไม่ซ้ำกันซึ่งไม่ได้กำหนดไว้ใน VPC
จาก 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. สร้างที่เก็บข้อมูล
สร้าง 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
เมื่อสร้างปลายทาง Private Service Connect แล้ว Service Directory จะสร้างระเบียน DNS สำหรับ API และบริการที่พร้อมใช้งานโดยใช้ปลายทางนั้น
ระเบียน DNS จะชี้ไปยังที่อยู่ IP ของปลายทาง Private Service Connect และอยู่ในรูปแบบ SERVICE-ENDPOINT.p.googleapis.com
คุณสามารถใช้ชื่อ DNS เหล่านี้ในคำขอ API เพื่อนำคำขอไปยังปลายทาง Private Service Connect นอกจากนี้ คุณยังใช้ชื่อ DNS เหล่านี้ในส่วนหัว Host ของคำขอได้ด้วย
หากต้องการใช้ปลายทาง Private Service Connect กับไคลเอ็นต์หรือแอปพลิเคชันที่เข้าถึง Google API และบริการ ให้อัปเดตไคลเอ็นต์หรือแอปพลิเคชันให้ใช้ชื่อ DNS ของ p.googleapis.com
ดูรายละเอียดได้ในเอกสารประกอบสำหรับไคลเอ็นต์หรือไลบรารีไคลเอ็นต์ เช่น
- Python: คุณกำหนดค่า api_endpoint ได้ในคลาสตัวเลือกไคลเอ็นต์ในแพ็กเกจ google-api-core
- Go: คุณกำหนดค่า WithEndpoint ได้ในแพ็กเกจตัวเลือกไคลเอ็นต์ในแพ็กเกจ API
- gcloud: You can configure api_endpoint_overrides using this command. 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 Console ให้ตรวจสอบรายการ DNS ที่สร้างขึ้นซึ่งอยู่ในส่วนบริการเครือข่าย → Cloud DNS จดชื่อ DNS ที่สร้างขึ้น "p.googleapis.com"
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 ครั้ง

สร้างเครื่องเสมือน (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 = [your project number] 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 = [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
ตรวจสอบการค้นหา 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 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
- สร้าง Bucket ของพื้นที่เก็บข้อมูลระบบคลาวด์
- อัปเดตไฟล์การกำหนดค่า BOTO
- สร้าง NAT GW
- เรียกใช้ gsutil list ใน VM1 ที่แก้ไขเทียบกับปลายทางบริการ PSC
- เรียกใช้ gsutil list ใน VM2 ที่จะแก้ไขกับ googleapis.com สาธารณะ
- ใช้ Tcpdump เพื่อตรวจสอบการแปลง DNS