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

شکل ۲. سرویس خصوصی Connect از نقاط پایانی و پیوستهای سرویس استفاده میکند تا به مصرفکنندگان سرویس اجازه دهد ترافیک را از شبکه VPC مصرفکننده به سرویسهای موجود در شبکه VPC تولیدکننده سرویس ارسال کنند (برای بزرگنمایی کلیک کنید).
آنچه یاد خواهید گرفت
- مزایای اتصال به سرویس خصوصی
- مفاهیم کلیدی برای مصرفکنندگان خدمات
- مفاهیم کلیدی برای تولیدکنندگان خدمات
- ایجاد یک محیط تولیدکننده
- ارائه سرویس (محیط تولیدکننده) از طریق یک پیوست سرویس
- ایجاد یک محیط مصرف کننده
- ایجاد یک قانون ارسال در شبکه مصرفکننده
- اعتبارسنجی دسترسی مصرفکننده
- فعال کردن کنترل دسترسی به سیاست
- از یک قانون فایروال خروجی برای مسدود کردن دسترسی به یک قانون ارسال مصرفکننده استفاده کنید
آنچه نیاز دارید
- آشنایی با استقرار کلاسترها و سرویسهای GKE
- آشنایی با متعادلکنندههای بار داخلی
- امکان ایجاد VPC در دو پروژه
- امکان ایجاد خوشه GKE
۲. مزایای اتصال به سرویس خصوصی
با PSC، در مقایسه با استفاده از VPC Peering، مزایای متعددی دارید:
کنترل بهتر فضای IP خصوصی
- به عنوان یک مصرفکننده سرویس، میتوانید آدرس IP خصوصی مورد استفاده برای اتصال به سرویس مدیریتشدهای که میخواهید به آن دسترسی داشته باشید را کنترل کنید.
- به عنوان یک مصرفکننده سرویس، نیازی نیست نگران رزرو محدوده آدرسهای IP خصوصی برای سرویسهای backend که در VPC شما مصرف میشوند، باشید. شما فقط باید یک آدرس IP از زیرشبکه خود برای اتصال به سرویسهای تولیدکننده انتخاب کنید.
- به عنوان یک تولیدکننده سرویس، میتوانید مدل چند مستاجری را پیادهسازی کنید، که در آن VPC شما شامل سرویسهایی است که به چندین VPC مصرفکننده خدمات ارائه میدهند. مصرفکنندگانی که محدودههای زیرشبکه همپوشانی دارند، دیگر مشکلی ایجاد نمیکنند.
- به عنوان یک ارائه دهنده خدمات، میتوانید خدمات خود را به هر تعداد نمونه ماشین مجازی که نیاز دارید، بدون نیاز به تماس با مصرف کننده برای آدرسهای IP بیشتر، گسترش دهید.
امنیت و انزوای بهبود یافته
- به عنوان یک مصرفکننده سرویس، فقط شما میتوانید ارتباط با تولیدکننده سرویس را آغاز کنید. این اتصال یکطرفه، پیکربندی فایروال را به طرز چشمگیری ساده میکند، اما همچنین خطر ناشی از ترافیک سرکش از تولیدکننده سرویس را کاهش میدهد.
- به عنوان یک تولیدکننده سرویس، نیازی نیست قوانین فایروال خود را بر اساس محدودههای زیرشبکه در VPC مصرفکننده تغییر دهید. میتوانید به سادگی قوانین فایروال را برای محدوده آدرس IP NAT پیکربندی شده برای سرویس خود ایجاد کنید.
مقیاسپذیری بهتر
- PSC با پشتیبانی از هزاران مصرفکننده، طراحی بسیار مقیاسپذیر را امکانپذیر میکند و به تولیدکنندگان خدمات اجازه میدهد تا خدمات چندمستاجری یا تکمستاجری بسیار مقیاسپذیر ارائه دهند.
- به عنوان یک مصرفکننده سرویس که از اتصال سرویس خصوصی استفاده میکند، میتوانید منابع مورد نیاز را در VPC خود ایجاد کنید. مقیاس این امر تحت تأثیر تعداد چنین منابعی که در VPC تولیدکننده ایجاد میشوند، قرار نمیگیرد.
۳. مفاهیم کلیدی برای مصرفکنندگان خدمات
شما میتوانید از نقاط پایانی Private Service Connect برای استفاده از سرویسهایی که خارج از شبکه VPC شما هستند استفاده کنید. مصرفکنندگان سرویس، نقاط پایانی Private Service Connect را ایجاد میکنند که به یک سرویس هدف متصل میشوند.
نقاط پایانی
شما از نقاط پایانی Private Service Connect برای اتصال به یک سرویس هدف استفاده میکنید. نقاط پایانی دارای یک آدرس IP داخلی در شبکه VPC شما هستند و بر اساس منبع قانون ارسال عمل میکنند.
شما ترافیک را به نقطه پایانی ارسال میکنید، که آن را به اهداف خارج از شبکه VPC شما ارسال میکند.
اهداف
نقاط پایانی Private Service Connect یک هدف دارند، که همان سرویسی است که میخواهید به آن متصل شوید:
- یک بسته API :
- همه APIها: اکثر APIهای گوگل
- VPC-SC: رابطهای برنامهنویسی کاربردی (API) که VPC Service Controls از آنها پشتیبانی میکند
- یک سرویس منتشر شده در یک شبکه VPC دیگر. این سرویس میتواند توسط سازمان شما یا شخص ثالث مدیریت شود.
خدمات منتشر شده
برای اتصال نقطه پایانی خود به سرویس یک تولیدکننده سرویس، به پیوست سرویس برای آن سرویس نیاز دارید. URI پیوست سرویس دارای این فرمت است: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME
۴. مفاهیم کلیدی برای تولیدکنندگان خدمات
برای اینکه یک سرویس در دسترس مصرفکنندگان قرار گیرد، شما یک یا چند زیرشبکه اختصاصی ایجاد میکنید تا از آنها برای ترجمه آدرس شبکه (NAT) آدرسهای IP مصرفکنندگان استفاده کنید. سپس یک پیوست سرویس ایجاد میکنید که به آن زیرشبکهها اشاره دارد.
زیرشبکههای اتصال سرویس خصوصی
برای نمایش یک سرویس، تولیدکننده سرویس ابتدا یک یا چند زیرشبکه با هدف اتصال سرویس خصوصی ایجاد میکند .
وقتی درخواستی از شبکه VPC مصرفکننده ارسال میشود، آدرس IP منبع مصرفکننده با استفاده از NAT منبع (SNAT) به آدرس IP انتخاب شده از یکی از زیرشبکههای Private Service Connect ترجمه میشود.
اگر میخواهید اطلاعات آدرس IP اتصال مصرفکننده را حفظ کنید، به مشاهده اطلاعات اتصال مصرفکننده مراجعه کنید.
این زیرشبکهها نمیتوانند برای منابعی مانند نمونههای ماشین مجازی یا قوانین ارسال استفاده شوند. این زیرشبکهها فقط برای ارائه آدرسهای IP برای SNAT اتصالات ورودی مصرفکننده استفاده میشوند.
زیرشبکه Private Service Connect باید حداقل شامل یک آدرس IP برای هر ۶۳ ماشین مجازی مصرفکننده باشد تا به هر ماشین مجازی مصرفکننده ۱۰۲۴ تاپل منبع برای ترجمه آدرس شبکه اختصاص داده شود.
حداقل اندازه برای یک زیرشبکه Private Service Connect، /24 است.
پیوستهای خدمات
تولیدکنندگان خدمات، خدمات خود را از طریق پیوست خدمات ارائه میدهند.
- برای نمایش یک سرویس، تولیدکننده سرویس یک پیوست سرویس ایجاد میکند که به قانون ارسال متعادلکننده بار سرویس اشاره دارد.
- برای دسترسی به یک سرویس، یک مصرفکننده سرویس یک نقطه پایانی ایجاد میکند که به پیوست سرویس اشاره دارد.
تنظیمات اتصال
وقتی سرویسی ایجاد میکنید، نحوهی در دسترس قرار دادن آن را انتخاب میکنید. دو گزینه وجود دارد:
- پذیرش خودکار اتصالات برای همه پروژهها - هر مصرفکننده سرویس میتواند یک نقطه پایانی را پیکربندی کرده و به طور خودکار به سرویس متصل شود.
- پذیرش اتصالات برای پروژههای انتخابشده - مصرفکنندگان سرویس، یک نقطه پایانی را برای اتصال به سرویس پیکربندی میکنند و تولیدکننده سرویس درخواستهای اتصال را میپذیرد یا رد میکند.
الزامات و محدودیتها
- محدودیتهایی برای Private Service Connect اعمال میشود.
- شما میتوانید یک پیوست سرویس در نسخههای 1.21.4-gke.300 و بالاتر GKE ایجاد کنید.
- شما نمیتوانید از یک زیرشبکه در پیکربندیهای پیوست چندین سرویس استفاده کنید.
- شما باید یک سرویس GKE ایجاد کنید که از یک متعادلکننده بار TCP/UDP داخلی استفاده کند.
۵. محیط آزمایش
شبکه مصرفکننده شامل یک آدرس IP ثابت است که برای ارسال درخواستها به تولیدکننده سرویس استفاده میشود، علاوه بر پیوست سرویس هدف که به پیوست سرویس تولیدکننده (سرویس منتشر شده) نگاشت میشود.

حال، بیایید نگاهی به شبکه تولیدکنندگان بیندازیم. توجه کنید که چگونه شبکه تولیدکنندگان به شبکه مصرفکنندگان نگاشت ندارد، در عوض، شبکه تولیدکننده شامل یک پیوست سرویس (سرویس منتشر شده) است که توسط مصرفکننده برای خدمات استفاده میشود. پیوست سرویس تولیدکننده توسط یک ورودی GKE L4 ILB (سرویس منتشر شده) در معرض دید قرار میگیرد که امکان ارتباط با GKE Pods و برنامههای مرتبط را فراهم میکند.
زیرشبکه NAT زمانی استفاده میشود که درخواستی از شبکه VPC مصرفکننده ارسال شود، آدرس IP منبع مصرفکننده با استفاده از NAT منبع (SNAT) به آدرس IP انتخاب شده از یکی از زیرشبکههای Private Service Connect ترجمه میشود.
این زیرشبکهها نمیتوانند برای منابعی مانند نمونههای ماشین مجازی یا قوانین ارسال استفاده شوند. این زیرشبکهها فقط برای ارائه آدرسهای IP برای SNAT اتصالات ورودی مصرفکننده استفاده میشوند.
برای کسب اطلاعات بیشتر در مورد L4ILB برای GKE Private Service Connect و دسترسی مستقیم به محتوای مورد استفاده در ساخت این آزمایشگاه، به موارد زیر مراجعه کنید.
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه ، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود و شما میتوانید آن را در هر زمانی بهروزرسانی کنید.
- شناسه پروژه باید در تمام پروژههای گوگل کلود منحصر به فرد باشد و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاههای کد، باید به شناسه پروژه ارجاع دهید (و معمولاً با نام
PROJECT_IDشناخته میشود)، بنابراین اگر آن را دوست ندارید، یک شناسه تصادفی دیگر ایجاد کنید، یا میتوانید شناسه خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. سپس پس از ایجاد پروژه، آن "منجمد" میشود. - یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده میکنند. برای اطلاعات بیشتر در مورد هر سه این مقادیر به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/APIهای ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، دستورالعملهای «پاکسازی» موجود در انتهای آزمایشگاه کد را دنبال کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
شروع پوسته ابری
اگرچه میتوان از راه دور و از طریق لپتاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده خواهید کرد.
از کنسول GCP روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

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

این ماشین مجازی مجهز به تمام ابزارهای توسعه مورد نیاز شماست. این ماشین یک دایرکتوری خانگی دائمی ۵ گیگابایتی ارائه میدهد و روی فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. تمام کارهای شما در این آزمایشگاه را میتوان به سادگی با یک مرورگر انجام داد.
۶. قبل از شروع
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
به قرارداد کد رنگآمیزی زیر توجه کنید:

۷. شبکه VPC تولیدکنندگان را ایجاد کنید

شبکه VPC
از پوسته ابری
gcloud compute networks create gke-producer-l4-vpc --project=$prodproject --subnet-mode=custom
ایجاد زیرشبکه کلاستر GKE
از پوسته ابری
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
از پوسته ابری
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
ایجاد یک زیرشبکه برای اتصال سرویس خصوصی (زیرشبکه NAT)
شما باید یک یا چند زیرشبکه اختصاصی برای استفاده با Private Service Connect ایجاد کنید. اگر از کنسول Google Cloud برای انتشار یک سرویس استفاده میکنید، میتوانید زیرشبکهها را در طول این فرآیند ایجاد کنید.
برای اطلاعات بیشتر در مورد زیرشبکههای Private Service Connect، به زیرشبکههای Private Service Connect مراجعه کنید.
از پوسته ابری
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
۸. حجم کار و سرویسها را مستقر کنید
مانیفست زیر یک Deployment را توصیف میکند که یک تصویر کانتینر برنامه وب نمونه را اجرا میکند. مانیفست را با نام 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
مانیفست را از پوسته ابری به خوشه خود اعمال کنید
kubectl apply -f my-deployment.yaml
ایجاد یک سرویس
مانیفست زیر سرویسی را توصیف میکند که یک متعادلکننده بار TCP/UDP داخلی روی پورت TCP 8080 ایجاد میکند. مانیفست را با نام 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
مانیفست را از پوسته ابری به خوشه خود اعمال کنید
kubectl apply -f my-service.yaml
ایجاد پیوست سرویس
مانیفست زیر یک ضمیمه سرویس (ServiceAttachment) را توصیف میکند که سرویسی را که ایجاد کردهاید در معرض دید مصرفکنندگان سرویس قرار میدهد. مانیفست را با نام 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
مانیفست را از پوسته ابری به خوشه خود اعمال کنید
kubectl apply -f my-psc.yaml
پیوست سرویس (ServiceAttachment) دارای فیلدهای زیر است:
- connectionPreference: اولویت اتصال که نحوه اتصال مشتریان به سرویس را تعیین میکند. میتوانید از تأیید خودکار پروژه با استفاده از ACCEPT_AUTOMATIC یا تأیید صریح پروژه با استفاده از ACCEPT_MANUAL استفاده کنید. برای اطلاعات بیشتر، به انتشار خدمات با استفاده از Private Service Connect مراجعه کنید.
- natSubnets : فهرستی از نامهای منابع زیرشبکه که برای پیوست سرویس استفاده میشوند.
- proxyProtocol: وقتی روی true تنظیم شود، IP منبع مصرفکننده و شناسه اتصال سرویس خصوصی در درخواستها موجود است. این فیلد اختیاری است و در صورت عدم ارائه، به طور پیشفرض روی false تنظیم میشود.
- consumerAllowList: فهرست پروژههای مصرفکنندهای که مجاز به اتصال به ServiceAttachment هستند. این فیلد فقط زمانی قابل استفاده است که connectionPreference روی ACCEPT_MANUAL باشد. برای اطلاعات بیشتر در مورد این فیلد و سایر گزینهها، به بخش انتشار سرویسها با استفاده از Private Service Connect مراجعه کنید.
اعتبارسنجی تولیدکننده
مشاهده جزئیات پیوست خدمات
شما میتوانید جزئیات یک ServiceAttachment را با استفاده از دستور زیر از cloud shell مشاهده کنید.
kubectl describe serviceattachment emoji-sa
GKE L4 ILB را مشاهده کنید
از کنسول ابری، به سرویسهای شبکه → متعادلسازی بار → فرانتاندها بروید
آدرس IP سمت سرور را که با زیرشبکه گره تعریف شده قبلی 192.168.10.0/24 همتراز است، شناسایی کنید. به تصویر زیر توجه کنید، آدرس IP شما ممکن است متفاوت باشد.

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

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


۹. شبکه VPC مصرفکنندگان ایجاد کنید

در بخش بعدی، 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
از پوسته ابری
gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom
ایجاد زیرشبکه برای PSC
از پوسته ابری
gcloud compute networks subnets create consumer-subnet --project=$consumerproject --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-central1
ایجاد زیرشبکه برای نمونههای ماشین مجازی
از پوسته ابری
gcloud compute networks subnets create consumer-subnet-vm --project=$consumerproject --range=10.0.70.0/24 --network=vpc-demo-consumer --region=us-central1
برای دسترسی به سرویس منتشر شده، یک آدرس IP ثابت ایجاد کنید
از پوسته ابری
gcloud compute addresses create vpc-consumer-psc --region=us-central1 --subnet=consumer-subnet --addresses 10.0.60.100
ایجاد قوانین فایروال
برای اینکه به IAP اجازه دهید به ماشینهای مجازی شما متصل شود، یک قانون فایروال ایجاد کنید که:
- برای تمام نمونههای ماشین مجازی که میخواهید با استفاده از IAP به آنها دسترسی داشته باشید، اعمال میشود.
- اجازه ورود ترافیک از محدوده IP 35.235.240.0/20 را میدهد. این محدوده شامل تمام آدرسهای IP است که IAP برای ارسال TCP استفاده میکند.
از پوسته ابری
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
۱۰. نمونه آزمایشی مصرفکننده ۱ را ایجاد کنید
از پوسته ابری
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
۱۱. نمونه آزمایشی مصرفکننده ۲ را ایجاد کنید
از پوسته ابری
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
۱۲. یک پیوست خدمات ایجاد کنید
در مرحله قبل، رشته پیوست سرویس تولیدکننده را در یک مکان امن کپی کردید، بیایید مقدار ذخیره شده را در فیلد "target-service-attachment" وارد کنیم.

از پوسته ابری
gcloud compute forwarding-rules create vpc-consumer-psc-fr --region=us-central1 --network=vpc-demo-consumer --address=vpc-consumer-psc --target-service-attachment=yoursavedproducerserviceattachment
۱۳. اعتبارسنجی - مصرفکننده
ما از لاگهای CURL و فایروال برای اعتبارسنجی ارتباطات مصرفکننده و تولیدکننده استفاده خواهیم کرد.
در پروژه مصرفکننده، آدرسهای IP استاتیک برای شروع ارتباط با تولیدکننده استفاده میشوند. این نگاشت آدرس IP استاتیک به قانون ارسال مصرفکننده با اجرای دستور زیر اعتبارسنجی میشود.

از پوستهی استفادهی Cloud در VPCهای مصرفکننده، قانون ارسال و 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
مشاهده سرویس متصل
از کنسول ابری، به Network Services → Private Service Connect → Connected Endpoints بروید و نقطه پایانی تازه ایجاد شده را مشاهده کنید.

بیایید وارد consumer-instance-1 شویم و دسترسی به سرویس منتشر شده توسط تولیدکننده را آزمایش کنیم.
از پوسته ابری، با کلیک روی +، یک برگه جدید باز کنید

از پوسته ابری موارد زیر را انجام دهید:
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 انجام دهید.
از پوسته ابری موارد زیر را انجام دهید:
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 شویم و دسترسی به سرویس منتشر شده توسط تولیدکننده را آزمایش کنیم.
از پوسته ابری، با کلیک روی +، یک برگه جدید باز کنید

از پوسته ابری موارد زیر را انجام دهید:
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"
۱۴. ثبت وقایع فایروال - اعتبارسنجی تخصیصیافته
استفاده از Logs Explorer برای اعتبارسنجی قانون فایروال "vpc-consumner-psc" در حال ثبت جریان بین نمونه ماشین مجازی و IP استاتیک است.
- از کنسول ابری، ثبت عملیات را شناسایی کنید → کاوشگر گزارش
- در فیلد Query، ورودی زیر را با yourconsumerproject بهروزرسانی کنید و "اجرای پرسوجو" را انتخاب کنید.
نام لاگ:(projects/ yourconsumerprojectID /logs/compute.googleapis.com%2Ffirewall) و jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")
- نتایج پرس و جو مطابق با اسکرین شات ارائه شده، موارد زیر را ارائه میدهد.

- فایل لاگ (jsonPayload → Connection) را باز کنید و خروجی زیر را شناسایی کنید. به dest_ip: 10.0.60.100 توجه کنید که آدرس IP استاتیک TCP است که برای دسترسی به سرویس تولیدکننده استفاده میشود و src_ip: 10.0.70.10 یا 10.0.70.20 آدرس IP نمونه ماشین مجازی هستند. وضعیت مجاز است.

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

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

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

۱۶. محدود کردن دسترسی به یک سرویس منتشر شده

تا اینجا تأیید کردیم که هر دو نمونه به سرویسهای منتشر شده دسترسی دارند، بیایید یک قانون فایروال خروجی ایجاد کنیم تا دسترسی consumer-instance-2 به سرویس منتشر شده را رد کنیم.
به طور پیشفرض، GCP به همه ترافیکهای خروجی (Egress) اجازه عبور میدهد، اما همه ترافیکهای ورودی (Ingress) را مسدود میکند. در مراحل بعدی، یک قانون فایروال بر اساس برچسب شبکهای از پیش تعریف شده '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 جدید + باز کنید و طبق جزئیات زیر وارد ماشین مجازی شوید.
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" در حال ثبت جریان بین نمونه ماشین مجازی و IP استاتیک است.
- از کنسول ابری، ثبت عملیات را شناسایی کنید → کاوشگر گزارش
- در فیلد Query، ورودی زیر را با yourconsumerproject بهروزرسانی کنید و "اجرای پرسوجو" را انتخاب کنید.
نام لاگ:(projects/ yourconsumerprojectID /logs/compute.googleapis.com%2Ffirewall) و 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) توجه کنید. وضعیت (Disposition) رد شده (Denied) است.

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

از یک پوسته ابری واحد در ترمینال پروژه تولیدکننده، اجزای آزمایشگاه را حذف کنید
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

مراحل پاکسازی شبکه مصرفکننده
از یک پوسته ابری واحد در ترمینال پروژه مصرفکننده، اجزای آزمایشگاه را حذف کنید
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
۱۸. تبریک میگویم!
تبریک میگویم که آزمایشگاه کد را تمام کردی.
آنچه ما پوشش دادهایم
- مزایای اتصال به سرویس خصوصی
- مفاهیم کلیدی برای مصرفکنندگان خدمات
- مفاهیم کلیدی برای تولیدکنندگان خدمات
- ایجاد یک محیط تولیدکننده
- ارائه سرویس (محیط تولیدکننده) از طریق یک پیوست سرویس
- ایجاد یک محیط مصرف کننده
- ایجاد یک قانون ارسال در شبکه مصرفکننده
- اعتبارسنجی دسترسی مصرفکننده
- فعال کردن کنترل دسترسی به سیاست
- از یک قانون فایروال خروجی برای مسدود کردن دسترسی به یک قانون ارسال مصرفکننده استفاده شد