การใช้ Private Service Connect เพื่อเผยแพร่และใช้บริการด้วย GKE

1. บทนำ

Private Service Connect ช่วยให้ผู้ผลิตบริการเสนอบริการแบบส่วนตัวแก่ผู้บริโภคบริการได้ Private Service Connect มีประโยชน์ดังต่อไปนี้

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

45b90d50690dd111.png

รูปที่ 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 แบบคงที่ที่ใช้เพื่อสร้างคำขอไปยังผู้ผลิตบริการ นอกเหนือจากไฟล์แนบบริการเป้าหมายที่แมปกับไฟล์แนบบริการของผู้ผลิต (บริการที่เผยแพร่)

1ce5607c0c56d77d.jpeg

ตอนนี้ เรามาดูเครือข่ายโปรดิวเซอร์กัน โปรดสังเกตว่าเครือข่ายผู้ผลิตไม่มีการแมปกับเครือข่ายผู้บริโภค แต่เครือข่ายผู้ผลิตมีไฟล์แนบบริการ (บริการที่เผยแพร่) ที่ผู้บริโภคใช้สำหรับบริการต่างๆ ไฟล์แนบบริการของผู้ผลิตแสดงโดย L4 ILB ขาเข้าของ GKE (บริการที่เผยแพร่) ซึ่งเปิดใช้การสื่อสารกับพ็อด GKE และ แอปพลิเคชันที่เกี่ยวข้อง

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

ซับเน็ตเหล่านี้ไม่สามารถใช้สำหรับทรัพยากร เช่น อินสแตนซ์ VM หรือกฎการส่งต่อ ซับเน็ตจะใช้เพื่อระบุที่อยู่ IP สำหรับ SNAT ของการเชื่อมต่อผู้บริโภคที่เข้ามาใหม่เท่านั้น

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับ L4ILB สำหรับ GKE Private Service Connect และรับสิทธิ์เข้าถึงเนื้อหาที่ใช้ให้ห้องทดลองนี้อ้างอิง ต่อไปนี้โดยตรง

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

เริ่มต้น Cloud Shell

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

จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 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

โปรดคำนึงถึงแบบแผนของรหัสสีต่อไปนี้

f251ebb137e37136.png

7. สร้างเครือข่าย VPC ของ Producer

afe738fc869f0d6e.png

เครือข่าย 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 ของคุณอาจแตกต่างออกไป

ed7a25ed4774977b.png

ดูบริการที่เผยแพร่

จากคอนโซลระบบคลาวด์ ให้ไปที่บริการเครือข่าย → Private Service Connect → บริการที่เผยแพร่

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

5a00836ee514b918.png

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

497f5f43920018c0.png

e246063a23771273.png

9. สร้างเครือข่าย VPC สำหรับผู้บริโภค

1f3c90f1e139e906.png

ในส่วนต่อไปนี้จะมีการกำหนดค่า 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" กัน ด้วย

7abaccc4e24f1ef7.png

จาก 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 แบบคงที่กับกฎการส่งต่อผู้บริโภคนี้จะได้รับการตรวจสอบโดยใช้ไวยากรณ์ต่อไปนี้

1f3c90f1e139e906.png

จาก 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 → อุปกรณ์ปลายทางที่เชื่อมต่อและ ดูปลายทางที่สร้างใหม่

206bc00297aaa260.png

ลองเข้าสู่ระบบ consumer-instance-1 และทดสอบสิทธิ์เข้าถึง Producer Published Service

จาก Cloud Shell ให้เปิดแท็บใหม่โดยคลิก +

81f3210b29faebd3.png

จาก 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 ให้เปิดแท็บใหม่โดยคลิก +

81f3210b29faebd3.png

จาก 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 แบบคงที่

  1. จาก Cloud Console ให้ระบุการบันทึกการดำเนินการ → เครื่องมือสำรวจบันทึก
  2. ในช่องการค้นหา ให้อัปเดตรายการด้านล่างด้วย yourconsumerproject แล้วเลือก "ดำเนินการค้นหา"

logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")

  1. ผลการค้นหาจะแสดงข้อมูลต่อไปนี้ตามภาพหน้าจอที่ให้ไว้

23e427b3060473.png

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

2669743fd1f1cb0d.png

15. การตรวจสอบ - Producer

afe738fc869f0d6e.png

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

89ded87a63888f60.png

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

15966d47423ebc5f.png

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

1f3c90f1e139e906.png

ถึงตอนนี้เราได้ยืนยันว่าทั้ง 2 อินสแตนซ์มีสิทธิ์เข้าถึงบริการที่เผยแพร่แล้ว ลองสร้างกฎไฟร์วอลล์ขาออกเพื่อปฏิเสธการเข้าถึงบริการที่เผยแพร่แบบ consumer-instance-2 กัน

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

7fa2cda1dfec33a.png

เปิดแท็บ 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 แบบคงที่

  1. จาก Cloud Console ให้ระบุการบันทึกการดำเนินการ → เครื่องมือสำรวจบันทึก
  2. ในช่องการค้นหา ให้อัปเดตรายการด้านล่างด้วย 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")

  1. ผลการค้นหาจะแสดงข้อมูลต่อไปนี้ตามภาพหน้าจอที่ให้ไว้

83b4fc7348ac93cd.png

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

a344f75f67590655.png

17. ขั้นตอนการทำความสะอาด

ขั้นตอนการล้างเครือข่าย Producer

afe738fc869f0d6e.png

ลบคอมโพเนนต์ห้องทดลองจาก 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

1f3c90f1e139e906.png

ขั้นตอนการล้างข้อมูลเครือข่ายของผู้บริโภค

ลบคอมโพเนนต์ห้องทดลองจาก 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 จนจบ

หัวข้อที่ครอบคลุม

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