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

۱. مقدمه

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

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

45b90d50690dd111.png

شکل ۲. سرویس خصوصی 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 ثابت است که برای ارسال درخواست‌ها به تولیدکننده سرویس استفاده می‌شود، علاوه بر پیوست سرویس هدف که به پیوست سرویس تولیدکننده (سرویس منتشر شده) نگاشت می‌شود.

۱ce5607c0c56d77d.jpeg

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

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

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

برای کسب اطلاعات بیشتر در مورد L4ILB برای GKE Private Service Connect و دسترسی مستقیم به محتوای مورد استفاده در ساخت این آزمایشگاه، به موارد زیر مراجعه کنید.

تنظیم محیط خودتنظیم

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

این ماشین مجازی مجهز به تمام ابزارهای توسعه مورد نیاز شماست. این ماشین یک دایرکتوری خانگی دائمی ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه را می‌توان به سادگی با یک مرورگر انجام داد.

۶. قبل از شروع

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

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

afe738fc869f0d6e.png

شبکه 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 شما ممکن است متفاوت باشد.

ed7a25ed4774977b.png

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

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

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

5a00836ee514b918.png

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

497f5f43920018c0.png

e246063a23771273.png

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

۱f3c90f1e139e906.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

از پوسته ابری

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" وارد کنیم.

7abacc4e24f1ef7.png

از پوسته ابری

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

۱f3c90f1e139e906.png

از پوسته‌ی استفاده‌ی 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 بروید و نقطه پایانی تازه ایجاد شده را مشاهده کنید.

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"

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

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

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"

۱۴. ثبت وقایع فایروال - اعتبارسنجی تخصیص‌یافته

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

  1. از کنسول ابری، ثبت عملیات را شناسایی کنید → کاوشگر گزارش
  2. در فیلد Query، ورودی زیر را با yourconsumerproject به‌روزرسانی کنید و "اجرای پرس‌وجو" را انتخاب کنید.

نام لاگ:(projects/ yourconsumerprojectID /logs/compute.googleapis.com%2Ffirewall) و 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 است که برای دسترسی به سرویس تولیدکننده استفاده می‌شود و src_ip: 10.0.70.10 یا 10.0.70.20 آدرس IP نمونه ماشین مجازی هستند. وضعیت مجاز است.

۲۶۶۹۷۴۳fd1f1cb0d.png

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

afe738fc869f0d6e.png

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

89ded87a63888f60.png

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

15966d47423ebc5f.png

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

۱f3c90f1e139e906.png

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

به طور پیش‌فرض، GCP به همه ترافیک‌های خروجی (Egress) اجازه عبور می‌دهد، اما همه ترافیک‌های ورودی (Ingress) را مسدود می‌کند. در مراحل بعدی، یک قانون فایروال بر اساس برچسب شبکه‌ای از پیش تعریف شده '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 جدید + باز کنید و طبق جزئیات زیر وارد ماشین مجازی شوید.

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 استاتیک است.

  1. از کنسول ابری، ثبت عملیات را شناسایی کنید → کاوشگر گزارش
  2. در فیلد Query، ورودی زیر را با yourconsumerproject به‌روزرسانی کنید و "اجرای پرس‌وجو" را انتخاب کنید.

نام لاگ:(projects/ yourconsumerprojectID /logs/compute.googleapis.com%2Ffirewall) و 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) توجه کنید. وضعیت (Disposition) رد شده (Denied) است.

a344f75f67590655.png

۱۷. مراحل پاکسازی

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

afe738fc869f0d6e.png

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

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

۱f3c90f1e139e906.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

۱۸. تبریک می‌گویم!

تبریک می‌گویم که آزمایشگاه کد را تمام کردی.

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

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