Looker PSA Southbound HTTPS Internet NEG

1. บทนำ

เฉพาะอินสแตนซ์ Looker (Google Cloud Core) ที่ใช้การเข้าถึงบริการส่วนตัวสำหรับการเชื่อมต่อส่วนตัวเท่านั้นที่รองรับการกำหนดค่า IP ส่วนตัวและ IP สาธารณะ

อินสแตนซ์ Looker (Google Cloud Core) ที่มีทั้งการเชื่อมต่อ IP ส่วนตัว (การเข้าถึงบริการส่วนตัว) และการเชื่อมต่อ IP สาธารณะจะมี URL สาธารณะ และการรับส่งข้อมูลขาเข้าทั้งหมดจะผ่านการเชื่อมต่อ IP สาธารณะ ระบบจะกำหนดเส้นทางการรับส่งข้อมูลขาออกผ่าน VPC ซึ่งกำหนดค่าให้อนุญาตเฉพาะการรับส่งข้อมูล IP ส่วนตัวได้ตามที่แสดงในรูปที่ 1

Figure1

9f587c14791dd92e.png

การสื่อสารกับ github.com จะได้รับการแก้ไขเป็นที่อยู่ IP สาธารณะ จึงไม่สามารถเข้าถึงได้จากอินสแตนซ์ Looker ที่ติดตั้งใช้งานเป็นแบบส่วนตัวหรือสาธารณะ + ส่วนตัว

ใน Codelab นี้ คุณจะทำการเชื่อมต่อ HTTPS ขาออกไปยัง GitHub โดยใช้ตัวจัดสรรภาระงานพร็อกซี TCP ภายในและกลุ่มอุปกรณ์ปลายทางของเครือข่ายอินเทอร์เน็ต (NEG) ที่เรียกใช้จาก Looker PSA

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

  • ข้อกำหนดเกี่ยวกับเครือข่าย
  • สร้างการเชื่อมต่อกับ GitHub จาก Looker โดยใช้การทดสอบการเชื่อมต่อ

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

5348de53f0a78a50.png

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 อาศัยเราเตอร์ระบบคลาวด์ สำหรับความสามารถของระนาบควบคุม แต่ไม่ใช่สำหรับการจัดการเซสชัน BGP

Cloud NAT

NEG อินเทอร์เน็ตระดับภูมิภาคใช้ Cloud NAT สำหรับการรับส่งข้อมูลอินเทอร์เน็ตขาออก

4. โทโพโลยี Codelab

c5871e5418d37f13.png

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

เริ่มต้น Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

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

สร้าง Public NAT gateway

ตัวจัดสรรภาระงานพร็อกซี TCP ภายในระดับภูมิภาคใช้เกตเวย์ NAT สำหรับการรับส่งข้อมูลอินเทอร์เน็ตขาออกที่มีตัวเลือกการกำหนดค่า –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 ภายในสำหรับตัวจัดสรรภาระงานที่จะใช้ในภายหลังเป็นระเบียน A ของ DNS สำหรับ 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 อินเทอร์เน็ต ทำได้ 2 วิธี ได้แก่ INTERNET_FQDN_PORT หรือ INTERNET_IP_PORT หากเลือกรูปแบบ INTERNET_IP_PORT (ตัวเลือกที่ 1) จะใช้ได้เฉพาะที่อยู่ IP ที่กำหนดเส้นทางได้ในอินเทอร์เน็ตสาธารณะ หากเลือกรูปแบบ INTERNET_FQDN_PORT (ตัวเลือกที่ 2) จะสามารถแก้ไข FQDN เป็นที่อยู่ IP ที่กำหนดเส้นทางได้ในอินเทอร์เน็ตสาธารณะหรือเป็นที่อยู่ IP ส่วนตัวก็ได้ ขึ้นอยู่กับขอบเขตของอุปกรณ์ปลายทาง ไม่ว่าจะเป็นระดับภูมิภาคหรือระดับโลก

ตัวเลือกที่ 1: ตั้งค่า NEG อินเทอร์เน็ตโดยใช้ที่อยู่ IP

NEG อินเทอร์เน็ตต้องใช้ที่อยู่ IP ที่ได้รับการแก้ไขของ Github.com ดังนั้นเพื่อประสิทธิภาพที่ดีที่สุด ให้เปิดเทอร์มินัลในเครื่องแล้วเรียกใช้คำสั่ง dig เพื่อรับที่อยู่ 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 กับ Looker PSA เพื่ออนุญาตการเชื่อมต่อกับ GitHub ผ่านตัวจัดสรรภาระงานภายในร่วมกับ NEG ของอินเทอร์เน็ตและ Cloud NAT

สร้างโซนนโยบายการตอบกลับใน Cloud Shell โดยทำดังนี้

gcloud dns --project=$project response-policies create github-com --description="" --networks="$vpc_network"

ใน Cloud Shell ให้สร้างระเบียน A ของ DNS ที่ประกอบด้วยที่อยู่ 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"

7b41b2f44609e5ed.png

อัปเดตการเพียร์ 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 ให้ไปที่

เปิดใช้โหมดนักพัฒนา (หน้าด้านซ้ายล่าง) เมื่อเลือกแล้ว แบนเนอร์ "คุณอยู่ในโหมดนักพัฒนา" จะแสดงขึ้น

70c9ded749decfbe.png

สร้างโปรเจ็กต์ใหม่

ใน Cloud Console ให้ไปที่

พัฒนา → โปรเจ็กต์

e8ae11e0392a776d.png

เลือกโปรเจ็กต์ LookML ใหม่

65a3c2573e97e1e9.png

ระบุชื่อโปรเจ็กต์ เลือกโปรเจ็กต์เปล่า แล้วสร้างโปรเจ็กต์

9185808e001fa540.png

เลือกกำหนดค่า Git

42f5e51ce70642ad.png

กำหนดค่า Git

อัปเดต URL ของที่เก็บด้วยรายละเอียด GitHub ของ HTTPS ตรวจสอบว่าได้ต่อท้าย URL ด้วย .git แล้ว จากนั้นเลือก "ต่อไป"

f5c448f6659b8fc1.png

ตัวอย่าง

4065ab1d196589f.png

อัปเดตการเลือกด้วยชื่อผู้ใช้ GitHub และโทเค็นเพื่อการเข้าถึงส่วนบุคคล (คลาสสิก) จากนั้นเลือกทดสอบและตั้งค่าให้เสร็จสมบูรณ์

1dc44d63c555a9ae.png

เลือก Git Actions

b5903668a50a99ca.png

เลือก "ทดสอบการเชื่อมต่อ Git"

51b722e84f2df38c.png

ตรวจสอบการทดสอบการเชื่อมต่อ Git

8fb7386b739f60be.png

13. ล้างข้อมูล

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

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 นั้นยอดเยี่ยม!!

c911c127bffdee57.jpeg

สิ่งต่อไปที่ควรทำ

อ่านเพิ่มเติมและวิดีโอ

เอกสารอ้างอิง