1. บทนำ
ในโค้ดแล็บนี้ คุณจะทำการเชื่อมต่อไปทางใต้กับฐานข้อมูล postgres ในองค์กรผ่าน H-VPN โดยใช้ตัวจัดสรรภาระงานพร็อกซี TCP ภายในและกลุ่มปลายทางเครือข่ายแบบผสมผสานที่เรียกใช้จาก PSC ของ Looker ในฐานะผู้บริโภคบริการ
Private Service Connect เป็นความสามารถของเครือข่าย Google Cloud ที่ช่วยให้ผู้บริโภคเข้าถึงบริการที่มีการจัดการแบบส่วนตัวได้จากภายในเครือข่าย VPC ในทํานองเดียวกัน ฟีเจอร์นี้ยังช่วยให้ผู้ผลิตบริการที่มีการจัดการโฮสต์บริการเหล่านี้ในเครือข่าย VPC แยกต่างหากของตนเองและมอบการเชื่อมต่อส่วนตัวแก่ผู้บริโภคได้ ตัวอย่างเช่น เมื่อคุณใช้ Private Service Connect เพื่อเข้าถึง Looker แสดงว่าคุณเป็นผู้บริโภคบริการ และ Google เป็นผู้ให้บริการ ดังที่ไฮไลต์ในรูปที่ 1
รูปที่ 1
การเข้าถึงจากฝั่งเซาท์หรือที่เรียกว่า PSC แบบย้อนกลับช่วยให้ผู้บริโภคสร้างบริการที่เผยแพร่ในฐานะผู้ผลิตเพื่ออนุญาตให้ Looker เข้าถึงอุปกรณ์ปลายทางในสถานที่ตั้งใน VPC, บริการที่มีการจัดการ และระบบแบบผสมได้ การเชื่อมต่อขาออกสามารถติดตั้งใช้งานได้ในทุกภูมิภาค ไม่ว่าจะติดตั้ง Looker PSC ไว้ที่ใดก็ตาม ดังที่ไฮไลต์ไว้ในรูปที่ 2
รูปที่ 2
สิ่งที่คุณจะได้เรียนรู้
- ข้อกำหนดเกี่ยวกับเครือข่าย
- สร้างบริการของผู้ผลิต Private Service Connect
- สร้างปลายทาง Private Service Connect ใน Looker
- สร้างการเชื่อมต่อกับฐานข้อมูล postgres ในสถานที่ตั้งจาก Looker โดยใช้การเชื่อมต่อทดสอบ
สิ่งที่ต้องมี
- โปรเจ็กต์ Google Cloud ที่มีสิทธิ์ระดับเจ้าของ
- อินสแตนซ์ PSC ของ Looker ที่มีอยู่
2. สิ่งที่คุณจะสร้าง
คุณจะต้องสร้างเครือข่ายผู้ผลิต looker-psc-demo เพื่อติดตั้งใช้งานตัวจัดสรรภาระงานพร็อกซี TCP ภายในและ NEG แบบผสมที่เผยแพร่เป็นบริการผ่าน Private Service Connect (PSC) หากต้องการสาธิตฐานข้อมูลในองค์กร คุณจะต้องติดตั้งใช้งาน VPC on-prem-demo ที่เชื่อมต่อกับ VPC looker-psc-demo โดยใช้ HA-VPN
คุณจะต้องดำเนินการต่อไปนี้เพื่อตรวจสอบสิทธิ์เข้าถึงบริการ Producer
- สร้างปลายทาง PSC ใน Looker ที่เชื่อมโยงกับไฟล์แนบบริการของผู้ผลิต
- ใช้คอนโซล Looker เพื่อตรวจสอบการเชื่อมต่อกับฐานข้อมูล PostgreSQL ในองค์กร
3. ข้อกำหนดเกี่ยวกับเครือข่าย
ด้านล่างนี้คือรายละเอียดข้อกําหนดของเครือข่ายสําหรับเครือข่ายของผู้ผลิต โดยผู้บริโภคในโค้ดแล็บนี้คืออินสแตนซ์ PSC ของ Looker
คอมโพเนนต์ | คำอธิบาย |
VPC (looker-psc-demo) | VPC โหมดที่กำหนดเอง |
VPC (on-prem-demo) | VPC โหมดที่กำหนดเอง |
ซับเน็ต NAT ของ PSC | ระบบจะแปลแพ็กเก็ตจากเครือข่าย VPC ของผู้บริโภคโดยใช้ Source NAT (SNAT) เพื่อให้ระบบแปลงที่อยู่ IP ต้นทางเดิมเป็นที่อยู่ IP ต้นทางจากซับเน็ต NAT ในเครือข่าย VPC ของผู้ผลิต |
ซับเน็ตกฎการส่งต่อ PSC | ใช้เพื่อจัดสรรที่อยู่ IP สําหรับตัวจัดสรรภาระงานพร็อกซี TCP ภายในระดับภูมิภาค |
ซับเน็ต NEG ของ PSC | ใช้เพื่อจัดสรรที่อยู่ IP สําหรับกลุ่มปลายทางของเครือข่าย |
ซับเน็ตเฉพาะพร็อกซี | พร็อกซี แต่ละรายการของตัวจัดสรรภาระงานจะได้รับที่อยู่ IP ภายใน แพ็กเก็ตที่ส่งจากพร็อกซีไปยัง VM หรืออุปกรณ์ปลายทางในแบ็กเอนด์จะมีที่อยู่ IP ต้นทางจากซับเน็ตของพร็อกซีเท่านั้น |
NEG แบบผสม | ระบบจะถือว่าบริการระบบคลาวด์ในองค์กรและบริการระบบคลาวด์อื่นๆ เป็นแบ็กเอนด์ระบบกระจายโหลดในระบบคลาวด์อื่นๆ ความแตกต่างที่สำคัญคือคุณใช้ NEG การเชื่อมต่อแบบผสมเพื่อกำหนดค่าปลายทางของแบ็กเอนด์เหล่านี้ ปลายทางต้องเป็นชุดค่าผสม IP:พอร์ตที่ถูกต้องซึ่งตัวจัดสรรภาระงานเข้าถึงได้โดยใช้ผลิตภัณฑ์การเชื่อมต่อแบบผสม เช่น Cloud VPN หรือ Cloud Interconnect |
บริการแบ็กเอนด์ | บริการแบ็กเอนด์ทำหน้าที่เป็นบริดจ์ระหว่างตัวจัดสรรภาระงานกับทรัพยากรแบ็กเอนด์ ในบทแนะนำ บริการแบ็กเอนด์จะเชื่อมโยงกับ NEG แบบผสม |
Cloud Router |
|
HA-VPN | HA VPN ระหว่างเครือข่าย VPC ของ Google Cloud ในโทโพโลยีนี้ คุณสามารถเชื่อมต่อเครือข่าย Google Cloud VPC 2 เครือข่ายโดยใช้เกตเวย์ VPN ความพร้อมใช้งานสูงในแต่ละเครือข่าย เครือข่าย VPC จะอยู่คนละภูมิภาคหรือภูมิภาคเดียวกันก็ได้ |
Cloud NAT | ใช้โดย VPC บนเครื่องเดโมสำหรับการส่งออกไปยังอินเทอร์เน็ต |
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]
zone=[YOUR-ZONE]
echo $project
echo $region
เปิดใช้บริการที่จำเป็นทั้งหมด
gcloud services enable compute.googleapis.com
7. สร้างเครือข่าย VPC ของผู้ผลิต
เครือข่าย VPC
ใน Cloud Shell ให้ทําดังนี้
gcloud compute networks create looker-psc-demo --subnet-mode custom
สร้างซับเน็ต
ระบบจะเชื่อมโยงซับเน็ต PSC กับไฟล์แนบบริการ PSC เพื่อวัตถุประสงค์ในการเปลี่ยนค่าที่อยู่เครือข่าย
สร้างซับเน็ต NAT ของ PSC ใน Cloud Shell โดยทำดังนี้
gcloud compute networks subnets create producer-psc-nat-subnet --network looker-psc-demo --range 172.16.10.0/28 --region $region --purpose=PRIVATE_SERVICE_CONNECT
สร้างซับเน็ตกฎการส่งต่อของผู้ผลิตใน Cloud Shell โดยทำดังนี้
gcloud compute networks subnets create producer-psc-fr-subnet --network looker-psc-demo --range 172.16.20.0/28 --region $region --enable-private-ip-google-access
สร้างซับเน็ตเฉพาะพร็อกซีระดับภูมิภาคของผู้ผลิตใน Cloud Shell โดยทำดังนี้
gcloud compute networks subnets create $region-proxy-only-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$region \
--network=looker-psc-demo \
--range=10.10.10.0/24
สำรองที่อยู่ IP ของตัวจัดสรรภาระงาน
จองที่อยู่ IP ภายในสำหรับตัวจัดสรรภาระงานใน Cloud Shell โดยทำดังนี้
gcloud compute addresses create hybrid-neg-lb-ip \
--region=$region \
--subnet=producer-psc-fr-subnet
ดูที่อยู่ IP ที่สงวนไว้ภายใน Cloud Shell
gcloud compute addresses describe hybrid-neg-lb-ip \
--region=$region | grep -i address:
ตัวอย่างเอาต์พุต
gcloud compute addresses describe hybrid-neg-lb-ip --region=$region | grep -i address:
address: 172.16.20.2
ตั้งค่า NEG แบบผสม
สร้าง NEG แบบผสม และตั้งค่า –network-endpoint-type เป็น NON_GCP_PRIVATE_IP_PORT
สร้าง NEG แบบผสมใน Cloud Shell เพื่อใช้เข้าถึงฐานข้อมูลในระบบภายใน โดยทำดังนี้
gcloud compute network-endpoint-groups create on-prem-hybrid-neg \
--network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
--network=looker-psc-demo \
--zone=$zone
ใน Cloud Shell ให้อัปเดต NEG แบบผสมด้วย IP:Port ของฐานข้อมูลในเครื่อง ซึ่งก็คือ 192.168.10.4 และพอร์ต 5432 ที่สร้างขึ้นในขั้นตอนต่อๆ ไปในบทแนะนำ
gcloud compute network-endpoint-groups update on-prem-hybrid-neg \
--add-endpoint=ip=192.168.10.4,port=5432 \
--zone=$zone
สร้างการตรวจสอบประสิทธิภาพการทำงานระดับภูมิภาค
ใน Cloud Shell ให้สร้างการตรวจสอบประสิทธิภาพการทำงานที่ตรวจสอบพอร์ตฐานข้อมูลในระบบ 5432 โดยทำดังนี้
gcloud compute health-checks create tcp on-prem-5432-healthcheck \
--region=$region \
--port=5432
สร้างนโยบายไฟร์วอลล์ของเครือข่ายและกฎไฟร์วอลล์
ใน Cloud Shell ให้ทําดังนี้
gcloud compute network-firewall-policies create looker-psc-demo-policy --global
gcloud compute network-firewall-policies associations create --firewall-policy looker-psc-demo-policy --network looker-psc-demo --name looker-psc-demo --global-firewall-policy
กฎไฟร์วอลล์ต่อไปนี้อนุญาตให้การรับส่งข้อมูลจากช่วงซับเน็ต NAT ของ PSC ไปยังอินสแตนซ์ทั้งหมดในเครือข่าย
ใน Cloud Shell ให้ทําดังนี้
gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy looker-psc-demo-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 172.16.10.0/28 --global-firewall-policy --layer4-configs=tcp
8. สร้างบริการของผู้ผลิต
สร้างคอมโพเนนต์ตัวจัดสรรภาระงาน
สร้างบริการแบ็กเอนด์ใน Cloud Shell โดยทำดังนี้
gcloud compute backend-services create producer-backend-svc --region=$region --load-balancing-scheme=INTERNAL_MANAGED --protocol=TCP --region=$region --health-checks=on-prem-5432-healthcheck --health-checks-region=$region
ใน Cloud Shell ให้เพิ่มแบ็กเอนด์ NEG แบบผสมลงในบริการแบ็กเอนด์ โดยทำดังนี้
gcloud compute backend-services add-backend producer-backend-svc --network-endpoint-group=on-prem-hybrid-neg --network-endpoint-group-zone=$zone --balancing-mode=CONNECTION --max-connections=100 --region=$region
ใน Cloud Shell ให้สร้างพร็อกซี TCP เป้าหมายเพื่อกำหนดเส้นทางคำขอไปยังบริการแบ็กเอนด์ โดยทำดังนี้
gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
--backend-service=producer-backend-svc \
--region=$region
สร้างกฎการส่งต่อ (ตัวจัดสรรภาระงานพร็อกซี TCP ภายใน) ในไวยากรณ์ต่อไปนี้
ใน Cloud Shell ให้ทําดังนี้
gcloud compute forwarding-rules create producer-hybrid-neg-fr \
--load-balancing-scheme=INTERNAL_MANAGED \
--network-tier=PREMIUM \
--network=looker-psc-demo \
--subnet=producer-psc-fr-subnet \
--address=hybrid-neg-lb-ip \
--target-tcp-proxy=producer-lb-tcp-proxy \
--target-tcp-proxy-region=$region \
--region=$region \
--ports=5432
สร้างไฟล์แนบของบริการ
สร้างไฟล์แนบบริการ onpremdatabase1-svc-attachment ใน Cloud Shell ดังนี้
gcloud compute service-attachments create onpremdatabase1-svc-attachment --region=$region --producer-forwarding-rule=producer-hybrid-neg-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-psc-nat-subnet
ถัดไป ให้บันทึกไฟล์แนบบริการที่แสดงใน URI ของ selfLink ที่ขึ้นต้นด้วยโปรเจ็กต์เพื่อกำหนดค่าปลายทาง PSC ใน Looker
selfLink: projects/<your-project-id>/regions/<your-region>/serviceAttachments/onpremdatabase1-svc-attachment
ใน Cloud Shell ให้ทําดังนี้
gcloud compute service-attachments describe onpremdatabase1-svc-attachment --region=$region
ตัวอย่างผลลัพธ์ที่คาดหวัง
connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-09-01T16:07:51.600-07:00'
description: ''
enableProxyProtocol: false
fingerprint: cFt9rERR1iE=
id: '2549689544315850024'
kind: compute#serviceAttachment
name: onpremdatabase1-svc-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
high: '19348441121424360'
low: '2549689544315850024'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/onpremdatabase1-svc-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-hybrid-neg-fr
ใน Cloud Console ให้ไปที่
บริการเครือข่าย → Private Service Connect → บริการที่เผยแพร่
9. สร้างการเชื่อมต่อปลายทาง PSC ใน Looker
ในส่วนต่อไปนี้ คุณจะเชื่อมโยงไฟล์แนบบริการของผู้ผลิตกับ PSC ของ Looker Core ผ่านการใช้ Flag –psc-service-attachment ใน Cloud Shell สําหรับโดเมนเดียว
ใน Cloud Shell ให้สร้างการเชื่อมโยง psc โดยอัปเดตพารามิเตอร์ต่อไปนี้ให้ตรงกับสภาพแวดล้อมของคุณ
- INSTANCE_NAME: ชื่ออินสแตนซ์ Looker (Google Cloud Core)
- DOMAIN_1: onprem.database1.com
- SERVICE_ATTACHMENT_1: URI ที่บันทึกไว้เมื่อสร้างไฟล์แนบบริการ onpremdatabase1-svc-attachment
- ภูมิภาค: ภูมิภาคที่โฮสต์อินสแตนซ์ Looker (Google Cloud Core)
ใน Cloud Shell ให้ทําดังนี้
gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION
ตัวอย่าง
gcloud looker instances update looker-psc-instance --psc-service-attachment domain=onprem.database1.com,attachment=projects/$project/regions/$region/serviceAttachments/onpremdatabase1-svc-attachment --region=$region
ใน Cloud Shell ให้ตรวจสอบว่า connectionStatus ของ serviceAttachments เป็น "ACCEPTED" แล้วอัปเดตด้วยชื่ออินสแตนซ์ PSC ของ Looker
gcloud looker instances describe [INSTANCE_NAME] --region=$region --format=json
ตัวอย่าง
gcloud looker instances describe looker-psc-instance --region=$region --format=json
ตัวอย่าง
{
"adminSettings": {},
"createTime": "2024-08-23T00:00:45.339063195Z",
"customDomain": {
"domain": "looker.cosmopup.com",
"state": "AVAILABLE"
},
"encryptionConfig": {},
"lookerVersion": "24.14.18",
"name": "projects/$project/locations/$region/instances/looker-psc-instance",
"platformEdition": "LOOKER_CORE_ENTERPRISE_ANNUAL",
"pscConfig": {
"allowedVpcs": [
"projects/$project/global/networks/looker-psc-demo",
"projects/$project/global/networks/looker-shared-vpc"
],
"lookerServiceAttachmentUri": "projects/t7ec792caf2a609d1-tp/regions/$region/serviceAttachments/looker-psc-f51982e2-ac0d-48b1-91bb-88656971c183",
"serviceAttachments": [
{
"connectionStatus": "ACCEPTED",
"localFqdn": "onprem.database1.com",
"targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/onpremdatabase1-svc-attachment"
}
]
},
"pscEnabled": true,
"state": "ACTIVE",
"updateTime": "2024-09-01T23:15:07.426372901Z"
}
ตรวจสอบปลายทาง PSC ใน Cloud Console
คุณสามารถตรวจสอบการเชื่อมต่อ PSC จาก Cloud Console
ใน Cloud Console ให้ไปที่
Looker → อินสแตนซ์ Looker → รายละเอียด
สร้างเครือข่าย VPC ในองค์กร
เครือข่าย VPC
ใน Cloud Shell ให้ทําดังนี้
gcloud compute networks create on-prem-demo --project=$project --subnet-mode=custom
สร้างซับเน็ตฐานข้อมูล Postgresql
ใน Cloud Shell ให้ทําดังนี้
gcloud compute networks subnets create database-subnet --project=$project --range=192.168.10.0/28 --network=on-prem-demo --region=$region
ใน Cloud Shell ให้สำรองที่อยู่ IPv4 ภายในที่ใช้สำหรับ onprem.database1.com, 192.168.10.4 ดังนี้
gcloud compute addresses create on-prem-database1-ip --region=$region --subnet=database-subnet --addresses 192.168.10.4
สร้าง Cloud Router สำหรับ VPC บนระบบภายใน
ระบบจะใช้ Cloud NAT ในบทแนะนำสำหรับการติดตั้งแพ็กเกจซอฟต์แวร์เนื่องจากอินสแตนซ์ VM ไม่มีที่อยู่ IP ภายนอก
สร้าง Cloud Router ที่ใช้ใน Cloud NAT และ HA-VPN ใน Cloud Shell โดยทำดังนี้
gcloud compute routers create on-prem-cr \
--region=$region \
--network=on-prem-demo \
--asn=65002
สร้างเกตเวย์ NAT ใน Cloud Shell โดยทำดังนี้
gcloud compute routers nats create on-prem-nat --router=on-prem-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region $region
สร้างอินสแตนซ์การทดสอบฐานข้อมูล
สร้างอินสแตนซ์ฐานข้อมูล postgres ที่จะใช้ในการทดสอบและตรวจสอบการเชื่อมต่อกับ Looker
สร้างอินสแตนซ์ใน Cloud Shell โดยทำดังนี้
gcloud compute instances create postgres-database \
--project=$project \
--zone=$zone \
--machine-type=e2-medium \
--subnet=database-subnet \
--no-address \
--private-network-ip 192.168.10.4 \
--image-family debian-12 \
--image-project debian-cloud \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt -y install postgresql postgresql-client postgresql-contrib -y"
สร้างนโยบายไฟร์วอลล์ของเครือข่ายและกฎไฟร์วอลล์
ใน Cloud Shell ให้ทําดังนี้
gcloud compute network-firewall-policies create on-prem-demo-policy --global
gcloud compute network-firewall-policies associations create --firewall-policy on-prem-demo-policy --network on-prem-demo --name on-prem-demo --global-firewall-policy
หากต้องการอนุญาตให้ IAP เชื่อมต่อกับอินสแตนซ์ VM ให้สร้างกฎไฟร์วอลล์ที่มีลักษณะดังนี้
- มีผลกับอินสแตนซ์ VM ทั้งหมดที่คุณต้องการเข้าถึงโดยใช้ IAP
- อนุญาตการรับส่งข้อมูลขาเข้าจากช่วง IP 35.235.240.0/20 ช่วงนี้มีที่อยู่ IP ทั้งหมดที่ IAP ใช้สำหรับการส่งต่อ TCP
ใน Cloud Shell ให้ทําดังนี้
gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy on-prem-demo-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22 --global-firewall-policy
กฎไฟร์วอลล์ต่อไปนี้อนุญาตให้การรับส่งข้อมูลจากช่วงซับเน็ตเฉพาะพร็อกซีไปยังอินสแตนซ์ทั้งหมดในเครือข่าย
ใน Cloud Shell ให้ทําดังนี้
gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy on-prem-demo-policy --description "allow traffic from proxy only subnet" --direction INGRESS --src-ip-ranges 10.10.10.0/24 --global-firewall-policy --layer4-configs=tcp
10. การเชื่อมต่อแบบผสม
ในส่วนต่อไปนี้ คุณจะได้สร้าง Cloud Router ซึ่งช่วยให้คุณแลกเปลี่ยนเส้นทางระหว่าง Virtual Private Cloud (VPC) กับเครือข่ายเพียร์แบบไดนามิกได้โดยใช้ Border Gateway Protocol (BGP)
เราเตอร์ Cloud สามารถตั้งค่าเซสชัน BGP ผ่านอุโมงค์ Cloud VPN เพื่อเชื่อมต่อเครือข่าย โดยจะเรียนรู้ช่วงที่อยู่ IP ใหม่ของซับเน็ตโดยอัตโนมัติและประกาศให้เครือข่ายเพียร์ทราบ
ในขั้นตอนต่อไปนี้ คุณจะใช้ HA VPN ระหว่าง VPC looker-psc-demo กับ VPC on-prem-demo เพื่อสาธิตการเชื่อมต่อ NEG แบบผสมกับ onprem.database1.com
สร้าง HA VPN GW สําหรับ looker-psc-demo
เมื่อสร้างเกตเวย์แต่ละรายการ ระบบจะจัดสรรที่อยู่ IPv4 ภายนอก 2 รายการโดยอัตโนมัติ โดยจัดสรร 1 รายการสำหรับอินเทอร์เฟซเกตเวย์แต่ละรายการ
สร้าง HA VPN GW ใน Cloud Shell โดยทำดังนี้
gcloud compute vpn-gateways create looker-psc-demo-vpn-gw \
--network=looker-psc-demo \
--region=$region
สร้าง HA VPN GW สําหรับเดโมในเครื่อง
เมื่อสร้างเกตเวย์แต่ละรายการ ระบบจะจัดสรรที่อยู่ IPv4 ภายนอก 2 รายการโดยอัตโนมัติ โดยจัดสรร 1 รายการสำหรับอินเทอร์เฟซเกตเวย์แต่ละรายการ
สร้าง HA VPN GW ใน Cloud Shell โดยทำดังนี้
gcloud compute vpn-gateways create on-prem-vpn-gw \
--network=on-prem-demo\
--region=$region
ตรวจสอบการสร้าง GW VPN ความพร้อมใช้งานสูง
ใช้คอนโซลเพื่อไปที่การเชื่อมต่อแบบผสมผสาน → VPN → เกตเวย์ Cloud VPN
สร้าง Cloud Router สำหรับ looker-psc-demo
สร้าง Cloud Router ใน Cloud Shell โดยทำดังนี้
gcloud compute routers create looker-psc-demo-cr \
--region=$region \
--network=looker-psc-demo\
--asn=65001
สร้างอุโมงค์ข้อมูล VPN สําหรับ looker-psc-demo
คุณจะต้องสร้างอุโมงค์ข้อมูล VPN 2 รายการในเกตเวย์ VPN HA แต่ละรายการ
สร้างอุโมงค์ข้อมูล VPN0
สร้าง tunnel0 ใน Cloud Shell โดยทำดังนี้
gcloud compute vpn-tunnels create looker-psc-demo-tunnel0 \
--peer-gcp-gateway on-prem-vpn-gw \
--region $region \
--ike-version 2 \
--shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
--router looker-psc-demo-cr \
--vpn-gateway looker-psc-demo-vpn-gw \
--interface 0
สร้างอุโมงค์ข้อมูล VPN1
สร้าง tunnel1 ใน Cloud Shell โดยทำดังนี้
gcloud compute vpn-tunnels create looker-psc-demo-tunnel1 \
--peer-gcp-gateway on-prem-vpn-gw \
--region $region \
--ike-version 2 \
--shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
--router looker-psc-demo-cr \
--vpn-gateway looker-psc-demo-vpn-gw \
--interface 1
สร้างอุโมงค์ข้อมูล VPN สําหรับการสาธิตในองค์กร
คุณจะต้องสร้างอุโมงค์ข้อมูล VPN 2 รายการในเกตเวย์ VPN HA แต่ละรายการ
สร้างอุโมงค์ข้อมูล VPN0
สร้าง tunnel0 ใน Cloud Shell โดยทำดังนี้
gcloud compute vpn-tunnels create on-prem-tunnel0 \
--peer-gcp-gateway looker-psc-demo-vpn-gw \
--region $region \
--ike-version 2 \
--shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
--router on-prem-cr \
--vpn-gateway on-prem-vpn-gw \
--interface 0
สร้างอุโมงค์ข้อมูล VPN1
สร้าง tunnel1 ใน Cloud Shell โดยทำดังนี้
gcloud compute vpn-tunnels create on-prem-tunnel1 \
--peer-gcp-gateway looker-psc-demo-vpn-gw \
--region $region \
--ike-version 2 \
--shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
--router on-prem-cr \
--vpn-gateway on-prem-vpn-gw \
--interface 1
ตรวจสอบการสร้างอุโมงค์ข้อมูล VPN
ใช้คอนโซลเพื่อไปที่การเชื่อมต่อแบบผสมผสาน → VPN → อุโมงค์ข้อมูล Cloud VPN
11. สร้างเพื่อนบ้าน BGP
สร้างอินเทอร์เฟซ BGP และการเพียร์สําหรับ looker-psc-demo
สร้างอินเทอร์เฟซ BGP ใน Cloud Shell โดยทำดังนี้
gcloud compute routers add-interface looker-psc-demo-cr \
--interface-name if-tunnel0-to-onprem \
--ip-address 169.254.1.1 \
--mask-length 30 \
--vpn-tunnel looker-psc-demo-tunnel0 \
--region $region
สร้าง Peer BGP ใน Cloud Shell โดยทำดังนี้
gcloud compute routers add-bgp-peer looker-psc-demo-cr \
--peer-name bgp-on-premises-tunnel0 \
--interface if-tunnel1-to-onprem \
--peer-ip-address 169.254.1.2 \
--peer-asn 65002 \
--region $region
สร้างอินเทอร์เฟซ BGP ใน Cloud Shell โดยทำดังนี้
gcloud compute routers add-interface looker-psc-demo-cr \
--interface-name if-tunnel1-to-onprem \
--ip-address 169.254.2.1 \
--mask-length 30 \
--vpn-tunnel looker-psc-demo-tunnel1 \
--region $region
สร้าง Peer BGP ใน Cloud Shell โดยทำดังนี้
gcloud compute routers add-bgp-peer looker-psc-demo-cr \
--peer-name bgp-on-premises-tunnel1 \
--interface if-tunnel2-to-onprem \
--peer-ip-address 169.254.2.2 \
--peer-asn 65002 \
--region $region
สร้างอินเทอร์เฟซ BGP และการเพียร์สําหรับเดโมในองค์กร
สร้างอินเทอร์เฟซ BGP ใน Cloud Shell โดยทำดังนี้
gcloud compute routers add-interface on-prem-cr \
--interface-name if-tunnel0-to-looker-psc-demo \
--ip-address 169.254.1.2 \
--mask-length 30 \
--vpn-tunnel on-prem-tunnel0 \
--region $region
สร้าง Peer BGP ใน Cloud Shell โดยทำดังนี้
gcloud compute routers add-bgp-peer on-prem-cr \
--peer-name bgp-looker-psc-demo-tunnel0 \
--interface if-tunnel1-to-looker-psc-demo \
--peer-ip-address 169.254.1.1 \
--peer-asn 65001 \
--region $region
สร้างอินเทอร์เฟซ BGP ใน Cloud Shell โดยทำดังนี้
gcloud compute routers add-interface on-prem-cr \
--interface-name if-tunnel1-to-looker-psc-demo \
--ip-address 169.254.2.2 \
--mask-length 30 \
--vpn-tunnel on-prem-tunnel1 \
--region $region
สร้าง Peer BGP ใน Cloud Shell โดยทำดังนี้
gcloud compute routers add-bgp-peer on-prem-cr \
--peer-name bgp-looker-psc-demo-tunnel1\
--interface if-tunnel2-to-looker-psc-demo \
--peer-ip-address 169.254.2.1 \
--peer-asn 65001 \
--region $region
ไปที่การเชื่อมต่อแบบไฮบริด → VPN เพื่อดูรายละเอียดอุโมงค์ข้อมูล VPN
ตรวจสอบเส้นทางที่ looker-psc-demo เรียนรู้ผ่าน HA VPN
เมื่อสร้างอุโมงค์ HA VPN และเซสชัน BGP แล้ว ลักษณะการทำงานเริ่มต้นของ Cloud Router คือการโฆษณาเส้นทางซับเน็ต ดูเส้นทางที่เรียนรู้ของ looker-psc-demo
ใช้คอนโซลเพื่อไปที่ เครือข่าย VPC → เครือข่าย VPC → looker-psc-demo → ROUTES → REGION → VIEW
สังเกตว่า looker-psc-demo ได้เรียนรู้ซับเน็ตฐานข้อมูล 192.168.10.0/28 จาก VPC on-prem-demo
ตรวจสอบว่า VPC บนเครื่องเดโมในองค์กรได้เรียนรู้เส้นทางผ่าน HA VPN
เนื่องจากลักษณะการทำงานเริ่มต้นของ Cloud Router คือการโฆษณาซับเน็ตทั้งหมด ระบบจึงโฆษณาเฉพาะซับเน็ตของพร็อกซีผ่าน BGP NEG แบบผสมจะใช้ซับเน็ตของพร็อกซี่เท่านั้นเป็นที่อยู่ต้นทางเมื่อสื่อสารกับเซิร์ฟเวอร์ onprem.database1.com
สังเกตว่า on-prem-demo ได้เรียนรู้ซับเน็ตเฉพาะพร็อกซี 10.10.10.0/24 จาก looker-psc-demo
ใช้คอนโซลเพื่อไปที่เครือข่าย VPC → เครือข่าย VPC → on-prem-demo → ROUTES → REGION → VIEW
12. การสร้างฐานข้อมูล postgres ของ Looker
ในส่วนต่อไปนี้ คุณจะใช้ SSH เข้าสู่ VM ฐานข้อมูล postgres โดยใช้ Cloud Shell
ใน Cloud Shell ให้ใช้ SSH ไปยังอินสแตนซ์ postgres-database**:**
gcloud compute ssh --zone "$zone" "postgres-database" --project "$project"
ในระบบปฏิบัติการ ให้ระบุและจดที่อยู่ IP (ens4) ของอินสแตนซ์ postgres-database ไว้
ip a
ตัวอย่าง
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
link/ether 42:01:c0:a8:0a:04 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 192.168.10.4/32 metric 100 scope global dynamic ens4
valid_lft 66779sec preferred_lft 66779sec
inet6 fe80::4001:c0ff:fea8:a04/64 scope link
valid_lft forever preferred_lft forever
เข้าสู่ระบบ postgresql ในระบบปฏิบัติการโดยทำดังนี้
sudo -u postgres psql postgres
ในระบบปฏิบัติการ ให้ป้อนข้อความแจ้งรหัสผ่าน
\password postgres
ในระบบปฏิบัติการ ให้ตั้งรหัสผ่านเป็น postgres (ป้อนรหัสผ่านเดียวกัน 2 ครั้ง)
postgres
ตัวอย่าง
user@postgres-database:~$ sudo -u postgres psql postgres
\password postgres
psql (13.11 (Debian 13.11-0+deb11u1))
Type "help" for help.
postgres=# \password postgres
Enter new password for user "postgres":
Enter it again:
ออกจาก postgres ในระบบปฏิบัติการโดยทำดังนี้
\q
ตัวอย่าง
postgres=# \q
user@postgres-database:~$
ในส่วนต่อไปนี้ คุณจะแทรก IP ของอินสแตนซ์ฐานข้อมูล postgres (192.168.10.4) และซับเน็ตสำหรับพร็อกซีเท่านั้น (10.10.10.0/24) ในไฟล์ pg_hba.conf ในส่วนการเชื่อมต่อภายใน IPv4
sudo nano /etc/postgresql/15/main/pg_hba.conf
ภาพหน้าจอด้านล่างคือการอัปเดตที่เสร็จสมบูรณ์แล้ว
ในส่วนต่อไปนี้ ให้ยกเลิกการคอมเมนต์ postgresql.conf เพื่อฟังที่อยู่ IP ทั้งหมด "*" ตามภาพหน้าจอด้านล่าง
sudo nano /etc/postgresql/15/main/postgresql.conf
ก่อน:
หลัง:
รีสตาร์ทบริการ postgresql ในระบบปฏิบัติการโดยทำดังนี้
sudo service postgresql restart
ในระบบปฏิบัติการ ให้ตรวจสอบว่าสถานะ postgresql เป็น "ใช้งานอยู่"
sudo service postgresql status
ตัวอย่าง
ในระบบปฏิบัติการ ให้ตรวจสอบว่าสถานะ postgresql เป็น "ใช้งานอยู่"
user@postgres-database:/$ sudo service postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled)
Active: active (exited) since Mon 2024-09-02 12:10:10 UTC; 1min 46s ago
Process: 20486 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 20486 (code=exited, status=0/SUCCESS)
CPU: 2ms
Sep 02 12:10:10 postgres-database systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Sep 02 12:10:10 postgres-database systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.
13. สร้างฐานข้อมูล postgres
ในส่วนต่อไปนี้ คุณจะต้องสร้างฐานข้อมูล postgres ชื่อ postgres_looker และสคีมา looker_schema ที่ใช้ตรวจสอบการเชื่อมต่อ Looker กับระบบในองค์กร
เข้าสู่ระบบ postgres ในระบบปฏิบัติการโดยทำดังนี้
sudo -u postgres psql postgres
สร้างฐานข้อมูลในระบบปฏิบัติการโดยทำดังนี้
create database postgres_looker;
แสดงรายการฐานข้อมูลภายในระบบปฏิบัติการ
\l
สร้างผู้ใช้ postgres_looker ด้วยรหัสผ่าน postgreslooker ในระบบปฏิบัติการ โดยทำดังนี้
create user postgres_looker with password 'postgreslooker';
เชื่อมต่อกับฐานข้อมูลในระบบปฏิบัติการโดยทำดังนี้
\c postgres_looker;
สร้างสคีมา looker-schema ในระบบปฏิบัติการ แล้วออกจากพรอมต์ Cloud Shell
create schema looker_schema;
create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
exit
Exit from the OS, returning you to cloud shell:
\q
ตัวอย่าง
user@postgres-database:/$ sudo -u postgres psql postgres
psql (15.8 (Debian 15.8-0+deb12u1))
Type "help" for help.
postgres=# create database postgres_looker;
CREATE DATABASE
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
-----------------+----------+----------+---------+---------+------------+-----------------+-----------------------
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc |
postgres_looker | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
(4 rows)
postgres=# create user postgres_looker with password 'postgreslooker';
CREATE ROLE
postgres=# \c postgres_looker;
You are now connected to database "postgres_looker" as user "postgres".
postgres_looker=# create schema looker_schema;
create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
exit
CREATE SCHEMA
CREATE TABLE
postgres_looker-# \q
14. ผสานรวม Looker กับ postgres-database ของ PostgreSQL
ในส่วนต่อไปนี้ คุณจะใช้ Looker Console เพื่อสร้างการเชื่อมต่อฐานข้อมูลกับอินสแตนซ์ฐานข้อมูล postgres ในองค์กร
ไปที่ผู้ดูแลระบบ → ฐานข้อมูล → การเชื่อมต่อ → เลือกเพิ่มการเชื่อมต่อ
กรอกรายละเอียดการเชื่อมต่อตามภาพหน้าจอด้านล่าง แล้วเลือกเชื่อมต่อ
กำหนดค่าการเชื่อมต่อแล้ว
15. ตรวจสอบการเชื่อมต่อ Looker
ในส่วนต่อไปนี้ คุณจะได้เรียนรู้วิธีตรวจสอบการเชื่อมต่อ Looker กับฐานข้อมูล postgres ใน on-prem-vpc โดยใช้การดำเนินการ "ทดสอบ" ของ Looker และ TCPDUMP
จาก Cloud Shell ให้เข้าสู่ระบบ postgres-database หากเซสชันหมดเวลา
ใน Cloud Shell ให้ทําดังนี้
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
zone=[YOUR-ZONE]
echo $project
echo $region
gcloud compute ssh --zone "$zone" "postgres-database" --project "$project"
จากระบบปฏิบัติการ ให้สร้างตัวกรอง TCPDUMP ที่มีซับเน็ตเฉพาะพร็อกซี 10.10.10.0/24
sudo tcpdump -i any net 10.10.10.0/24 -nn
ไปที่การเชื่อมต่อข้อมูล ผู้ดูแลระบบ → ฐานข้อมูล → การเชื่อมต่อ → postgres-database → ทดสอบ
เมื่อเลือก "ทดสอบ" แล้ว Looker จะเชื่อมต่อกับฐานข้อมูล postgres ตามที่ระบุไว้ด้านล่าง
ล้างข้อมูล
ลบคอมโพเนนต์ของห้องทดลองจากเทอร์มินัล Cloud Shell เครื่องเดียว
gcloud compute service-attachments delete onpremdatabase1-svc-attachment --region=$region -q
gcloud compute forwarding-rules delete producer-hybrid-neg-fr --region=$region -q
gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q
gcloud compute backend-services delete producer-backend-svc --region=$region -q
gcloud compute network-firewall-policies rules delete 2001 --firewall-policy looker-psc-demo-policy --global-firewall-policy -q
gcloud compute network-firewall-policies associations delete --firewall-policy=looker-psc-demo-policy --name=looker-psc-demo --global-firewall-policy -q
gcloud compute network-firewall-policies delete looker-psc-demo-policy --global -q
gcloud compute routers nats delete on-prem-nat --router=on-prem-cr --router-region=$region -q
gcloud compute network-endpoint-groups delete on-prem-hybrid-neg --zone=$zone -q
gcloud compute addresses delete hybrid-neg-lb-ip --region=$region -q
gcloud compute vpn-tunnels delete looker-psc-demo-tunnel0 looker-psc-demo-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=$region -q
gcloud compute vpn-gateways delete looker-psc-demo-vpn-gw on-prem-vpn-gw --region=$region -q
gcloud compute routers delete looker-psc-demo-cr on-prem-cr --region=$region -q
gcloud compute instances delete postgres-database --zone=$zone -q
gcloud compute addresses delete on-prem-database1-ip --region=$region -q
gcloud compute networks subnets delete database-subnet --region=$region -q
gcloud compute network-firewall-policies rules delete 2001 --firewall-policy on-prem-demo-policy --global-firewall-policy -q
gcloud compute network-firewall-policies rules delete 1000 --firewall-policy on-prem-demo-policy --global-firewall-policy -q
gcloud compute network-firewall-policies associations delete --firewall-policy=on-prem-demo-policy --name=on-prem-demo --global-firewall-policy -q
gcloud compute networks subnets delete $region-proxy-only-subnet --region=$region -q
gcloud compute networks subnets delete producer-psc-nat-subnet --region=$region -q
gcloud compute networks subnets delete producer-psc-fr-subnet --region=$region -q
gcloud compute networks delete on-prem-demo -q
gcloud compute networks delete looker-psc-demo -q
16. ขอแสดงความยินดี
ยินดีด้วย คุณได้กําหนดค่าและตรวจสอบการเชื่อมต่อกับฐานข้อมูลในเครื่องผ่าน HA-VPN โดยใช้ Looker Console ที่ทำงานด้วย Private Service Connect เรียบร้อยแล้ว
คุณได้สร้างโครงสร้างพื้นฐานของผู้ผลิต เรียนรู้วิธีสร้าง NEG แบบผสม บริการของผู้ผลิต และปลายทาง PSC ของ Looker ที่อนุญาตให้เชื่อมต่อกับบริการของผู้ผลิต
Cosmopup คิดว่า Codelab เจ๋งสุดๆ
ขั้นตอนถัดไป
ลองดู Codelab เหล่านี้...
- การใช้ Private Service Connect เพื่อเผยแพร่และใช้บริการ
- เชื่อมต่อกับบริการในองค์กรผ่านเครือข่ายแบบผสมโดยใช้ Private Service Connect และตัวจัดสรรภาระงานพร็อกซี TCP ภายใน
- เข้าถึง Codelab ของ Private Service Connect ที่เผยแพร่ทั้งหมด