استفاده از Private Service Connect برای انتشار و مصرف خدمات با GKE

1. مقدمه

Private Service Connect به یک تولید کننده سرویس اجازه می دهد تا خدمات را به صورت خصوصی به مصرف کننده خدمات ارائه دهد. Private Service Connect مزایای زیر را ارائه می دهد:

  • یک شبکه VPC تولید کننده خدمات می تواند بیش از یک مصرف کننده سرویس را پشتیبانی کند.
  • هر مصرف کننده به یک آدرس IP داخلی که خودش تعریف می کند متصل می شود. Private Service Connect ترجمه آدرس شبکه (NAT) را برای هدایت درخواست به تولید کننده سرویس انجام می دهد.

45b90d50690dd111.png

شکل 2. Private Service Connect از نقاط پایانی و پیوست های سرویس استفاده می کند تا به مصرف کنندگان سرویس اجازه می دهد تا ترافیک را از شبکه VPC مصرف کننده به خدمات در شبکه VPC تولید کننده خدمات ارسال کنند (برای بزرگنمایی کلیک کنید).

چیزی که یاد خواهید گرفت

  • مزایای اتصال سرویس خصوصی
  • مفاهیم کلیدی برای مصرف کنندگان خدمات
  • مفاهیم کلیدی برای تولیدکنندگان خدمات
  • یک محیط تولید کننده ایجاد کنید
  • خدمات (محیط تولیدکننده) را از طریق پیوست سرویس در معرض دید قرار دهید
  • یک محیط مصرف کننده ایجاد کنید
  • یک قانون حمل و نقل در شبکه مصرف کننده ایجاد کنید
  • اعتبار دسترسی مصرف کننده
  • کنترل دسترسی خط مشی را فعال کنید
  • از قانون فایروال خروجی برای مسدود کردن دسترسی به قانون حمل و نقل مصرف کننده استفاده کنید

آنچه شما نیاز دارید

  • دانش استقرار خوشه ها و سرویس های GKE
  • آشنایی با بار متعادل کننده های داخلی
  • امکان ایجاد VPC در دو پروژه
  • امکان ایجاد GKE Cluster

2. مزایای اتصال سرویس خصوصی

با PSC، در مقایسه با استفاده از VPC Peering، چندین مزیت دارید:

کنترل بهتر فضای 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 :
  • همه APIها: اکثر APIهای Google
  • VPC-SC: API هایی که VPC Service Controls از آن ها پشتیبانی می کند
  • یک سرویس منتشر شده در یک شبکه VPC دیگر. این سرویس می تواند توسط سازمان خودتان یا شخص ثالث مدیریت شود.

سرویس منتشر شده

برای اتصال نقطه پایانی خود به سرویس تولیدکننده خدمات، به پیوست سرویس برای سرویس نیاز دارید. URI پیوست سرویس دارای این قالب است: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

4. مفاهیم کلیدی برای تولیدکنندگان خدمات

برای در دسترس قرار دادن یک سرویس برای مصرف کنندگان، یک یا چند زیرشبکه اختصاصی ایجاد می کنید تا از آن برای ترجمه آدرس شبکه (NAT) آدرس های IP مصرف کننده استفاده کنید. سپس یک پیوست سرویس ایجاد می‌کنید که به آن زیرشبکه‌ها اشاره دارد.

زیرشبکه های Private Service Connect

برای افشای یک سرویس، تولید کننده سرویس ابتدا یک یا چند زیرشبکه را با هدف Private Service Connect ایجاد می کند .

هنگامی که درخواستی از یک شبکه VPC مصرف کننده ارسال می شود، آدرس IP منبع مصرف کننده با استفاده از NAT منبع (SNAT) به آدرس IP انتخاب شده از یکی از زیرشبکه های Private Service Connect ترجمه می شود.

اگر می خواهید اطلاعات آدرس IP اتصال مصرف کننده را حفظ کنید، به مشاهده اطلاعات اتصال مصرف کننده مراجعه کنید.

این زیرشبکه ها را نمی توان برای منابعی مانند نمونه های VM یا قوانین حمل و نقل استفاده کرد. زیرشبکه ها فقط برای ارائه آدرس های IP برای SNAT اتصالات مصرف کننده ورودی استفاده می شوند.

زیرشبکه Private Service Connect باید حداقل یک آدرس IP برای هر 63 ماشین مجازی مصرف کننده داشته باشد تا به هر VM مصرف کننده 1024 تاپل منبع برای ترجمه آدرس شبکه اختصاص داده شود.

حداقل اندازه برای یک زیرشبکه Private Service Connect 24/ است.

پیوست های سرویس

تولیدکنندگان خدمات خدمات خود را از طریق یک پیوست سرویس در معرض دید قرار می دهند.

  • برای افشای یک سرویس، یک تولید کننده سرویس یک پیوست سرویس ایجاد می کند که به قانون حمل و نقل متعادل کننده بار سرویس اشاره دارد.
  • برای دسترسی به یک سرویس، یک مصرف کننده سرویس یک نقطه پایانی ایجاد می کند که به پیوست سرویس اشاره دارد.

تنظیمات برگزیده اتصال

هنگامی که یک سرویس ایجاد می کنید، نحوه در دسترس قرار دادن آن را انتخاب می کنید. دو گزینه وجود دارد:

  • پذیرش خودکار اتصالات برای همه پروژه ها - هر مصرف کننده سرویس می تواند یک نقطه پایانی را پیکربندی کند و به طور خودکار به سرویس متصل شود.
  • اتصالات را برای پروژه های انتخاب شده بپذیرید - مصرف کنندگان خدمات یک نقطه پایانی را برای اتصال به سرویس پیکربندی می کنند و تولید کننده سرویس درخواست های اتصال را می پذیرد یا رد می کند.

الزامات و محدودیت ها

  • محدودیت‌هایی برای Private Service Connect اعمال می‌شود.
  • می‌توانید یک پیوست سرویس در نسخه‌های GKE 1.21.4-gke.300 و جدیدتر ایجاد کنید.
  • شما نمی توانید از یک زیرشبکه مشابه در تنظیمات پیوست سرویس چندگانه استفاده کنید.
  • شما باید یک سرویس GKE ایجاد کنید که از یک متعادل کننده بار داخلی TCP/UDP استفاده می کند.

5. محیط تست

شبکه مصرف‌کننده شامل یک آدرس IP ثابت است که برای ایجاد درخواست‌ها به تولیدکننده خدمات، علاوه بر پیوست سرویس هدف که به پیوست سرویس تولیدکننده (سرویس منتشر شده) نگاشت می‌شود، استفاده می‌شود.

1ce5607c0c56d77d.jpeg

حالا بیایید نگاهی به شبکه تولیدکنندگان بیندازیم. توجه کنید که چگونه شبکه تولیدکنندگان نقشه ای به شبکه مصرف کنندگان ندارد، در عوض، شبکه تولیدکننده شامل یک پیوست سرویس (سرویس منتشر شده) است که توسط مصرف کننده برای خدمات استفاده می شود. پیوست سرویس تولیدکننده توسط یک ورودی GKE L4 ILB (سرویس منتشر شده) که امکان ارتباط با GKE Pods و برنامه‌های مرتبط را فراهم می‌کند، آشکار می‌شود.

زیرشبکه 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

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود و می توانید هر زمان که بخواهید آن را به روز کنید.
  • شناسه پروژه باید در تمام پروژه‌های Google Cloud منحصربه‌فرد باشد و تغییرناپذیر باشد (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (و معمولاً به عنوان PROJECT_ID شناخته می‌شود)، بنابراین اگر آن را دوست ندارید، یک نمونه تصادفی دیگر ایجاد کنید، یا می‌توانید شناسه پروژه را امتحان کنید و ببینید در دسترس است. سپس پس از ایجاد پروژه "یخ زده" می شود.
  • یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها، باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، دستورالعمل‌های «پاک‌سازی» را که در انتهای Codelab یافت می‌شود دنبال کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

از کنسول GCP روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

bce75f34b2c53987.png

تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

f6ef2b5f13479f3a.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این آزمایشگاه به سادگی با یک مرورگر قابل انجام است.

6. قبل از شروع

Codelab به دو پروژه نیاز دارد، اگرچه برای 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 Producers

afe738fc869f0d6e.png

شبکه VPC

از Cloud Shell

gcloud compute networks create gke-producer-l4-vpc --project=$prodproject --subnet-mode=custom 

زیر شبکه GKE Cluster ایجاد کنید

از 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)

برای استفاده با 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. حجم کار و خدمات را مستقر کنید

مانیفست زیر یک Deployment را توصیف می کند که یک نمونه تصویر ظرف برنامه وب را اجرا می کند. مانیفست را به عنوان my-deployment.yaml از پوسته ابری ذخیره کنید

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

مانیفست را از پوسته ابری روی خوشه خود اعمال کنید

kubectl apply -f my-deployment.yaml

یک سرویس ایجاد کنید

مانیفست زیر سرویسی را توصیف می کند که یک متعادل کننده بار TCP/UDP داخلی در پورت TCP 8080 ایجاد می کند. مانیفست را به عنوان my-service.yaml از پوسته ابری ذخیره کنید.

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

مانیفست را از پوسته ابری روی خوشه خود اعمال کنید

kubectl apply -f my-service.yaml

ServiceAttachment ایجاد کنید

مانیفست زیر یک ServiceAttachment را توصیف می‌کند که سرویسی را که ایجاد کرده‌اید در اختیار مصرف‌کنندگان خدمات قرار می‌دهد. مانیفست را به عنوان my-psc.yaml از پوسته ابری ذخیره کنید.

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

مانیفست را از پوسته ابری روی خوشه خود اعمال کنید

kubectl apply -f my-psc.yaml

ServiceAttachment دارای فیلدهای زیر است:

  • ConnectionPreference: اولویت اتصال که نحوه اتصال مشتریان به سرویس را تعیین می کند. می‌توانید از تأیید خودکار پروژه با استفاده از ACCEPT_AUTOMATIC یا تأیید صریح پروژه با استفاده از ACCEPT_MANUAL استفاده کنید. برای اطلاعات بیشتر، به انتشار خدمات با استفاده از Private Service Connect مراجعه کنید.
  • natSubnets : فهرستی از نام منابع زیرشبکه برای استفاده برای پیوست سرویس.
  • پروکسی پروتکل: وقتی روی true تنظیم شود، IP منبع مصرف کننده و شناسه اتصال اتصال سرویس خصوصی در درخواست ها موجود است. این فیلد اختیاری است و در صورت عدم ارائه به صورت پیش فرض false است.
  • customersAllowList: لیستی از پروژه های مصرف کننده که مجاز به اتصال به ServiceAttachment هستند. این فیلد فقط زمانی قابل استفاده است که ConnectionPreference ACCEPT_MANUAL باشد. برای اطلاعات بیشتر درباره این فیلد و گزینه‌های دیگر، به خدمات انتشار با استفاده از Private Service Connect مراجعه کنید.

اعتبار سنجی تولید کننده

مشاهده جزئیات پیوست سرویس

می توانید جزئیات یک ServiceAttachment را با استفاده از دستور زیر از پوسته ابری مشاهده کنید

kubectl describe serviceattachment emoji-sa

GKE L4 ILB را مشاهده کنید

از کنسول ابری، به خدمات شبکه ← تعادل بار ← Frontends بروید

آدرس IP frontend را که با زیرشبکه نود تعریف شده قبلی 192.168.10.0/24 تراز می شود، شناسایی کنید، به اسکرین شات زیر توجه کنید، آدرس IP شما ممکن است متفاوت باشد.

ed7a25ed4774977b.png

سرویس منتشر شده را مشاهده کنید

از کنسول ابری، به خدمات شبکه → اتصال سرویس خصوصی → خدمات منتشر شده بروید

سرویس را با شبکه مورد استفاده در آزمایشگاه شناسایی کنید، gke-producer-l4-vpc، اسکرین شات زیر را یادداشت کنید، اگرچه مقادیر Service و Target شما ممکن است متفاوت باشد

5a00836ee514b918.png

روی نام سرویسی که شما را به صفحه زیر هدایت می کند، کلیک کنید، به جزئیات پیوست سرویس که در اطلاعات پایه اضافه شده است توجه کنید. همچنین، توجه داشته باشید که "پروژه های متصل" خالی است زیرا مصرف کننده هنوز در این سرویس ثبت نام نکرده است. ACCEPT و REJECT خاکستری باقی می‌مانند زیرا اولویت اتصال روی "ACCEPT_AUTOMATICALLY" تنظیم شده است، این گزینه را می‌توان در هر زمان با تغییر یامل پیوست سرویس (my-psc.yaml) به "ACCEPT_MANUAL" تغییر داد.

497f5f43920018c0.png

e246063a23771273.png

9. شبکه Consumers VPC ایجاد کنید

1f3c90f1e139e906.png

در بخش زیر، VPC مصرف کننده در یک پروژه جداگانه پیکربندی شده است. ارتباط بین شبکه مصرف کننده و تولید کننده از طریق پیوست سرویس تعریف شده در شبکه مصرف کنندگان انجام می شود.

Codelab به دو پروژه نیاز دارد، اگرچه برای 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. یک پیوست سرویس ایجاد کنید

در مرحله قبل، رشته پیوست سرویس تولیدکننده را در مکانی امن کپی کردید، بیایید مقدار ذخیره شده را در قسمت "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

از پوسته استفاده از Consumer VPCs 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

سرویس متصل را مشاهده کنید

از کنسول ابری، به خدمات شبکه → اتصال سرویس خصوصی → نقاط پایانی متصل بروید و نقطه پایانی تازه ایجاد شده را مشاهده کنید.

206bc00297aaa260.png

اجازه می دهد تا وارد Consumer-instance-1 شویم و دسترسی به سرویس منتشر شده تولید کننده را آزمایش کنیم

از پوسته ابری با کلیک بر روی + یک تب جدید باز کنید

81f3210b29faebd3.png

از پوسته ابری موارد زیر را انجام دهید:

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"

پس از وارد شدن به نمونه مصرف کننده-نمونه-1، در مقابل قانون حمل و نقل، آدرس IP 10.0.60.100 را انجام دهید.

از پوسته ابری موارد زیر را انجام دهید:

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 شویم و دسترسی به سرویس منتشر شده تولیدکننده را آزمایش کنیم

از پوسته ابری با کلیک بر روی + یک تب جدید باز کنید

81f3210b29faebd3.png

از پوسته ابری موارد زیر را انجام دهید:

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"

از پوسته ابری موارد زیر را انجام دهید:

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. ورود به سیستم فایروال - اعتبار سنجی اختصاص داده شده

با استفاده از قانون فایروال اعتبارسنجی Logs Explorer "vpc-consumner-psc" جریان بین نمونه VM و IP استاتیک را ضبط می کند.

  1. از Cloud Console، Loging عملیات → Log Explorer را شناسایی کنید
  2. در قسمت Query ورودی زیر را با yourconsumerproject به روز کنید و "Run Query" را انتخاب کنید

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 است که برای دسترسی به سرویس تولیدکننده استفاده می شود و src_ip: 10.0.70.10 یا 10.0.70.20 آدرس(های IP) نمونه VM هستند. واگذاری مجاز است.

2669743fd1f1cb0d.png

15. اعتبار سنجی - تولید کننده

afe738fc869f0d6e.png

از پروژه Producers تأیید کنید که پیوست سرویس با موفقیت وصل شده است. به خدمات شبکه → اتصال سرویس خصوصی → خدمات منتشر شده بروید

89ded87a63888f60.png

روی این سرویس کلیک کنید، پروژه و وضعیت مصرف کننده متصل شما را همانطور که در زیر نشان داده شده است نشان می دهد

15966d47423ebc5f.png

16. دسترسی به یک سرویس منتشر شده را محدود کنید

1f3c90f1e139e906.png

تاکنون تأیید کرده‌ایم که هر دو نمونه به سرویس‌های منتشر شده دسترسی دارند، بیایید یک قانون فایروال Egress ایجاد کنیم تا دسترسی مصرف‌کننده نمونه-2 به سرویس منتشر شده را رد کنیم.

به‌طور پیش‌فرض GCP به همه Egress اجازه می‌دهد اما همه ترافیک ورودی را رد می‌کند. در مراحل بعدی، یک قانون فایروال را بر اساس یک تگ شبکه تعریف شده قبلی «google2» ایجاد خواهیم کرد که در هنگام ایجاد consumer-instance-2 برای جلوگیری از دسترسی به سرویس منتشر شده استفاده می شود.

7fa2cda1dfec33a.png

با کلیک بر روی + اجرای قانون فایروال زیر در پوسته ابری، یک تب جدید پوسته ابری باز کنید

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

اکنون، بیایید آزمایش کنیم که آیا customers-instance-2 قادر به دسترسی به سرویس منتشر شده است یا خیر. اگر زمان جلسه شما تمام شد، باید یک پوسته ابری + جدید باز کنید و همانطور که در زیر توضیح داده شده است وارد 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"

از پوسته ابری موارد زیر را انجام دهید:

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، Loging عملیات → Log Explorer را شناسایی کنید
  2. در قسمت Query ورودی زیر را با 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. مراحل پاکسازی

مراحل پاکسازی شبکه تولیدکننده

afe738fc869f0d6e.png

از یک پوسته ابری در ترمینال پروژه 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

مراحل پاکسازی شبکه مصرف کننده

از یک پوسته ابری در ترمینال پروژه مصرف کننده، اجزای آزمایشگاه را حذف کنید

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. تبریک!

برای تکمیل کد لبه تبریک می گویم.

آنچه را پوشش داده ایم

  • مزایای اتصال سرویس خصوصی
  • مفاهیم کلیدی برای مصرف کنندگان خدمات
  • مفاهیم کلیدی برای تولیدکنندگان خدمات
  • یک محیط تولید کننده ایجاد کنید
  • خدمات (محیط تولیدکننده) را از طریق پیوست سرویس در معرض دید قرار دهید
  • یک محیط مصرف کننده ایجاد کنید
  • یک قانون حمل و نقل در شبکه مصرف کننده ایجاد کنید
  • اعتبار دسترسی مصرف کننده
  • کنترل دسترسی خط مشی را فعال کنید
  • از یک قانون فایروال خروجی برای مسدود کردن دسترسی به قانون حمل و نقل مصرف کننده استفاده کرد