การใช้ 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 ของผู้ให้บริการ (คลิกเพื่อขยาย)

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

  • ประโยชน์ของ 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 ต้นทางของผู้บริโภคโดยใช้การแปลที่อยู่เครือข่ายต้นทาง (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 ของผู้ผลิต (บริการที่เผยแพร่)

1ce5607c0c56d77d.jpeg

ตอนนี้เรามาดูเครือข่ายผู้ผลิตกัน โปรดสังเกตว่าเครือข่ายผู้ผลิตไม่มีการแมปกับเครือข่ายผู้บริโภค แต่เครือข่ายผู้ผลิตมี 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 นี้โดยตรง โปรดดู ข้อมูลต่อไปนี้

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

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

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

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

เริ่มต้น Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

โปรดทราบรูปแบบการใช้รหัสสีต่อไปนี้

f251ebb137e37136.png

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

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 เพื่อเผยแพร่บริการ คุณจะสร้างเครือข่ายย่อยได้ในระหว่างกระบวนการดังกล่าว

ดูข้อมูลเกี่ยวกับเครือข่ายย่อย 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

การตรวจสอบความถูกต้องของ Producer

ดูรายละเอียดการเชื่อมต่อบริการ

คุณดูรายละเอียดของ ServiceAttachment ได้โดยใช้คำสั่งต่อไปนี้จาก Cloud Shell

kubectl describe serviceattachment emoji-sa

ดู ILB เลเยอร์ 4 ของ GKE

จาก Cloud Console ให้ไปที่บริการเครือข่าย → การจัดสรรภาระงาน → ส่วนหน้า

ระบุที่อยู่ IP ของส่วนหน้าซึ่งสอดคล้องกับเครือข่ายย่อยของโหนดที่กำหนดไว้ก่อนหน้านี้ 192.168.10.0/24 โปรดดูภาพหน้าจอด้านล่าง ที่อยู่ IP ของคุณอาจแตกต่างกัน

ed7a25ed4774977b.png

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

จาก Cloud Console ให้ไปที่บริการเครือข่าย → Private Service Connect → บริการที่เผยแพร่

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

5a00836ee514b918.png

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

497f5f43920018c0.pnge246063a23771273.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. สร้าง Service Attachment

ในขั้นตอนก่อนหน้า คุณได้คัดลอกสตริง Producer Service Attachment ไว้ในที่ปลอดภัยแล้ว ให้แทรกค่าที่จัดเก็บไว้ลงในช่อง "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 แบบคงที่เพื่อเริ่มต้นการสื่อสารกับผู้ผลิต การแมปที่อยู่ IP แบบคงที่กับกฎการส่งต่อสำหรับผู้บริโภคนี้ได้รับการตรวจสอบโดยใช้ไวยากรณ์ต่อไปนี้

1f3c90f1e139e906.png

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

206bc00297aaa260.png

มาเข้าสู่ระบบ consumer-instance-1 และทดสอบการเข้าถึงบริการที่เผยแพร่ของผู้ผลิตกัน

จาก 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 และทดสอบการเข้าถึงบริการที่ผู้ผลิตเผยแพร่กัน

จาก 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 ให้ไปที่การบันทึกการดำเนินการ → Log Explorer
  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 แบบคงที่ของ TCP ที่ใช้ในการเข้าถึงบริการ Producer และ src_ip: 10.0.70.10 หรือ 10.0.70.20 คือที่อยู่ IP ของอินสแตนซ์ VM อนุญาตให้จำหน่าย

2669743fd1f1cb0d.png

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

afe738fc869f0d6e.png

จากโปรเจ็กต์ผู้ผลิต ให้ตรวจสอบว่าการเชื่อมต่อบริการแนบสำเร็จแล้ว ไปที่บริการเครือข่าย → 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

การบันทึกไฟร์วอลล์ - การตรวจสอบที่ถูกปฏิเสธ

ใช้ Logs Explorer เพื่อตรวจสอบว่ากฎไฟร์วอลล์ "psc-endpoint-deny-egress" จับภาพโฟลว์ระหว่างอินสแตนซ์ VM กับ IP แบบคงที่

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

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 แบบ TCP แบบคงที่ และ src_ip: 10.0.70.10 หรือ 10.0.70.20 คือที่อยู่ IP ของอินสแตนซ์ VM การจำหน่ายถูกปฏิเสธ

a344f75f67590655.png

17. ขั้นตอนการล้างข้อมูล

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

afe738fc869f0d6e.png

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

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

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

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