1. บทนำ
เฉพาะอินสแตนซ์ Looker (Google Cloud Core) ที่ใช้การเข้าถึงบริการส่วนตัวสำหรับการเชื่อมต่อส่วนตัวเท่านั้นที่รองรับการกำหนดค่า IP ส่วนตัวและ IP สาธารณะ
อินสแตนซ์ Looker (Google Cloud Core) ที่มีทั้งการเชื่อมต่อ IP ส่วนตัว (การเข้าถึงบริการส่วนตัว) และการเชื่อมต่อ IP สาธารณะจะมี URL สาธารณะ และการรับส่งข้อมูลขาเข้าทั้งหมดจะผ่านการเชื่อมต่อ IP สาธารณะ การรับส่งข้อมูลขาออกจะกำหนดเส้นทางผ่าน VPC ซึ่งสามารถกําหนดค่าให้อนุญาตเฉพาะการรับส่งข้อมูล IP ส่วนตัวได้ดังที่แสดงในรูปที่ 1
Figure1
การสื่อสารกับ github.com ได้รับการแก้ไขเป็นที่อยู่ IP สาธารณะ จึงเข้าถึงไม่ได้จากอินสแตนซ์ Looker ที่ติดตั้งใช้งานแบบส่วนตัวหรือแบบสาธารณะและส่วนตัว
ในโค้ดแล็บนี้ คุณจะทำการเชื่อมต่อ HTTPS ไปทางใต้กับ GitHub โดยใช้ตัวจัดสรรภาระงานพร็อกซี TCP ภายในและกลุ่มปลายทางเครือข่ายอินเทอร์เน็ต (NEG) ที่เรียกใช้จาก PSA ของ Looker
สิ่งที่คุณจะได้เรียนรู้
- ข้อกำหนดเกี่ยวกับเครือข่าย
- สร้างการเชื่อมต่อกับ GitHub จาก Looker โดยใช้การเชื่อมต่อทดสอบ
สิ่งที่ต้องมี
- โปรเจ็กต์ Google Cloud ที่มีสิทธิ์ระดับเจ้าของ
- บัญชีและที่เก็บ GitHub
- โทเค็นการเข้าถึงส่วนบุคคลของ GitHub (คลาสสิก)
- อินสแตนซ์ PSA ของ Looker ที่มีอยู่ซึ่งเปิดใช้แบบสาธารณะ + ส่วนตัวหรือแบบส่วนตัวเท่านั้น
2. สิ่งที่คุณจะสร้าง
คุณจะติดตั้งใช้งานตัวจัดสรรภาระงานพร็อกซี TCP ภายในและ NEG ของอินเทอร์เน็ตที่กําหนดค่าด้วยที่อยู่ IP ที่แก้ไขแล้วของ github.com ซึ่งใช้ประโยชน์จาก Cloud NAT สําหรับการส่งออกทางอินเทอร์เน็ตไปยังองค์กร github.com ที่แก้ไขโดย Looker
3. ข้อกำหนดเกี่ยวกับเครือข่าย
รายละเอียดข้อกำหนดของเครือข่ายมีดังนี้
คอมโพเนนต์ | คำอธิบาย |
VPC ($vpc_network) | VPC โหมดที่กำหนดเอง |
ซับเน็ตของกฎการส่งต่อ | ใช้เพื่อจัดสรรที่อยู่ IP สําหรับตัวจัดสรรภาระงานพร็อกซี TCP ภายในระดับภูมิภาค |
ซับเน็ตเฉพาะพร็อกซี | พร็อกซี แต่ละรายการของตัวจัดสรรภาระงานจะได้รับที่อยู่ IP ภายใน แพ็กเก็ตที่ส่งจากพร็อกซีไปยัง VM หรืออุปกรณ์ปลายทางในแบ็กเอนด์จะมีที่อยู่ IP ต้นทางจากซับเน็ตของพร็อกซีเท่านั้น |
NEG อินเทอร์เน็ต | ทรัพยากรที่ใช้เพื่อกำหนดแบ็กเอนด์ภายนอกสำหรับตัวจัดสรรภาระงาน ปลายทางเข้าถึงได้ผ่าน Cloud VPN หรือ Cloud Interconnect เท่านั้น |
บริการแบ็กเอนด์ | บริการแบ็กเอนด์ทำหน้าที่เป็นบริดจ์ระหว่างตัวจัดสรรภาระงานกับทรัพยากรแบ็กเอนด์ ในบทแนะนำ บริการแบ็กเอนด์จะเชื่อมโยงกับ NEG ของอินเทอร์เน็ต |
Cloud Router | Cloud NAT อาศัยเราเตอร์ระบบคลาวด์ เพื่อความสามารถของ Control Plane แต่ไม่ได้อาศัยเพื่อการจัดการเซสชัน BGP |
Cloud NAT | NEG อินเทอร์เน็ตระดับภูมิภาคใช้ประโยชน์จาก Cloud NAT สำหรับการส่งออกอินเทอร์เน็ต |
4. โทโพโลยีของ Codelab
5. การตั้งค่าและข้อกําหนด
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะซ้ำกันไม่ได้ในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) คอนโซล Cloud จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นจะเป็นอะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ปกติจะระบุเป็น
PROJECT_ID
) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสอื่นแบบสุ่มได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าอุปกรณ์พร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงชื่อหลังจากขั้นตอนนี้ไม่ได้ และชื่อดังกล่าวจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้จะไม่เสียค่าใช้จ่ายมากนัก หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินหลังจากบทแนะนำนี้ คุณลบทรัพยากรที่สร้างไว้หรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่ม Cloud Shell
แม้ว่า Google Cloud จะทำงานจากระยะไกลจากแล็ปท็อปได้ แต่ในโค้ดแล็บนี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จากคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อดำเนินการเสร็จแล้ว คุณควรเห็นข้อมูลดังต่อไปนี้
เครื่องเสมือนนี้โหลดเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ ซึ่งจะมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานบน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพเครือข่ายและการรับรองได้อย่างมีประสิทธิภาพ คุณทํางานทั้งหมดในโค้ดแล็บนี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร
6. ก่อนเริ่มต้น
เปิดใช้ API
ใน Cloud Shell ให้ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์แล้ว โดยทำดังนี้
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
vpc_network=[VPC Name]
echo $project
echo $region
echo $vpc-network
เปิดใช้บริการที่จำเป็นทั้งหมด
gcloud services enable compute.googleapis.com
7. ส่วนประกอบของเครือข่าย VPC
เครือข่าย VPC
ข้อกําหนดเบื้องต้นของบทแนะนําคืออินสแตนซ์ Looker ของ PSA ที่มีอยู่ ดังนั้น VPC ที่เชื่อมโยงจึงสร้างขึ้นแล้ว
สร้างเครือข่ายย่อยของกฎการส่งต่อใน Cloud Shell โดยทำดังนี้
gcloud compute networks subnets create psa-fr-subnet --network $vpc_network --range 172.16.20.0/28 --region $region --enable-private-ip-google-access
สร้างซับเน็ตเฉพาะพร็อกซีระดับภูมิภาคใน Cloud Shell โดยทำดังนี้
gcloud compute networks subnets create $region-proxyonly-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$region \
--network=$vpc_network \
--range=10.10.10.0/24
สร้างเกตเวย์ NAT สาธารณะ
NAT Gateway ดังกล่าวใช้โดยตัวจัดสรรภาระงานพร็อกซี TCP ภายในระดับภูมิภาคสำหรับการส่งออกอินเทอร์เน็ตที่มีตัวเลือกการกําหนดค่า –endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB ดังนั้น NATGW เดียวกันจะไม่รองรับการส่งออกอินเทอร์เน็ตของ GCE/GKE ติดตั้งใช้งาน NAT GW เพิ่มเติมด้วย –endpoint-types=ENDPOINT_TYPE_VM สำหรับการส่งออกอินเทอร์เน็ตของ GCE/GKE
สร้าง Cloud Router ใน Cloud Shell โดยทำดังนี้
gcloud compute routers create $vpc_network-cloud-router --network $vpc_network --region $region
สร้างเกตเวย์ Cloud NAT ภายใน Cloud Shell เพื่อเปิดใช้การส่งออกอินเทอร์เน็ตสำหรับตัวจัดสรรภาระงานพร็อกซี TCP โดยทำดังนี้
gcloud compute routers nats create $vpc_network-natgw \
--router=$vpc_network-cloud-router \
--endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
--nat-custom-subnet-ip-ranges=$region-proxyonly-subnet \
--auto-allocate-nat-external-ips \
--region=$region
สำรองที่อยู่ IP ของตัวจัดสรรภาระงาน
ใน Cloud Shell ให้จองที่อยู่ IP ภายในสำหรับตัวจัดสรรภาระงานที่จะใช้เป็นระเบียน DNS A สำหรับ github.com ในภายหลัง
gcloud compute addresses create internet-neg-lb-ip \
--region=$region \
--subnet=psa-fr-subnet
ดูที่อยู่ IP ที่สงวนไว้ใน Cloud Shell โดยทำดังนี้
gcloud compute addresses describe internet-neg-lb-ip \
--region=$region | grep -i address:
ตัวอย่างเอาต์พุต
user@cloudshell$ gcloud compute addresses describe internet-neg-lb-ip --region=$region | grep -i address:
address: 172.16.20.2
8. NEG อินเทอร์เน็ต
การกำหนดค่าปลายทางภายนอกที่ NEG อินเทอร์เน็ต: INTERNET_FQDN_PORT หรือ INTERNET_IP_PORT อ้างอิงทำได้ 2 วิธี หากเลือกรูปแบบ INTERNET_IP_PORT (ตัวเลือกที่ 1) ระบบจะใช้ได้เฉพาะที่อยู่ IP สาธารณะที่รับส่งข้อมูลทางอินเทอร์เน็ตได้ หากเลือกรูปแบบ INTERNET_FQDN_PORT (ตัวเลือกที่ 2) ระบบจะแก้ไข FQDN เป็นที่อยู่ IP สาธารณะที่รับส่งข้อมูลทางอินเทอร์เน็ตได้หรือที่อยู่ IP ส่วนตัว ทั้งนี้ขึ้นอยู่กับขอบเขตของปลายทาง ซึ่งอาจเป็นระดับภูมิภาคหรือทั่วโลก
ตัวเลือกที่ 1: ตั้งค่า NEG ของอินเทอร์เน็ตโดยใช้ที่อยู่ IP
NEG ของอินเทอร์เน็ตต้องใช้ที่อยู่ IP ที่แก้ไขแล้วของ Github.com ดังนั้นเพื่อให้ได้ประสิทธิภาพที่ดีที่สุด ให้เปิดเทอร์มินัลในเครื่องแล้วทำการค้นหาและรับที่อยู่ IP ของ github.com
ตัวอย่างจากเทอร์มินัลในเครื่องจะสร้างที่อยู่ IP ที่แก้ไขแล้ว 140.82.113.4
bash-3.2$ dig github.com ; <<>> DiG 9.10.6 <<>> github.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64801 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;github.com. IN A ;; ANSWER SECTION: github.com. 60 IN A 140.82.113.4 ;; Query time: 409 msec ;; SERVER: ::1#53(::1) ;; WHEN: Thu Sep 26 15:50:45 CDT 2024 ;; MSG SIZE rcvd: 65
สร้าง NEG อินเทอร์เน็ต และตั้งค่า –network-endpoint-type เป็น internet_ip_port
สร้าง NEG อินเทอร์เน็ตที่ใช้สำหรับ github.com ใน Cloud Shell โดยทำดังนี้
gcloud compute network-endpoint-groups create github-internet-neg \
--network-endpoint-type=INTERNET_IP_PORT \
--network=$vpc_network \
--region=$region
ใน Cloud Shell ให้อัปเดต NEG อินเทอร์เน็ต github-internet-neg ด้วยที่อยู่ IP ที่แก้ไขแล้วของ github.com และพอร์ต 443 ดังนี้
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="ip=[your-resolved-ip],port=443" \
--region=$region
ตัวอย่าง
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="ip=140.82.113.4,port=443" \
--region=$region
ตัวเลือกที่ 2: ตั้งค่า NEG ทางอินเทอร์เน็ตโดยใช้ FQDN
คุณสร้าง NEG อินเทอร์เน็ตและตั้งค่า –network-endpoint-type เป็น internet_FQDN_port ได้ด้วย
สร้าง NEG อินเทอร์เน็ตที่ใช้สำหรับ github.com ใน Cloud Shell โดยทำดังนี้
gcloud compute network-endpoint-groups create github-internet-neg \
--network-endpoint-type=INTERNET_FQDN_PORT \
--network=$vpc_network \
--region=$region
ใน Cloud Shell ให้อัปเดต NEG อินเทอร์เน็ต github-internet-neg ด้วย FQDN github.com โดยทำดังนี้
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="fqdn=github.com,port=443" \
--region=$region
9. สร้างบริการ GitHub
สร้างคอมโพเนนต์ตัวจัดสรรภาระงาน
ใน Cloud Shell ให้ทําดังนี้
gcloud compute backend-services create psa-backend-svc --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED
gcloud compute backend-services add-backend psa-backend-svc --network-endpoint-group=github-internet-neg --network-endpoint-group-region=$region --region=$region
ใน Cloud Shell ให้สร้างพร็อกซี TCP เป้าหมายเพื่อกำหนดเส้นทางคำขอไปยังบริการแบ็กเอนด์ โดยทำดังนี้
gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
--backend-service=psa-backend-svc \
--region=$region
สร้างกฎการส่งต่อ (ตัวจัดสรรภาระงานพร็อกซี TCP ภายใน) ในไวยากรณ์ต่อไปนี้
ใน Cloud Shell ให้ทําดังนี้
gcloud compute forwarding-rules create psa-github-fr \
--load-balancing-scheme=INTERNAL_MANAGED \
--network-tier=PREMIUM \
--network=$vpc_network \
--subnet=psa-fr-subnet \
--address=internet-neg-lb-ip \
--target-tcp-proxy=producer-lb-tcp-proxy \
--target-tcp-proxy-region=$region \
--region=$region \
--ports=443
10. โซน DNS ของ GitHub
ในส่วนต่อไปนี้ คุณจะต้องสร้างนโยบายการตอบกลับ DNS สําหรับ GitHub.com ด้วยระเบียน A ที่ประกอบด้วยที่อยู่ IP ของตัวจัดสรรภาระงานพร็อกซี TCP ภายใน
หลังจากนั้น การเพียร์ DNS จะแชร์โซน github.com กับ PSA ของ Looker ซึ่งจะอนุญาตให้เชื่อมต่อกับ github ผ่านตัวกระจายโหลดภายในร่วมกับ NEG ของอินเทอร์เน็ตและ Cloud NAT
สร้างโซนนโยบายการตอบกลับใน Cloud Shell โดยทำดังนี้
gcloud dns --project=$project response-policies create github-com --description="" --networks="$vpc_network"
ใน Cloud Shell ให้สร้างระเบียน DNS A ที่ประกอบด้วยที่อยู่ IP ของตัวจัดสรรภาระงานพร็อกซี TCP [insert-your-ip-address] ดังนี้
gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="[insert-your-ip-address]"
ตัวอย่าง
gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="172.16.20.2"
อัปเดตการเพียร์ DNS
ในส่วนนี้ คุณจะใช้ไวยากรณ์ "gcloud services peered-dns-domains create" ซึ่งสร้างโดเมน DNS ที่เพียร์สำหรับการเชื่อมต่อบริการส่วนตัว ซึ่งจะส่งคำขอระเบียนในเนมสเปซที่ระบุซึ่งมาจากเครือข่าย VPC ของผู้ให้บริการไปยังเครือข่าย VPC ของผู้บริโภคเพื่อแก้ไข
ใน Cloud Shell ให้สร้าง peered-dns-domain ที่ Looker จะค้นหา github.com
gcloud services peered-dns-domains create github-com --project=$project --network=$vpc_network --dns-suffix=github.com.
11. ทดสอบการเชื่อมต่อกับ GitHub
ในขั้นตอนต่อไปนี้ คุณจะใช้ Looker Console เพื่อสร้างโปรเจ็กต์เพื่อตรวจสอบการเชื่อมต่อ HTTPS กับ github.com
12. สร้างโปรเจ็กต์ใหม่
เปิดใช้โหมดการพัฒนา
ใน Looker Console ให้ไปที่
เปิดใช้โหมดการพัฒนา (ด้านล่างซ้ายของหน้า) เมื่อเลือกแล้ว แบนเนอร์ "คุณอยู่ในโหมดการพัฒนา" จะปรากฏขึ้น
สร้างโปรเจ็กต์ใหม่
ใน Cloud Console ให้ไปที่
พัฒนา → โปรเจ็กต์
เลือกโปรเจ็กต์ LookML ใหม่
ระบุชื่อโปรเจ็กต์ เลือกโปรเจ็กต์ว่าง แล้วสร้างโปรเจ็กต์
เลือก "กำหนดค่า Git"
กำหนดค่า Git
อัปเดต URL ของที่เก็บข้อมูลด้วยรายละเอียด HTTPS ของ GitHub อย่าลืมใส่ .git ต่อท้าย URL แล้วเลือก "ดำเนินการต่อ"
ตัวอย่าง
อัปเดตรายการที่เลือกด้วยชื่อผู้ใช้ GitHub และโทเค็นการเข้าถึงส่วนบุคคล (แบบคลาสสิก) จากนั้นเลือก "ทดสอบ" และ "ตั้งค่าให้เสร็จสมบูรณ์"
เลือกการดำเนินการ Git
เลือก "ทดสอบการเชื่อมต่อ Git"
ตรวจสอบการทดสอบการเชื่อมต่อ Git
13. ล้างข้อมูล
ลบคอมโพเนนต์ของห้องทดลองจากเทอร์มินัล Cloud Shell เครื่องเดียวโดยทำดังนี้
gcloud compute forwarding-rules delete psa-github-fr --region=$region -q
gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q
gcloud compute backend-services delete psa-backend-svc --region=$region -q
gcloud compute routers nats delete $vpc_network-natgw --router=$vpc_network-cloud-router --router-region=$region -q
gcloud compute routers delete $vpc_network-cloud-router --region=$region -q
gcloud compute network-endpoint-groups delete github-internet-neg --region=$region -q
gcloud compute addresses delete internet-neg-lb-ip --region=$region -q
gcloud compute networks subnets delete psa-fr-subnet $region-proxyonly-subnet --region=$region -q
gcloud services peered-dns-domains delete github-com --network=$vpc_network -q
gcloud dns --project=$project response-policies rules delete github --response-policy="github-com" -q
gcloud dns response-policies update github-com --networks= -q
gcloud dns response-policies delete github-com
14. ขอแสดงความยินดี
ยินดีด้วย คุณได้กําหนดค่าและตรวจสอบการเชื่อมต่อกับ GitHub โดยใช้ Looker Console เรียบร้อยแล้ว
Cosmopup คิดว่า Codelab เจ๋งสุดๆ