1. บทนำ
Private Service Connect ช่วยให้ผู้ผลิตบริการเสนอบริการแบบส่วนตัวแก่ผู้บริโภคบริการได้ Private Service Connect มีประโยชน์ดังต่อไปนี้
- เครือข่าย VPC ผู้ผลิตบริการสามารถรองรับผู้ใช้บริการได้มากกว่า 1 ราย
- ผู้บริโภคแต่ละรายจะเชื่อมต่อกับที่อยู่ IP ภายในที่ตนกำหนด Private Service Connect ดำเนินการแปลที่อยู่เครือข่าย (NAT) เพื่อกำหนดเส้นทางคำขอไปยังผู้ผลิตบริการ
รูปที่ 2 Private Service Connect ใช้ปลายทางและไฟล์แนบบริการเพื่อช่วยให้ผู้บริโภคบริการส่งการรับส่งข้อมูลจากเครือข่าย VPC ของผู้บริโภคไปยังบริการในเครือข่าย VPC ของผู้ผลิตบริการได้ (คลิกเพื่อขยาย)
สิ่งที่คุณจะได้เรียนรู้
- สิทธิประโยชน์ของการเชื่อมต่อบริการส่วนตัว
- แนวคิดหลักสำหรับผู้บริโภคบริการ
- แนวคิดหลักสำหรับผู้ผลิตบริการ
- สร้างสภาพแวดล้อมของผู้ผลิต
- แสดงบริการ (สภาพแวดล้อมของผู้ผลิต) ผ่านไฟล์แนบของบริการ
- สร้างสภาพแวดล้อมของผู้บริโภค
- สร้างกฎการส่งต่อในเครือข่ายผู้ใช้ทั่วไป
- ตรวจสอบสิทธิ์เข้าถึงของผู้บริโภค
- เปิดใช้การควบคุมการเข้าถึงนโยบาย
- ใช้กฎไฟร์วอลล์ขาออกเพื่อบล็อกการเข้าถึงกฎการส่งต่อของผู้บริโภค
สิ่งที่คุณต้องมี
- ความรู้ในการทำให้คลัสเตอร์ GKE และบริการใช้งานได้
- ความรู้เกี่ยวกับตัวจัดสรรภาระงานภายใน
- ความสามารถในการสร้าง VPC ใน 2 โปรเจ็กต์
- ความสามารถในการสร้างคลัสเตอร์ GKE
2. สิทธิประโยชน์ของการเชื่อมต่อบริการส่วนตัว
PSC มีประโยชน์หลายประการเมื่อเทียบกับการใช้การเพียร์ VPC
ควบคุมพื้นที่ IP ส่วนตัวได้ดียิ่งขึ้น
- ในฐานะผู้บริโภคของบริการ คุณสามารถควบคุมที่อยู่ IP ส่วนตัวที่ใช้เชื่อมต่อกับบริการที่มีการจัดการซึ่งคุณต้องการเข้าถึงได้
- ในฐานะผู้ใช้ทั่วไป คุณไม่จำเป็นต้องกังวลเกี่ยวกับการจองช่วงที่อยู่ IP ส่วนตัวสำหรับบริการแบ็กเอนด์ที่ใช้ใน VPC ของคุณ คุณเพียงแค่ต้องเลือกที่อยู่ IP จากซับเน็ตของคุณเองเพื่อเชื่อมต่อกับบริการของผู้ผลิตเท่านั้น
- ในฐานะผู้ผลิตบริการ คุณเลือกทำให้โมเดลแบบหลายกลุ่มผู้ใช้ได้ โดย VPC ของคุณมีบริการที่แสดง VPC สำหรับผู้บริโภคหลายรายการ ผู้บริโภคที่มีช่วงซับเน็ตทับซ้อนกันจะไม่เป็นปัญหาอีกต่อไป
- ในฐานะผู้ให้บริการ คุณสามารถปรับขนาดบริการให้เป็นอินสแตนซ์ VM ได้มากเท่าที่ต้องการ โดยไม่ต้องติดต่อผู้บริโภคเพื่อขอที่อยู่ IP เพิ่มเติม
ความปลอดภัยและการแยกส่วนที่ดียิ่งขึ้น
- ในฐานะผู้บริโภคบริการ มีเพียงคุณเท่านั้นที่จะเริ่มสื่อสารกับผู้ผลิตบริการได้ การเชื่อมต่อแบบทิศทางเดียวนี้ช่วยให้การกำหนดค่าไฟร์วอลล์ง่ายขึ้นมาก ทั้งยังลดความเสี่ยงจากการรับส่งข้อมูลลวงที่มาจากผู้ผลิตบริการ
- ในฐานะผู้ผลิตบริการ คุณไม่จำเป็นต้องเปลี่ยนกฎไฟร์วอลล์ตามช่วงซับเน็ตใน VPC ของผู้ใช้ คุณสร้างกฎไฟร์วอลล์สำหรับช่วงที่อยู่ IP ของ NAT ที่กำหนดค่าสำหรับบริการของคุณได้
ความสามารถในการปรับขนาดได้ดีขึ้น
- PSC ช่วยให้การออกแบบรองรับการปรับขนาดได้สูงโดยการรองรับผู้บริโภคหลายพันคน และช่วยให้ผู้ผลิตบริการสามารถนำเสนอบริการแบบหลายผู้ใช้และแบบเช่ารายเดียวที่รองรับการปรับขนาดได้อย่างมาก
- ในฐานะลูกค้าบริการที่ใช้การเชื่อมต่อบริการส่วนตัว คุณจะสร้างทรัพยากรตามที่จำเป็นใน VPC ได้ ขนาดของทรัพยากรดังกล่าวจะไม่ได้รับผลกระทบจากจำนวนทรัพยากรดังกล่าวที่สร้างขึ้นใน VPC ของผู้ผลิต
3. แนวคิดหลักสำหรับผู้บริโภคบริการ
คุณใช้ปลายทาง Private Service Connect เพื่อใช้บริการที่อยู่นอกเครือข่าย VPC ได้ ผู้ใช้บริการสร้างปลายทาง Private Service Connect ที่เชื่อมต่อกับบริการเป้าหมาย
ปลายทาง
คุณใช้อุปกรณ์ปลายทาง Private Service Connect เพื่อเชื่อมต่อกับบริการเป้าหมาย ปลายทางมีที่อยู่ IP ภายในในเครือข่าย VPC และอิงตามทรัพยากรกฎการส่งต่อ
คุณส่งการจราจรของข้อมูลไปยังปลายทาง ซึ่งส่งต่อไปยังเป้าหมายที่อยู่นอกเครือข่าย VPC ของคุณ
เป้าหมาย
ปลายทางของ Private Service Connect มีเป้าหมาย ซึ่งเป็นบริการที่คุณต้องการเชื่อมต่อด้วย
- API Bundle มีลักษณะดังนี้
- API ทั้งหมด: Google API ส่วนใหญ่
- VPC-SC: API ที่การควบคุมบริการ VPC รองรับ
- บริการที่เผยแพร่ในเครือข่าย VPC อื่น บริการนี้สามารถจัดการโดยองค์กรของคุณเองหรือบุคคลที่สาม
บริการที่เผยแพร่
หากต้องการเชื่อมต่อปลายทางกับบริการของผู้ผลิตบริการ คุณต้องมีไฟล์แนบบริการสำหรับบริการดังกล่าว URI ของไฟล์แนบบริการมีรูปแบบดังนี้ projects/SERVICE_PROJECT/regions/REGION/serviceattachs/SERVICE_NAME
4. แนวคิดหลักสำหรับผู้ผลิตบริการ
หากต้องการทำให้บริการพร้อมใช้งานสำหรับผู้บริโภค คุณต้องสร้างซับเน็ตเฉพาะอย่างน้อย 1 เครือข่ายเพื่อใช้สำหรับการแปลที่อยู่เครือข่าย (NAT) ของที่อยู่ IP ของผู้บริโภค จากนั้นคุณจะสร้างไฟล์แนบของบริการซึ่งอ้างถึงซับเน็ตเหล่านั้น
ซับเน็ตของ Private Service Connect
ในการเปิดเผยบริการ ผู้ผลิตบริการจะสร้างซับเน็ตอย่างน้อย 1 รายการโดยมี Private Service Connect ตามวัตถุประสงค์ก่อน
เมื่อส่งคำขอจากเครือข่าย VPC ของผู้บริโภค ระบบจะแปลที่อยู่ IP ต้นทางของผู้ใช้โดยใช้ 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 แบบคงที่ที่ใช้เพื่อสร้างคำขอไปยังผู้ผลิตบริการ นอกเหนือจากไฟล์แนบบริการเป้าหมายที่แมปกับไฟล์แนบบริการของผู้ผลิต (บริการที่เผยแพร่)
ตอนนี้ เรามาดูเครือข่ายโปรดิวเซอร์กัน โปรดสังเกตว่าเครือข่ายผู้ผลิตไม่มีการแมปกับเครือข่ายผู้บริโภค แต่เครือข่ายผู้ผลิตมีไฟล์แนบบริการ (บริการที่เผยแพร่) ที่ผู้บริโภคใช้สำหรับบริการต่างๆ ไฟล์แนบบริการของผู้ผลิตแสดงโดย L4 ILB ขาเข้าของ GKE (บริการที่เผยแพร่) ซึ่งเปิดใช้การสื่อสารกับพ็อด GKE และ แอปพลิเคชันที่เกี่ยวข้อง
ระบบจะใช้ซับเน็ต NAT เมื่อมีการส่งคำขอจากเครือข่าย VPC ของผู้บริโภค ระบบจะแปลที่อยู่ IP ต้นทางของผู้ใช้โดยใช้ NAT ต้นทาง (SNAT) ไปยังที่อยู่ IP ที่เลือกจากซับเน็ตของ Private Service Connect รายการใดรายการหนึ่ง
ซับเน็ตเหล่านี้ไม่สามารถใช้สำหรับทรัพยากร เช่น อินสแตนซ์ VM หรือกฎการส่งต่อ ซับเน็ตจะใช้เพื่อระบุที่อยู่ IP สำหรับ SNAT ของการเชื่อมต่อผู้บริโภคที่เข้ามาใหม่เท่านั้น
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับ L4ILB สำหรับ GKE Private Service Connect และรับสิทธิ์เข้าถึงเนื้อหาที่ใช้ให้ห้องทดลองนี้อ้างอิง ต่อไปนี้โดยตรง
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น
PROJECT_ID
) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" หลังจากสร้างโปรเจ็กต์แล้ว - มีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าเหล่านี้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้
จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้
เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ใช้งานได้ต่อเนื่องและทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานทั้งหมดใน Lab นี้สามารถทำได้โดยใช้เบราว์เซอร์
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 ของ Producer
เครือข่าย 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 Console เพื่อเผยแพร่บริการ คุณจะสร้างซับเน็ตได้ในระหว่างกระบวนการนี้
โปรดดูข้อมูลเกี่ยวกับซับเน็ตของ 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
สร้าง ServiceAttach
ไฟล์ Manifest ต่อไปนี้อธิบาย ServiceAttach ที่เปิดเผยบริการที่คุณสร้างขึ้นแก่ผู้บริโภคบริการ บันทึกไฟล์ 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_AUTOMATIC ก็ได้ ดูข้อมูลเพิ่มเติมได้ที่บริการเผยแพร่โดยใช้ Private Service Connect
- natSubnets: รายการชื่อทรัพยากรเครือข่ายย่อยที่จะใช้สำหรับไฟล์แนบของบริการ
- proxyProtocol: เมื่อตั้งค่าเป็นจริง จะมี IP ต้นทางของผู้บริโภคและรหัสการเชื่อมต่อ Private Service Connect ในคำขอ ช่องนี้ไม่บังคับและจะมีค่าเริ่มต้นเป็น "เท็จ" หากไม่ได้ระบุไว้
- consumerAllowList: รายการโปรเจ็กต์ของผู้บริโภคที่ได้รับอนุญาตให้เชื่อมต่อกับ ServiceAttachment ช่องนี้จะใช้ได้เฉพาะเมื่อ connectionPreference เป็น accept_MANUAL เท่านั้น โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับช่องนี้และตัวเลือกอื่นๆ ที่บริการเผยแพร่โดยใช้ Private Service Connect
การตรวจสอบจากผู้ผลิต
การดูรายละเอียดไฟล์แนบบริการ
คุณดูรายละเอียดของ Serviceattach ได้โดยใช้คำสั่งต่อไปนี้จาก Cloud Shell
kubectl describe serviceattachment emoji-sa
ดู GKE L4 ILB
จากคอนโซลระบบคลาวด์ ให้ไปที่บริการเครือข่าย → การจัดสรรภาระงาน → ฟรอนท์เอนด์
ระบุที่อยู่ IP ฟรอนท์เอนด์ที่สอดคล้องกับซับเน็ต 192.168.10.0/24 ของโหนดที่กำหนดไว้ก่อนหน้า ดูภาพหน้าจอด้านล่าง ที่อยู่ IP ของคุณอาจแตกต่างออกไป
ดูบริการที่เผยแพร่
จากคอนโซลระบบคลาวด์ ให้ไปที่บริการเครือข่าย → Private Service Connect → บริการที่เผยแพร่
ระบุบริการด้วยเครือข่ายที่ใช้ในห้องทดลอง gke-producer-l4-vpc,, ดูภาพหน้าจอที่ด้านล่าง แม้ว่าค่าบริการและเป้าหมายอาจต่างกัน
คลิกชื่อบริการที่จะนำคุณไปยังหน้าจอด้านล่าง แล้วดูรายละเอียดไฟล์แนบของบริการในข้อมูลพื้นฐาน และอย่าลืมสังเกต "โปรเจ็กต์ที่เชื่อมต่อ" ด้วย ว่างเปล่าเนื่องจากผู้บริโภคยังไม่ได้ลงทะเบียนกับบริการ ยอมรับ และ REJECT จะยังคงเป็นสีเทาเนื่องจากมีการตั้งค่าค่ากำหนดการเชื่อมต่อเป็น "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. สร้างไฟล์แนบบริการ
ในขั้นตอนก่อนหน้า คุณได้คัดลอกสตริงไฟล์แนบของบริการ Producer ไว้ในที่ปลอดภัย มาแทรกค่าที่เก็บไว้ลงใน "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 แบบคงที่จะใช้เพื่อเริ่มการสื่อสารกับ Producer การแมปที่อยู่ IP แบบคงที่กับกฎการส่งต่อผู้บริโภคนี้จะได้รับการตรวจสอบโดยใช้ไวยากรณ์ต่อไปนี้
จาก Cloud Use Shell สำหรับ Consumer VPCs ให้ระบุกฎการส่งต่อและ 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 และทดสอบสิทธิ์เข้าถึง Producer Published Service
จาก 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 และทดสอบสิทธิ์เข้าถึง Producer Published Service
จาก 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 ให้ระบุการบันทึกการดำเนินการ → เครื่องมือสำรวจบันทึก
- ในช่องการค้นหา ให้อัปเดตรายการด้านล่างด้วย 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 แบบ StatIC TCP ที่ใช้เข้าถึงบริการ Producer และ src_ip: 10.0.70.10 หรือ 10.0.70.20 คือที่อยู่ IP ของอินสแตนซ์ VM อนุญาตให้กำจัดได้
15. การตรวจสอบ - Producer
ตรวจสอบว่าไฟล์แนบของบริการเชื่อมต่อสำเร็จจากโปรเจ็กต์ Producer ไปที่บริการเครือข่าย → 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 ให้ระบุการบันทึกการดำเนินการ → เครื่องมือสำรวจบันทึก
- ในช่องการค้นหา ให้อัปเดตรายการด้านล่างด้วย yourconsumerproject แล้วเลือก "Run Query"
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 ของ STATIC TCP และ src_ip: 10.0.70.10 หรือ 10.0.70.20 คือที่อยู่ IP ของอินสแตนซ์ VM การกำจัดถูกปฏิเสธ
17. ขั้นตอนการทำความสะอาด
ขั้นตอนการล้างเครือข่าย Producer
ลบคอมโพเนนต์ห้องทดลองจาก 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
ขั้นตอนการล้างข้อมูลเครือข่ายของผู้บริโภค
ลบคอมโพเนนต์ห้องทดลองจาก 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 จนจบ
หัวข้อที่ครอบคลุม
- สิทธิประโยชน์ของการเชื่อมต่อบริการส่วนตัว
- แนวคิดหลักสำหรับผู้บริโภคบริการ
- แนวคิดหลักสำหรับผู้ผลิตบริการ
- สร้างสภาพแวดล้อมของผู้ผลิต
- แสดงบริการ (สภาพแวดล้อมของผู้ผลิต) ผ่านไฟล์แนบของบริการ
- สร้างสภาพแวดล้อมของผู้บริโภค
- สร้างกฎการส่งต่อในเครือข่ายผู้ใช้ทั่วไป
- ตรวจสอบสิทธิ์เข้าถึงของผู้บริโภค
- เปิดใช้การควบคุมการเข้าถึงนโยบาย
- ใช้กฎไฟร์วอลล์ขาออกเพื่อบล็อกการเข้าถึงกฎการส่งต่อของผู้บริโภค