1. บทนำ
Private Service Connect ช่วยให้ผู้ผลิตบริการสามารถเสนอการเข้าถึงบริการแบบส่วนตัวแก่ผู้ใช้บริการ Private Service Connect มีประโยชน์ดังนี้
- เครือข่าย VPC ของผู้ให้บริการสามารถรองรับผู้ใช้บริการได้มากกว่า 1 ราย
- ผู้ใช้แต่ละรายจะเชื่อมต่อกับที่อยู่ IP ภายในที่ตนกำหนด Private Service Connect จะทำการแปลที่อยู่เครือข่าย (NAT) เพื่อกำหนดเส้นทางคำขอไปยังผู้ให้บริการ

รูปที่ 2 Private Service Connect ใช้ปลายทางและไฟล์แนบบริการเพื่อให้ผู้ใช้บริการส่งการรับส่งข้อมูลจากเครือข่าย VPC ของผู้ใช้ไปยังบริการในเครือข่าย VPC ของผู้ให้บริการ (คลิกเพื่อขยาย)
สิ่งที่คุณจะได้เรียนรู้
- ประโยชน์ของ Private Service Connect
- แนวคิดหลักสำหรับผู้ใช้บริการ
- แนวคิดหลักสำหรับผู้ให้บริการ
- สร้างสภาพแวดล้อมของผู้ผลิต
- แสดงบริการ (สภาพแวดล้อมของผู้ผลิต) ผ่านไฟล์แนบบริการ
- สร้างสภาพแวดล้อมสำหรับผู้บริโภค
- สร้างกฎการส่งต่อในเครือข่ายของผู้บริโภค
- ตรวจสอบสิทธิ์เข้าถึงของผู้บริโภค
- เปิดใช้การควบคุมการเข้าถึงนโยบาย
- ใช้กฎไฟร์วอลล์ขาออกเพื่อบล็อกการเข้าถึงกฎการส่งต่อสำหรับผู้ใช้ทั่วไป
สิ่งที่คุณต้องมี
- ความรู้เกี่ยวกับการติดตั้งใช้งานคลัสเตอร์และบริการ GKE
- ความรู้เกี่ยวกับตัวจัดสรรภาระงานภายใน
- ความสามารถในการสร้าง VPC ใน 2 โปรเจ็กต์
- ความสามารถในการสร้างคลัสเตอร์ GKE
2. ประโยชน์ของ Private Service Connect
เมื่อใช้ PSC คุณจะได้รับประโยชน์หลายประการเมื่อเทียบกับการใช้การเพียร์ VPC ดังนี้
ควบคุมพื้นที่ IP ส่วนตัวได้ดียิ่งขึ้น
- ในฐานะผู้ใช้บริการ คุณสามารถควบคุมที่อยู่ IP ส่วนตัวที่ใช้เชื่อมต่อกับบริการที่มีการจัดการซึ่งคุณต้องการเข้าถึงได้
- ในฐานะผู้ใช้บริการ คุณไม่จำเป็นต้องกังวลเรื่องการจองช่วงที่อยู่ IP ส่วนตัวสำหรับบริการแบ็กเอนด์ที่ใช้ใน VPC คุณเพียงแค่ต้องเลือกที่อยู่ IP จากซับเน็ตของคุณเองเพื่อเชื่อมต่อกับบริการของผู้ผลิต
- ในฐานะผู้ให้บริการ คุณเลือกที่จะใช้โมเดลแบบหลายผู้เช่าได้ ซึ่ง VPC ของคุณจะมีบริการที่ให้บริการ VPC ของผู้ใช้หลายราย ปัญหาผู้บริโภคที่มีช่วงเครือข่ายย่อยที่ทับซ้อนกันจะหมดไป
- ในฐานะผู้ให้บริการ คุณสามารถปรับขนาดบริการให้มีอินสแตนซ์ VM ได้มากเท่าที่ต้องการโดยไม่ต้องติดต่อผู้ใช้เพื่อขอที่อยู่ IP เพิ่มเติม
การรักษาความปลอดภัยและการแยกที่ได้รับการปรับปรุง
- ในฐานะผู้ใช้บริการ คุณเท่านั้นที่เริ่มการสื่อสารกับผู้ผลิตบริการได้ การเชื่อมต่อแบบทิศทางเดียวนี้ช่วยลดความซับซ้อนของการกำหนดค่าไฟร์วอลล์ได้อย่างมาก แต่ก็ช่วยลดความเสี่ยงจากการเข้าชมที่ผิดกฎหมายซึ่งมาจากผู้ผลิตบริการด้วย
- ในฐานะผู้ให้บริการ คุณไม่จำเป็นต้องเปลี่ยนกฎไฟร์วอลล์ตามช่วงซับเน็ตใน VPC ของผู้ใช้บริการ คุณเพียงแค่สร้างกฎไฟร์วอลล์สำหรับช่วงที่อยู่ IP ของ NAT ที่กำหนดค่าไว้สำหรับบริการ
ความสามารถในการปรับขนาดที่ดีขึ้น
- PSC ช่วยให้การออกแบบมีความสามารถในการปรับขนาดสูงด้วยการรองรับผู้บริโภคหลายพันราย และช่วยให้ผู้ให้บริการสามารถนำเสนอบริการแบบหลายผู้เช่าหรือผู้เช่ารายเดียวที่มีความสามารถในการปรับขนาดสูง
- ในฐานะผู้ใช้บริการที่ใช้ Private Service Connect คุณสามารถสร้างทรัพยากรได้ตามที่ต้องการใน VPC ขนาดของสิ่งนี้จะไม่ได้รับผลกระทบจากจำนวนทรัพยากรดังกล่าวที่สร้างขึ้นใน VPC ของผู้ผลิต
3. แนวคิดหลักสำหรับผู้ใช้บริการ
คุณใช้ปลายทาง Private Service Connect เพื่อใช้บริการที่อยู่นอกเครือข่าย VPC ได้ ผู้ใช้บริการสร้างปลายทาง Private Service Connect ที่เชื่อมต่อกับบริการเป้าหมาย
ปลายทาง
คุณใช้ปลายทาง Private Service Connect เพื่อเชื่อมต่อกับบริการเป้าหมาย โดยมีที่อยู่ IP ภายในในเครือข่าย VPC และอิงตามทรัพยากรกฎการส่งต่อ
คุณส่งการรับส่งข้อมูลไปยังปลายทาง ซึ่งจะส่งต่อการรับส่งข้อมูลไปยังเป้าหมายภายนอกเครือข่าย VPC
เป้าหมาย
ปลายทาง Private Service Connect มีเป้าหมาย ซึ่งก็คือบริการที่คุณต้องการเชื่อมต่อ
- ชุด API:
- API ทั้งหมด: Google API ส่วนใหญ่
- VPC-SC: API ที่การควบคุมบริการ VPC รองรับ
- บริการที่เผยแพร่ในเครือข่าย VPC อื่น องค์กรของคุณเองหรือบุคคลที่สามสามารถจัดการบริการนี้ได้
บริการที่เผยแพร่
หากต้องการเชื่อมต่อปลายทางกับบริการของผู้ให้บริการ คุณต้องมีไฟล์แนบบริการสำหรับบริการนั้น URI ของไฟล์แนบบริการมีรูปแบบดังนี้ projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME
4. แนวคิดหลักสำหรับผู้ให้บริการ
หากต้องการทำให้บริการพร้อมให้บริการแก่ผู้บริโภค คุณต้องสร้างซับเน็ตเฉพาะอย่างน้อย 1 รายการเพื่อใช้สำหรับการแปลที่อยู่เครือข่าย (NAT) ของที่อยู่ IP ของผู้บริโภค จากนั้นสร้างการเชื่อมต่อบริการที่อ้างอิงถึงซับเน็ตเหล่านั้น
ซับเน็ต Private Service Connect
หากต้องการเปิดเผยบริการ ผู้ผลิตบริการต้องสร้างซับเน็ตอย่างน้อย 1 รายการที่มีวัตถุประสงค์เป็น Private Service Connect ก่อน
เมื่อมีการส่งคำขอจากเครือข่าย VPC ของผู้ใช้ ระบบจะแปลที่อยู่ IP ต้นทางของผู้ใช้โดยใช้ Source NAT (SNAT) เป็นที่อยู่ IP ที่เลือกจากซับเน็ต Private Service Connect รายการใดรายการหนึ่ง
หากต้องการเก็บข้อมูลที่อยู่ IP ของการเชื่อมต่อผู้บริโภคไว้ โปรดดูการดูข้อมูลการเชื่อมต่อผู้บริโภค
คุณใช้ซับเน็ตเหล่านี้กับทรัพยากร เช่น อินสแตนซ์ VM หรือกฎการส่งต่อ ไม่ได้ ซับเน็ตใช้เพื่อระบุที่อยู่ IP สำหรับ SNAT ของการเชื่อมต่อผู้บริโภคขาเข้าเท่านั้น
ซับเน็ต Private Service Connect ต้องมีที่อยู่ IP อย่างน้อย 1 รายการสำหรับ VM ของผู้ใช้บริการทุกๆ 63 รายการ เพื่อให้ VM ของผู้ใช้บริการแต่ละรายการได้รับการจัดสรร 1,024 ทูเปิลต้นทางสำหรับการแปลที่อยู่เครือข่าย
ขนาดขั้นต่ำสำหรับซับเน็ต Private Service Connect คือ /24
ไฟล์แนบบริการ
ผู้ผลิตบริการจะแสดงบริการผ่านการเชื่อมต่อบริการ
- หากต้องการเปิดเผยบริการ ผู้ผลิตบริการจะสร้างการเชื่อมต่อบริการที่อ้างอิงถึงกฎการส่งต่อของตัวจัดสรรภาระงานของบริการ
- หากต้องการเข้าถึงบริการ ผู้ใช้บริการจะสร้างปลายทางที่อ้างอิงถึงการเชื่อมต่อบริการ
ค่ากำหนดการเชื่อมต่อ
เมื่อสร้างบริการ คุณจะเลือกวิธีทำให้บริการพร้อมใช้งานได้ ซึ่งมี 2 ตัวเลือกดังนี้
- ยอมรับการเชื่อมต่อสำหรับโปรเจ็กต์ทั้งหมดโดยอัตโนมัติ - ผู้ใช้บริการรายใดก็ได้สามารถกำหนดค่าปลายทางและเชื่อมต่อกับบริการได้โดยอัตโนมัติ
- ยอมรับการเชื่อมต่อสำหรับโปรเจ็กต์ที่เลือก - ผู้ใช้บริการกำหนดค่าปลายทางเพื่อเชื่อมต่อกับบริการ และผู้ผลิตบริการยอมรับหรือปฏิเสธคำขอเชื่อมต่อ
ข้อกำหนดและข้อจำกัด
- ข้อจำกัดสำหรับ Private Service Connect มีผลบังคับใช้
- คุณสร้างการเชื่อมต่อบริการได้ใน GKE เวอร์ชัน 1.21.4-gke.300 ขึ้นไป
- คุณไม่สามารถใช้ซับเน็ตเดียวกันในการกำหนดค่าการแนบบริการหลายรายการได้
- คุณต้องสร้างบริการ GKE ที่ใช้ตัวจัดสรรภาระงาน TCP/UDP ภายใน
5. สภาพแวดล้อมการทดสอบ
เครือข่ายผู้บริโภคประกอบด้วยที่อยู่ IP แบบคงที่ซึ่งใช้ในการเริ่มต้นคำขอไปยังผู้ผลิตบริการ นอกเหนือจาก TargetServiceAttachment ที่แมปกับ ServiceAttachment ของผู้ผลิต (บริการที่เผยแพร่)

ตอนนี้เรามาดูเครือข่ายผู้ผลิตกัน โปรดสังเกตว่าเครือข่ายผู้ผลิตไม่มีการแมปกับเครือข่ายผู้บริโภค แต่เครือข่ายผู้ผลิตมี Service Attachment (บริการที่เผยแพร่) ที่ผู้บริโภคใช้สำหรับบริการ การแนบบริการของผู้ผลิตจะแสดงโดย L4 ILB ของ Ingress GKE (บริการที่เผยแพร่) ซึ่งช่วยให้สื่อสารกับพ็อด GKE และแอปพลิเคชันที่เชื่อมโยงได้
ระบบจะใช้ซับเน็ต NAT เมื่อส่งคำขอจากเครือข่าย VPC ของผู้ใช้ ระบบจะแปลที่อยู่ IP ต้นทางของผู้ใช้โดยใช้ Source NAT (SNAT) เป็นที่อยู่ IP ที่เลือกจากซับเน็ต Private Service Connect รายการใดรายการหนึ่ง
คุณใช้ซับเน็ตเหล่านี้กับทรัพยากร เช่น อินสแตนซ์ VM หรือกฎการส่งต่อ ไม่ได้ ซับเน็ตใช้เพื่อระบุที่อยู่ IP สำหรับ SNAT ของการเชื่อมต่อผู้บริโภคขาเข้าเท่านั้น
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับ L4ILB สำหรับ GKE Private Service Connect และรับสิทธิ์เข้าถึงเนื้อหาที่ใช้ในการสร้าง Lab นี้โดยตรง โปรดดู ข้อมูลต่อไปนี้
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



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

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

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดในห้องทดลองนี้ได้โดยใช้เพียงเบราว์เซอร์
6. ก่อนเริ่มต้น
Codelab ต้องใช้ 2 โปรเจ็กต์ แต่ PSC ไม่ได้กำหนดให้ต้องใช้ โปรดทราบว่าการอ้างอิงรองรับโปรเจ็กต์เดียวหรือหลายโปรเจ็กต์
โปรเจ็กต์เดียว - อัปเดตโปรเจ็กต์ให้รองรับเครือข่ายผู้ผลิตและผู้บริโภค
ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME consumerproject=YOUR-PROJECT-NAME echo $prodproject echo $consumerproject
หลายโปรเจ็กต์ - อัปเดตโปรเจ็กต์เพื่อรองรับเครือข่ายผู้ผลิต
ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
โปรดทราบว่าเราใช้รูปแบบรหัสสีต่อไปนี้

7. สร้างเครือข่าย VPC ของผู้ผลิต

เครือข่าย VPC
จาก Cloud Shell
gcloud compute networks create gke-producer-l4-vpc --project=$prodproject --subnet-mode=custom
สร้างซับเน็ตคลัสเตอร์ GKE
จาก Cloud Shell
gcloud compute networks subnets create node-subnet1 --project=$prodproject --range=192.168.10.0/24 --network=gke-producer-l4-vpc --region=us-central1 --secondary-range=pod=10.10.10.0/24,service=10.10.20.0/24 --enable-private-ip-google-access
สร้างคลัสเตอร์ GKE
จาก Cloud Shell
gcloud container clusters create gke-psc-l4 \
--release-channel=rapid \
--enable-ip-alias \
--zone=us-central1-a \
--network gke-producer-l4-vpc \
--num-nodes 1 \
--subnetwork node-subnet1 \
--cluster-secondary-range-name pod \
--services-secondary-range-name service
สร้างซับเน็ตสำหรับ Private Service Connect (ซับเน็ต NAT)
คุณต้องสร้างซับเน็ตเฉพาะอย่างน้อย 1 รายการเพื่อใช้กับ Private Service Connect หากใช้คอนโซล Google Cloud เพื่อเผยแพร่บริการ คุณจะสร้างเครือข่ายย่อยได้ในระหว่างกระบวนการดังกล่าว
ดูข้อมูลเกี่ยวกับเครือข่ายย่อย Private Service Connect ได้ที่เครือข่ายย่อย Private Service Connect
จาก Cloud Shell
gcloud beta compute networks subnets create gke-nat-subnet \
--project $prodproject \
--network gke-producer-l4-vpc \
--region us-central1 \
--range 100.100.10.0/24 \
--purpose PRIVATE_SERVICE_CONNECT
8. ติดตั้งใช้งานภาระงานและบริการ
ไฟล์ Manifest ต่อไปนี้อธิบายการติดตั้งใช้งานที่เรียกใช้อิมเมจคอนเทนเนอร์ของเว็บแอปพลิเคชันตัวอย่าง บันทึกไฟล์ Manifest เป็น my-deployment.yaml จาก Cloud Shell
apiVersion: apps/v1
kind: Deployment
metadata:
name: psc-ilb
spec:
replicas: 3
selector:
matchLabels:
app: psc-ilb
template:
metadata:
labels:
app: psc-ilb
spec:
containers:
- name: whereami
image: gcr.io/google-samples/whereami:v1.2.1
ports:
- name: http
containerPort: 8080
readinessProbe:
httpGet:
path: /healthz
port: 8080
scheme: HTTP
initialDelaySeconds: 5
timeoutSeconds: 1
ใช้ไฟล์ Manifest กับคลัสเตอร์จาก Cloud Shell
kubectl apply -f my-deployment.yaml
สร้างบริการ
ไฟล์ Manifest ต่อไปนี้อธิบายบริการที่สร้างตัวจัดสรรภาระงาน TCP/UDP ภายในในพอร์ต TCP 8080 บันทึกไฟล์ Manifest เป็น my-service.yaml จาก Cloud Shell
apiVersion: v1
kind: Service
metadata:
name: gke-l4-psc
annotations:
networking.gke.io/load-balancer-type: "Internal"
spec:
type: LoadBalancer
selector:
app: psc-ilb
ports:
- port: 80
targetPort: 8080
protocol: TCP
ใช้ไฟล์ Manifest กับคลัสเตอร์จาก Cloud Shell
kubectl apply -f my-service.yaml
สร้าง ServiceAttachment
ไฟล์ Manifest ต่อไปนี้อธิบาย ServiceAttachment ที่แสดงบริการที่คุณสร้างต่อผู้ใช้บริการ บันทึกไฟล์ Manifest เป็น my-psc.yaml จาก Cloud Shell
apiVersion: networking.gke.io/v1beta1 kind: ServiceAttachment metadata: name: emoji-sa namespace: default spec: connectionPreference: ACCEPT_AUTOMATIC natSubnets: - gke-nat-subnet proxyProtocol: false resourceRef: kind: Service name: gke-l4-psc
ใช้ไฟล์ Manifest กับคลัสเตอร์จาก Cloud Shell
kubectl apply -f my-psc.yaml
ServiceAttachment มีช่องต่อไปนี้
- connectionPreference: ค่ากำหนดการเชื่อมต่อที่กำหนดวิธีที่ลูกค้าเชื่อมต่อกับบริการ คุณจะใช้การอนุมัติโปรเจ็กต์อัตโนมัติโดยใช้ ACCEPT_AUTOMATIC หรือการอนุมัติโปรเจ็กต์ที่ชัดเจนโดยใช้ ACCEPT_MANUAL ก็ได้ ดูข้อมูลเพิ่มเติมได้ที่การเผยแพร่บริการโดยใช้ Private Service Connect
- natSubnets: รายชื่อชื่อทรัพยากรของเครือข่ายย่อยที่จะใช้สำหรับการเชื่อมต่อบริการ
- proxyProtocol: เมื่อตั้งค่าเป็น true จะมี IP ต้นทางของผู้บริโภคและรหัสการเชื่อมต่อ Private Service Connect ในคำขอ ช่องนี้เป็นข้อมูลที่ไม่บังคับและมีค่าเริ่มต้นเป็น "false" หากไม่ได้ระบุไว้
- consumerAllowList: รายการโปรเจ็กต์ของผู้บริโภคที่ได้รับอนุญาตให้เชื่อมต่อกับ ServiceAttachment ใช้ฟิลด์นี้ได้เมื่อ connectionPreference เป็น ACCEPT_MANUAL เท่านั้น ดูข้อมูลเพิ่มเติมเกี่ยวกับฟิลด์นี้และตัวเลือกอื่นๆ ได้ที่การเผยแพร่บริการโดยใช้ Private Service Connect
การตรวจสอบความถูกต้องของโปรดิวเซอร์
ดูรายละเอียด Service Attachment
คุณดูรายละเอียดของ ServiceAttachment ได้โดยใช้คำสั่งต่อไปนี้จาก Cloud Shell
kubectl describe serviceattachment emoji-sa
ดู ILB ระดับ L4 ของ GKE
จาก Cloud Console ให้ไปที่บริการเครือข่าย → การโหลดบาลานซ์ → ฟรอนท์เอนด์
ระบุที่อยู่ IP ของส่วนหน้าซึ่งสอดคล้องกับเครือข่ายย่อยของโหนดที่กำหนดไว้ก่อนหน้านี้ 192.168.10.0/24 โปรดดูภาพหน้าจอที่ด้านล่าง ที่อยู่ IP ของคุณอาจแตกต่างกัน

ดูบริการที่เผยแพร่
จาก Cloud Console ให้ไปที่บริการเครือข่าย → Private Service Connect → บริการที่เผยแพร่
ระบุบริการที่มีเครือข่ายที่ใช้ในห้องทดลอง gke-producer-l4-vpc, โปรดดูภาพหน้าจอด้านล่าง แม้ว่าค่าบริการและเป้าหมายของคุณอาจแตกต่างกัน

คลิกชื่อบริการที่จะนำคุณไปยังหน้าจอด้านล่าง โปรดสังเกตรายละเอียดการเชื่อมต่อบริการที่ป้อนในข้อมูลพื้นฐาน นอกจากนี้ โปรดสังเกตว่า "โปรเจ็กต์ที่เชื่อมต่อ" ว่างเปล่าเนื่องจากผู้ใช้ยังไม่ได้ลงทะเบียนกับบริการ ปุ่มยอมรับและปฏิเสธจะยังคงเป็นสีเทาเนื่องจากค่ากำหนดการเชื่อมต่อตั้งค่าเป็น "ACCEPT_AUTOMATICALLY" คุณสามารถเปลี่ยนตัวเลือกนี้เป็น "ACCEPT_MANUAL" ได้ทุกเมื่อโดยแก้ไขไฟล์ YAML ของการเชื่อมต่อบริการ (my-psc.yaml)


9. สร้างเครือข่าย VPC ของผู้ใช้

ในส่วนต่อไปนี้ ระบบจะกำหนดค่า VPC ของผู้ใช้ในโปรเจ็กต์แยกต่างหาก การสื่อสารระหว่างเครือข่ายผู้บริโภคและเครือข่ายผู้ผลิตจะดำเนินการผ่านไฟล์แนบบริการที่กำหนดไว้ในเครือข่ายผู้บริโภค
Codelab ต้องใช้ 2 โปรเจ็กต์ แต่ PSC ไม่ได้กำหนดให้ต้องใช้ โปรดทราบว่าการอ้างอิงรองรับโปรเจ็กต์เดียวหรือหลายโปรเจ็กต์
โปรเจ็กต์เดียว - อัปเดตโปรเจ็กต์ให้รองรับเครือข่ายผู้ผลิตและผู้บริโภค
ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] consumerproject=YOUR-PROJECT-NAME prodproject=YOUR-PROJECT-NAME echo $prodproject echo $consumerproject
หลายโปรเจ็กต์ - อัปเดตโปรเจ็กต์เพื่อรองรับเครือข่ายผู้บริโภค
ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] consumerproject=YOUR-PROJECT-NAME echo $consumerproject
เครือข่าย VPC
จาก Cloud Shell
gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom
สร้างซับเน็ตสำหรับ PSC
จาก Cloud Shell
gcloud compute networks subnets create consumer-subnet --project=$consumerproject --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-central1
สร้างซับเน็ตสำหรับอินสแตนซ์ VM
จาก Cloud Shell
gcloud compute networks subnets create consumer-subnet-vm --project=$consumerproject --range=10.0.70.0/24 --network=vpc-demo-consumer --region=us-central1
สร้างที่อยู่ IP แบบคงที่เพื่อเข้าถึงบริการที่เผยแพร่
จาก Cloud Shell
gcloud compute addresses create vpc-consumer-psc --region=us-central1 --subnet=consumer-subnet --addresses 10.0.60.100
สร้างกฎไฟร์วอลล์
หากต้องการอนุญาตให้ IAP เชื่อมต่อกับอินสแตนซ์ VM ให้สร้างกฎไฟร์วอลล์ที่มีลักษณะดังนี้
- มีผลกับอินสแตนซ์ VM ทั้งหมดที่คุณต้องการให้เข้าถึงได้โดยใช้ IAP
- อนุญาตการรับส่งข้อมูลขาเข้าจากช่วง IP 35.235.240.0/20 ช่วงนี้มีที่อยู่ IP ทั้งหมดที่ IAP ใช้สำหรับการส่งต่อ TCP
จาก Cloud Shell
gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
แม้ว่าจะไม่จำเป็นสำหรับ PSC แต่ให้สร้างกฎไฟร์วอลล์ขาออกเพื่อตรวจสอบการรับส่งข้อมูล PSC ของผู้บริโภคไปยังการเชื่อมต่อบริการของผู้ผลิต
gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging
10. สร้างอินสแตนซ์ทดสอบสำหรับผู้บริโภค 1
จาก Cloud Shell
gcloud compute instances create consumer-instance-1 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.10 --no-address --subnet=consumer-subnet-vm --tags=google1 --image-family=debian-10 --image-project=debian-cloud
11. สร้างอินสแตนซ์ทดสอบสำหรับผู้บริโภค 2
จาก Cloud Shell
gcloud compute instances create consumer-instance-2 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.20 --no-address --subnet=consumer-subnet-vm --tags=google2 --image-family=debian-10 --image-project=debian-cloud
12. สร้าง Service Attachment
ในขั้นตอนก่อนหน้า คุณได้คัดลอกสตริง Producer Service Attachment ไว้ในที่ปลอดภัยแล้ว ให้แทรกค่าที่จัดเก็บไว้ลงในช่อง "target-service-attachment"

จาก Cloud Shell
gcloud compute forwarding-rules create vpc-consumer-psc-fr --region=us-central1 --network=vpc-demo-consumer --address=vpc-consumer-psc --target-service-attachment=yoursavedproducerserviceattachment
13. การตรวจสอบความถูกต้อง - ผู้บริโภค
เราจะใช้ CURL และบันทึกไฟร์วอลล์เพื่อตรวจสอบการสื่อสารของผู้บริโภคและผู้ผลิต
ภายในโปรเจ็กต์ของผู้บริโภค ระบบจะใช้ที่อยู่ IP แบบคงที่เพื่อเริ่มต้นการสื่อสารกับผู้ผลิต การแมปที่อยู่ IP แบบคงที่กับกฎการส่งต่อสำหรับผู้บริโภคจะได้รับการตรวจสอบโดยใช้ไวยากรณ์ต่อไปนี้

จากเชลล์ของ VPC สำหรับผู้บริโภคที่ Cloud ใช้ ให้ระบุกฎการส่งต่อและ IP แบบคงที่
gcloud compute forwarding-rules describe vpc-consumer-psc-fr --region us-central1
เอาต์พุตด้านล่าง เราจะใช้ 10.0.60.100 เพื่อเข้าถึงผู้ผลิตในขั้นตอนถัดไป
IPAddress: 10.0.60.100 creationTimestamp: '2021-09-30T21:13:54.124-07:00' id: '3564572805904938477' kind: compute#forwardingRule labelFingerprint: 42WmSpB8rSM= name: vpc-consumer-psc-fr network: https://www.googleapis.com/compute/v1/projects/deepakmichaelstage/global/networks/vpc-demo-consumer networkTier: PREMIUM pscConnectionId: '36583161500548196' pscConnectionStatus: ACCEPTED
ดูบริการที่เชื่อมต่อ
จากคอนโซลระบบคลาวด์ ให้ไปที่บริการเครือข่าย → Private Service Connect → ปลายทางที่เชื่อมต่อ แล้วดูปลายทางที่สร้างขึ้นใหม่

มาเข้าสู่ระบบ consumer-instance-1 และทดสอบการเข้าถึงบริการที่เผยแพร่ของผู้ผลิตกัน
จาก Cloud Shell ให้เปิดแท็บใหม่โดยคลิก +

จาก 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" "consumer-instance-1" --project "$projectname"
เมื่อเข้าสู่ระบบอินสแตนซ์ consumer-instance-1 แล้ว ให้เรียกใช้ curl กับที่อยู่ IP ของกฎการส่งต่อ 10.0.60.100
จาก Cloud Shell ให้ทำดังนี้
user@consumer-instance-1:~$ curl 10.0.60.100
ตัวอย่างเอาต์พุต
user@consumer-instance-1:~$ curl 10.0.60.100
{
"cluster_name": "gke-psc-l4",
"host_header": "10.0.60.100",
"node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodprojectid.internal",
"pod_name": "psc-ilb-588887dfdb-w7tbr",
"pod_name_emoji": "🤷",
"project_id": "prodorijectid",
"timestamp": "2021-10-01T17:43:37",
"zone": "us-central1-a"
มาเข้าสู่ระบบ consumer-instance-2 และทดสอบการเข้าถึงบริการที่ผู้ผลิตเผยแพร่กัน
จาก Cloud Shell ให้เปิดแท็บใหม่โดยคลิก +

จาก 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" "consumer-instance-2" --project "$projectname"
จาก Cloud Shell ให้ทำดังนี้
user@consumer-instance-2:~$ curl 10.0.60.100
ตัวอย่างเอาต์พุต
deepakmichael@consumer-instance-2:~$ curl 10.0.60.100
{
"cluster_name": "gke-psc-l4",
"host_header": "10.0.60.100",
"node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodproject.internal",
"pod_name": "psc-ilb-588887dfdb-4jdql",
"pod_name_emoji": "🧑🏿",
"project_id": "prodproject",
"timestamp": "2021-10-01T17:49:51",
"zone": "us-central1-a"
14. การบันทึกไฟร์วอลล์ - การตรวจสอบที่จัดสรร
ใช้ตัวสำรวจบันทึกเพื่อตรวจสอบว่ากฎไฟร์วอลล์ "vpc-consumner-psc" จับโฟลว์ระหว่างอินสแตนซ์ของ VM กับ IP แบบคงที่
- จาก Cloud Console ให้ไปที่การบันทึกการดำเนินการ → Log Explorer
- ในช่องคำค้นหา ให้อัปเดตรายการด้านล่างด้วย yourconsumerproject แล้วเลือก "เรียกใช้คำค้นหา"
logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")
- ผลการค้นหาจะแสดงข้อมูลต่อไปนี้ต่อภาพหน้าจอที่ระบุ

- ขยายบันทึก (jsonPayload → Connection) และระบุเอาต์พุตที่ระบุไว้ด้านล่าง โปรดจดบันทึก dest_ip: 10.0.60.100 คือ IP แบบ TCP แบบคงที่ที่ใช้ในการเข้าถึงบริการ Producer และ src_ip: 10.0.70.10 หรือ 10.0.70.20 คือที่อยู่ IP ของอินสแตนซ์ VM อนุญาตให้จำหน่าย

15. การตรวจสอบความถูกต้อง - ผู้ผลิต

จากโปรเจ็กต์ของผู้ผลิต ให้ตรวจสอบว่าการเชื่อมต่อบริการแนบสำเร็จแล้ว ไปที่บริการเครือข่าย → Private Service Connect → บริการที่เผยแพร่

การคลิกบริการจะแสดงโปรเจ็กต์ของผู้บริโภคที่เชื่อมต่อและสถานะของคุณดังที่แสดงด้านล่าง

16. จำกัดการเข้าถึงบริการที่เผยแพร่

จนถึงตอนนี้เราได้ยืนยันแล้วว่าทั้ง 2 อินสแตนซ์มีสิทธิ์เข้าถึงบริการที่เผยแพร่แล้ว มาสร้างกฎไฟร์วอลล์ขาออกเพื่อปฏิเสธสิทธิ์เข้าถึงบริการที่เผยแพร่แล้วของ consumer-instance-2 กัน
โดยค่าเริ่มต้น GCP จะอนุญาตการรับส่งข้อมูลขาออกทั้งหมด แต่ปฏิเสธการรับส่งข้อมูลขาเข้าทั้งหมด ในขั้นตอนต่อไปนี้ เราจะสร้างกฎไฟร์วอลล์ตามแท็กเครือข่ายที่กำหนดไว้ก่อนหน้านี้ "google2" ซึ่งใช้เมื่อสร้าง consumer-instance-2 เพื่อปฏิเสธการเข้าถึงบริการที่เผยแพร่

เปิดแท็บ Cloud Shell ใหม่โดยคลิก + แล้วเรียกใช้กฎไฟร์วอลล์ต่อไปนี้ใน Cloud Shell
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] projectname=YOUR-PROJECT-NAME echo $projectname gcloud compute --project=$projectname firewall-rules create psc-endpoint-deny-egress --direction=EGRESS --priority=999 --network=vpc-demo-consumer --action=DENY --rules=all --destination-ranges=10.0.60.100/32 --target-tags=google2 --enable-logging
ตอนนี้มาทดสอบว่า consumer-instance-2 เข้าถึงบริการที่เผยแพร่ได้หรือไม่ หากเซสชันหมดเวลา คุณจะต้องเปิด Cloud Shell ใหม่ + และเข้าสู่ระบบ VM ตามที่ระบุไว้ด้านล่าง
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] projectname=YOUR-PROJECT-NAME echo $projectname gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"
จาก Cloud Shell ให้ทำดังนี้
user@consumer-instance-2:~$ curl 10.0.60.100
ตัวอย่างเอาต์พุต
user@consumer-instance-2:~$ curl 10.0.60.100 curl: (7) Failed to connect to 10.0.60.100 port 80: Connection timed out
การบันทึกไฟร์วอลล์ - การตรวจสอบที่ถูกปฏิเสธ
ใช้ตัวสำรวจบันทึกเพื่อตรวจสอบว่ากฎไฟร์วอลล์ "psc-endpoint-deny-egress" จับภาพโฟลว์ระหว่างอินสแตนซ์ VM กับ IP แบบคงที่
- จาก Cloud Console ให้ไปที่การบันทึกการดำเนินการ → Log Explorer
- ในช่องคำค้นหา ให้อัปเดตรายการด้านล่างด้วย yourconsumerproject แล้วเลือก "เรียกใช้คำค้นหา"
logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:psc-endpoint-deny-egress")
- ผลการค้นหาจะแสดงข้อมูลต่อไปนี้ต่อภาพหน้าจอที่ระบุ

- ขยายบันทึกและระบุเอาต์พุตที่ระบุไว้ด้านล่าง โปรดทราบว่า dest_ip: 10.0.60.100 คือ IP แบบ TCP แบบคงที่ และ src_ip: 10.0.70.10 หรือ 10.0.70.20 คือที่อยู่ IP ของอินสแตนซ์ VM การจำหน่ายถูกปฏิเสธ

17. ขั้นตอนการล้างข้อมูล
ขั้นตอนการล้างข้อมูลเครือข่ายโปรดิวเซอร์

ลบคอมโพเนนต์ของ Lab จาก Cloud Shell เดียวในเทอร์มินัลของโปรเจ็กต์ Producer
gcloud container clusters delete gke-psc-l4 --region us-central1-a --quiet gcloud compute networks subnets delete gke-nat-subnet --region=us-central1 --quiet gcloud compute networks subnets delete node-subnet1 --region=us-central1 --quiet gcloud compute networks delete gke-producer-l4-vpc --quiet

ขั้นตอนการล้างข้อมูลเครือข่ายผู้บริโภค
ลบคอมโพเนนต์ของ Lab จาก Cloud Shell เดียวในเทอร์มินัลของโปรเจ็กต์สำหรับผู้บริโภค
gcloud compute instances delete consumer-instance-1 --zone=us-central1-a --quiet gcloud compute instances delete consumer-instance-2 --zone=us-central1-a --quiet gcloud compute forwarding-rules delete vpc-consumer-psc-fr --region=us-central1 --quiet gcloud compute addresses delete vpc-consumer-psc --region=us-central1 --quiet gcloud compute firewall-rules delete psclab-iap-consumer --quiet gcloud compute networks subnets delete consumer-subnet --region=us-central1 --quiet gcloud compute networks subnets delete consumer-subnet-vm --region=us-central1 --quiet gcloud compute firewall-rules delete vpc-consumer-psc --quiet gcloud compute firewall-rules delete psc-endpoint-deny-egress --quiet gcloud compute networks delete vpc-demo-consumer --quiet
18. ยินดีด้วย
ขอแสดงความยินดีที่ทำ Codelab เสร็จสมบูรณ์
สิ่งที่เราได้พูดถึง
- ประโยชน์ของ Private Service Connect
- แนวคิดหลักสำหรับผู้ใช้บริการ
- แนวคิดหลักสำหรับผู้ให้บริการ
- สร้างสภาพแวดล้อมของผู้ผลิต
- แสดงบริการ (สภาพแวดล้อมของผู้ผลิต) ผ่านไฟล์แนบบริการ
- สร้างสภาพแวดล้อมสำหรับผู้บริโภค
- สร้างกฎการส่งต่อในเครือข่ายของผู้บริโภค
- ตรวจสอบสิทธิ์เข้าถึงของผู้บริโภค
- เปิดใช้การควบคุมการเข้าถึงนโยบาย
- ใช้กฎไฟร์วอลล์ขาออกเพื่อบล็อกการเข้าถึงกฎการส่งต่อสำหรับผู้ใช้ทั่วไป