1. บทนำ
Private Service Connect ช่วยให้คุณสร้างปลายทางส่วนตัวโดยใช้ที่อยู่ IP ภายในส่วนกลางภายในเครือข่าย VPC เพื่อเข้าถึง Google APIs ได้ คุณสามารถกำหนดชื่อ 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
รูปที่ 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
รูปที่ 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. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID
ในภายหลัง
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ซึ่งจะแนะนำคุณเกี่ยวกับวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้
จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้
เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 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
สร้างซับเน็ต
จาก 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 APIs และบริการของ Google
จาก 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 บริการ Service Directory จะสร้างระเบียน DNS สำหรับ API และบริการที่พร้อมใช้งานโดยใช้ปลายทางดังกล่าว
ระเบียน DNS จะชี้ไปยังที่อยู่ IP ปลายทางของ Private Service Connect และอยู่ในรูปแบบ SERVICE-ENDPOINT.p.googleapis.com
คุณใช้ชื่อ DNS เหล่านี้ในคำขอ API เพื่อส่งคำขอไปยังปลายทาง Private Service Connect ได้ คุณสามารถใช้ชื่อ DNS เหล่านี้ในส่วนหัวโฮสต์ของคำขอได้เช่นกัน
หากต้องการใช้ปลายทาง Private Service Connect กับไคลเอ็นต์หรือแอปพลิเคชันที่เข้าถึง API และบริการของ Google ให้อัปเดตไคลเอ็นต์หรือแอปพลิเคชันของคุณให้ใช้ชื่อ DNS ของ p.googleapis.com
โปรดดูรายละเอียดในเอกสารของไคลเอ็นต์หรือไลบรารีของไคลเอ็นต์ เช่น
- Python: คุณสามารถกำหนดค่า api_endpoint ในคลาสตัวเลือกไคลเอ็นต์ในแพ็กเกจ google-api-core
- ไป: คุณสามารถกำหนดค่า WithEndpoint ในแพ็กเกจตัวเลือกไคลเอ็นต์ในแพ็กเกจ API
- gcloud: คุณกำหนดค่า api_endpoint_overrides ได้โดยใช้คำสั่งนี้ gcloud config set api_endpoint_overrides/SERVICE ENDPOINT_URL
เช่น ชุดการกำหนดค่า gcloud 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 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 = [your project number] 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 = [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
บันทึกการแก้ไขข้อบกพร่องยืนยันว่าที่เก็บข้อมูลของพื้นที่เก็บข้อมูลเข้าถึงได้ผ่านปลายทาง "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 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 จนจบ
หัวข้อที่ครอบคลุม
- กรณีการใช้งานการเชื่อมต่อบริการส่วนตัว
- ข้อกำหนดเกี่ยวกับเครือข่าย
- API ที่รองรับ
- สร้างปลายทาง Private Service Connect แล้ว
- สร้างที่เก็บข้อมูล Cloud Storage แล้ว
- อัปเดตไฟล์การกำหนดค่า BOTO แล้ว
- สร้าง NAT GW แล้ว
- สร้างรายการ gsutil บน VM1 ที่แก้ไขเทียบกับปลายทางบริการ PSC
- สร้างรายการ gsutil บน VM2 ที่แก้ไขเทียบกับ googleapis.com แบบสาธารณะ
- ใช้ Tcpdump เพื่อตรวจสอบการแปลง DNS