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

۱. مقدمه

یک استراتژی ترکیبی، یک راه حل عملی برای شماست تا با نیازهای متغیر بازار سازگار شوید و برنامه‌های خود را به تدریج مدرن کنید. پشتیبانی ترکیبی از متعادل‌کننده‌های بار HTTP(s) خارجی و داخلی Google Cloud، متعادل‌سازی بار ابری را به backendهای مستقر در محل و در سایر ابرها گسترش می‌دهد و یک عامل کلیدی برای استراتژی ترکیبی شما است. این می‌تواند موقت باشد تا مهاجرت به یک راه حل مدرن مبتنی بر ابر یا یک بخش دائمی از زیرساخت فناوری اطلاعات سازمان شما را امکان‌پذیر کند.

3312e69c63b02f73.png

در این آزمایش، شما یاد خواهید گرفت که چگونه یک گروه نقطه پایانی شبکه (NEG) با استفاده از دو ماشین مجازی که از یک متعادل‌کننده بار سراسری HTTP(s) خارجی قابل دسترسی هستند، ایجاد کنید. اگرچه NEG در آزمایش درون GCP است، اما از همان رویه برای ارتباط با منابع عمومی یا داخلی با قابلیت دسترسی IP استفاده می‌شود.

آنچه یاد خواهید گرفت

  • یک VPC سفارشی ایجاد کنید
  • دو ماشین مجازی (VM) ایجاد کنید که به عنوان یک گروه نقطه پایانی شبکه (NEG) استفاده شوند.
  • ایجاد یک متعادل‌کننده بار ترکیبی، سرویس backend و بررسی‌های سلامت مرتبط
  • یک قانون فایروال ایجاد کنید که امکان دسترسی به Load Balancer را فراهم کند.
  • روتر ابری و NAT ایجاد خواهند شد تا امکان به‌روزرسانی بسته‌ها از طریق اینترنت فراهم شود.
  • اعتبارسنجی دسترسی‌پذیری گروه نقاط پایانی شبکه

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

  • آشنایی با متعادل کننده‌های بار

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعمل‌های بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش می‌دهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

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

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

۲. قبل از شروع

داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]

Perform setting your projectID:
projectid=YOUR-PROJECT-ID
echo $projectid

۳. یک شبکه VPC حالت سفارشی جدید ایجاد کنید

در این کار، شما یک ابر خصوصی مجازی (VPC) ایجاد خواهید کرد که پایه و اساس شبکه است.

شبکه VPC

از پوسته ابری

gcloud compute networks create hybrid-network-lb --subnet-mode custom

ایجاد زیرشبکه

از پوسته ابری

gcloud compute networks subnets create network-endpoint-group-subnet --network hybrid-network-lb --range 192.168.10.0/24 --region us-west1

ایجاد نمونه Cloud NAT

اگرچه شبکه ترکیبی الزامی نیست، اما نمونه محاسباتی برای دانلود برنامه‌ها و به‌روزرسانی‌ها به اتصال اینترنت نیاز دارد.

در این کار، شما یک روتر ابری و نمونه NAT ایجاد خواهید کرد که امکان اتصال اینترنت به نمونه‌های ماشین مجازی را فراهم می‌کند.

ایجاد روتر ابری

از پوسته ابری

gcloud compute routers create crnat --network hybrid-network-lb --region us-west1

ایجاد NAT ابری

از پوسته ابری

gcloud compute routers nats create cloudnat --router=crnat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west1

۴. دو نمونه ماشین مجازی ایجاد کنید

در این تمرین، شما دو نمونه ماشین مجازی (VM) که آپاچی را اجرا می‌کنند، ایجاد خواهید کرد. بعداً در طول آزمایش، این نمونه‌های ماشین مجازی به یک گروه نقطه پایانی شبکه (NEG) تبدیل می‌شوند.

از Cloud Shell اولین نمونه on-prem، on-prem-neg-1 را ایجاد کنید.

gcloud compute instances create on-prem-neg-1 \
    --zone=us-west1-a \
    --tags=allow-health-check \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=network-endpoint-group-subnet --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

از Cloud Shell اولین نمونه on-prem، on-prem-neg-2 را ایجاد کنید.

gcloud compute instances create on-prem-neg-2 \
    --zone=us-west1-a \
    --tags=allow-health-check \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=network-endpoint-group-subnet --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

۵. یک NEG حاوی نقطه پایانی داخلی خود ایجاد کنید

ابتدا، یک NEG با نام‌های on-prem-neg-1 و on-prem-neg-2 ایجاد کنید. همچنین مشخص خواهید کرد که LB باید در نظر بگیرد که برای اهداف مسیریابی و متعادل‌سازی بار، این نقاط پایانی در منطقه‌ی GCP مربوط به us-west1-a قرار دارند. توصیه می‌کنیم منطقه‌ی پیکربندی‌شده با هر منطقه‌ای که با منطقه‌ی Interconnect Attachment/VPN Gateway برای اندازه‌گیری‌های متعادل‌سازی بار مبتنی بر مجاورت که برای متعادل‌سازی بار استفاده می‌شوند، مرتبط است، مطابقت داشته باشد.

از Cloud Shell، ایجاد on-prem-neg-1

gcloud compute network-endpoint-groups create on-prem-neg-1 \
    --network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
    --zone "us-west1-a" \
    --network hybrid-network-lb

از Cloud Shell، ایجاد on-prem-neg-2

gcloud compute network-endpoint-groups create on-prem-neg-2 \
    --network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
    --zone "us-west1-a" \
    --network hybrid-network-lb

در codelab، گروه نقطه پایانی شبکه یک نمونه GCE است که آپاچی را در GCP اجرا می‌کند. به طور جایگزین، می‌توانید یک نقطه پایانی داخلی یا اینترنتی را به عنوان نقطه پایانی شبکه خود مشخص کنید.

از Cloud Shell آدرس‌های IP مربوط به GCE را شناسایی کنید

gcloud compute instances list | grep -i on-prem

گروه نقطه پایانی شبکه را به آدرس IP نمونه GCE که قبلاً در مرحله قبل شناسایی شده است، برای هر neg، on-prem-neg-1 & on-prem-neg-2.

از Cloud Shell associate on-prem-neg-1، xxxx را با IP شناسایی شده خود به‌روزرسانی کنید.

gcloud compute network-endpoint-groups update on-prem-neg-1 \
    --zone="us-west1-a" \
    --add-endpoint="ip=x.x.x.x,port=80"

از Cloud Shell associate on-prem-neg-2، xxxx را با IP شناسایی شده خود به‌روزرسانی کنید.

gcloud compute network-endpoint-groups update on-prem-neg-2 \
    --zone="us-west1-a" \
    --add-endpoint="ip=x.x.x.x,port=80"

۶. ایجاد بررسی سلامت http، سرویس backend و فایروال

در این مرحله، شما یک سرویس بک‌اند سراسری به نام on-prem-backend-service ایجاد خواهید کرد. این سرویس بک‌اند نحوه ارسال ترافیک به NEG توسط صفحه داده شما را تعریف می‌کند.

ابتدا، یک بررسی سلامت با نام on-prem-health-check ایجاد کنید تا سلامت هر نقطه پایانی متعلق به این NEG (یعنی نقطه پایانی داخلی شما) را رصد کند.

از پوسته ابری

gcloud compute health-checks create http on-prem-health-check

یک سرویس backend به نام on-prem-backend-service ایجاد کنید و آن را با بررسی سلامت مرتبط کنید.

از پوسته ابری

gcloud compute backend-services create on-prem-backend-service \
    --global \
    --load-balancing-scheme=EXTERNAL \
    --health-checks on-prem-health-check

متعادل‌کننده بار خارجی HTTP(S) و backend بررسی‌های سلامت را از زیرشبکه‌های 35.191.0.0/16 و 130.211.0.0/22 ​​انجام می‌دهند؛ بنابراین، یک قانون فایروال لازم است تا به متعادل‌کننده بار اجازه دهد مسیریابی backend را انجام دهد.

از پوسته ابری

gcloud compute firewall-rules create fw-allow-health-check \
    --network=hybrid-network-lb \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp:80

۷. سرویس NEG و backend را به هم مرتبط کنید

افزونه on-prem-neg-1 NEG را به این سرویس backend اضافه کنید.

از پوسته ابری

gcloud compute backend-services add-backend on-prem-backend-service \
    --global \
    --network-endpoint-group on-prem-neg-1 \
    --network-endpoint-group-zone us-west1-a \
    --balancing-mode RATE \
    --max-rate-per-endpoint 5

سرویس on-prem-neg-2 NEG را به این سرویس backend اضافه کنید.

از پوسته ابری

gcloud compute backend-services add-backend on-prem-backend-service \
    --global \
    --network-endpoint-group on-prem-neg-2 \
    --network-endpoint-group-zone us-west1-a \
    --balancing-mode RATE \
    --max-rate-per-endpoint 5

یک آدرس IP استاتیک IPv4 برای دسترسی به نقطه پایانی شبکه خود رزرو کنید

از پوسته ابری

gcloud compute addresses create hybrid-lb-ip --project=$projectid --global

پیکربندی CLI ما تمام شد. بیایید پیکربندی را از Cloud Console تکمیل کنیم.

۸. ایجاد متعادل‌کننده بار HTTP خارجی و مرتبط کردن سرویس backend

از کنسول ابری به Load Balancing بروید و Create load balancer را انتخاب کنید.

متعادل‌سازی بار HTTP(S) را شناسایی کرده و روی «شروع پیکربندی» کلیک کنید.

70ccd168957e89d9.png

مطابق تصویر زیر که امکان دسترسی عمومی به ماشین مجازی شما را فراهم می‌کند، گزینه «از اینترنت به ماشین‌های مجازی من» را انتخاب کنید.

a55cd31dbeadfecc.png

نام «xlb» را به عنوان متعادل‌کننده بار وارد کنید و سرویس backend که قبلاً ایجاد شده است یعنی «on-prem-backend-service» را انتخاب کرده و سپس مطابق تصویر ارائه شده، «ok» کنید.

f1589df43bf9e3e8.png

پیکربندی Frontend را انتخاب کنید، نام "xlb-fe" را به‌روزرسانی کنید و آدرس IPv4 استاتیک ایجاد شده قبلی را انتخاب کنید، مطمئن شوید که تصویر ارائه شده را منعکس می‌کنید. b47cd48c7c1ccfc3.png

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

bfa39f7dc3ad91e1.png

اعتبارسنجی سلامت بک‌اند

از طریق کنسول ابری، مطمئن شوید که backend "xlb" سالم است و مطابق تصویر ارائه شده، سبز رنگ است.

۱۳۱bbfc955d6166c.png

۹. اعتبارسنجی کنید که آیا NEG از طریق اینترنت قابل دسترسی است یا خیر

به یاد داشته باشید که آدرس IP استاتیک خارجی که هنگام ایجاد متعادل‌کننده بار استفاده شد، اکنون IP front-end نقاط انتهایی شبکه شماست. بیایید قبل از اجرای تست نهایی، اعتبارسنجی آدرس IP را انجام دهیم.

از پوسته ابری

gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:

خروجی (آدرس IP شما متفاوت خواهد بود)

خروجی از cloudshell

$ gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:
IPAddress: 34.96.103.132

با استفاده از آدرس IP سراسریِ front-end متعادل‌کننده بار، می‌توانید به back-end نقطه پایانی شبکه دسترسی پیدا کنید. توجه داشته باشید که در codelab، نقطه پایانی یک نمونه GCE است، هرچند که شما می‌توانید از این آدرس برای نقاط پایانیِ on-premises استفاده کنید.

از ایستگاه کاری محلی خود، یک ترمینال را اجرا کنید و یک curl به آدرس IP متعادل‌کننده بار انجام دهید.

از روی کامپیوتر خود، یک دستور curl روی آدرس IP سمت کاربر اجرا کنید. به 200 OK و جزئیات صفحه شامل نام نمونه منفی و منطقه توجه کنید.

myworkstation$ curl -v 34.96.103.132

* Trying 34.96.103.132...

* TCP_NODELAY set

* Connected to 34.96.103.132 (34.96.103.132) port 80 (#0)

> GET / HTTP/1.1

> Host: 34.96.103.132

> User-Agent: curl/7.64.1

> Accept: */*

>

< HTTP/1.1 200 OK

< Date: Tue, 10 Aug 2021 01:21:54 GMT

< Server: Apache/2.4.25 (Debian)

< Last-Modified: Tue, 10 Aug 2021 00:35:41 GMT

< ETag: "24-5c929ae7384f4"

< Accept-Ranges: bytes

< Content-Length: 36

< Content-Type: text/html

< Via: 1.1 google

<

Page on on-prem-neg-2 in us-west1-a

* Connection #0 to host 34.96.103.132 left intact

* Closing connection 0

تبریک می‌گوییم، شما با موفقیت یک متعادل‌کننده بار ترکیبی L7 را با NEGها مستقر کردید.

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

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

  • یک VPC سفارشی ایجاد کنید
  • دو ماشین مجازی (VM) ایجاد کنید که به عنوان یک گروه نقطه پایانی شبکه (NEG) استفاده شوند.
  • ایجاد یک متعادل‌کننده بار ترکیبی، سرویس backend و بررسی‌های سلامت مرتبط
  • یک قانون فایروال ایجاد کنید که امکان دسترسی به Load Balancer را فراهم کند.
  • اعتبارسنجی دسترسی‌پذیری گروه نقاط پایانی شبکه

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

از رابط کاربری Cloud Console، متعادل‌کننده بار «xlb» را شناسایی و تیک بزنید و از طریق Network Services → Load Balancing، گزینه حذف را انتخاب کنید. پس از انتخاب، گزینه‌های «on-premise-backend service» و «on-premise-health-check» را تیک بزنید و سپس حذف را انتخاب کنید.

53d7463fe354fe66.png

از رابط کاربری Cloud Console به Compute Engine → Network Endpoint Groups بروید. پس از انتخاب، تیک گزینه‌های 'on-prem-neg-1' و 'on-prem-neg-2' را بزنید و سپس گزینه حذف را انتخاب کنید.

4d8f04264b44d03c.png

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

gcloud compute routers nats delete cloudnat --router=crnat --region us-west1 --quiet

gcloud compute routers delete crnat  --region us-west1 --quiet

gcloud compute instances delete on-prem-neg-1 --zone=us-west1-a --quiet

gcloud compute instances delete on-prem-neg-2 --zone=us-west1-a --quiet

gcloud compute firewall-rules delete fw-allow-health-check --quiet

gcloud compute networks subnets delete network-endpoint-group-subnet --region=us-west1 --quiet

gcloud compute networks delete hybrid-network-lb --quiet

gcloud compute addresses delete hybrid-lb-ip --global --quiet