زنجیربندی صریح بار متعادل کننده های GCP L7 با PSC

1. مقدمه

گروه نقطه پایانی شبکه Private Service Connect (PSC) از زنجیر کردن یک بار متعادل کننده داخلی HTTPS با یک بار متعادل کننده HTTPS خارجی پشتیبانی می کند. این بررسی های سلامت توزیع شده و ترافیک هواپیمای داده را با استفاده از محدوده های تعریف شده مشتری به On-Prem ارائه می دهد. علاوه بر این، چندین VPC متصل به On-Prem از طریق چندین InterConnects منطقه ای نیز با این توپولوژی پشتیبانی می شود.

در این آزمایشگاه کد، نحوه پیکربندی این سرتاسر را بر اساس توپولوژی زیر نشان خواهیم داد. از چپ به راست، مشتریان در محل یک VM برای شبیه‌سازی خدمات HTTP، استفاده از اتصال هیبریدی (HA-VPN یا InterConnect) و NEG ترکیبی برای نمایش از طریق متعادل‌کننده بار HTTPS داخلی دارند. PSC از HTTPS LB داخلی به عنوان پیوست سرویس استفاده می کند. PSC NEG پیوست‌ها را به عنوان سرویس پشتیبان مصرف می‌کند که در معرض HTTPS LB خارجی قرار دارند. کاربران اینترنت می توانند از شبکه جهانی گوگل برای تسریع دسترسی به سرویس های HTTP On-Prem استفاده کنند.

e3f26d8497323a42.png

شکل 1. Private Service Connect از گروه نقطه پایانی شبکه و پیوست های سرویس برای اتصال External HTTPS Load Balancer به Internal HTTPS Load Balancer و گسترش backend به On-Prem استفاده می کند.

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

  • Load Balancer داخلی HTTPS با NEG هیبریدی و بررسی سلامت توزیع شده
  • پیوست سرویس PSC با Load Balancer داخلی HTTPS
  • راه اندازی گروه نقطه پایانی شبکه PSC
  • PSC NEG را با Load Balancer خارجی HTTPS نمایش دهید

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

  • دانش اتصال هیبریدی، مانند HA-VPN
  • آشنایی با تعادل بار HTTPS داخلی/خارجی
  • دانش Private Service Connect

2. قبل از شروع

توجه: Codelab مراحل پیکربندی و اعتبار سنجی را بر اساس توپولوژی نشان داده شده ارائه می دهد، رویه را در صورت نیاز اصلاح کنید تا نیازهای سازمان خود را برآورده کند. مجوزهای IAM در محدوده نرم افزار کد نیستند.

Codelab از یک پروژه برای شبیه سازی کل فرآیند استفاده می کند. پروژه های متعدد نیز پشتیبانی می شود.

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

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

3. منابع On-Prem را ایجاد کنید

در بخش بعدی، VPC و VMهای اولیه را برای شبیه‌سازی مشتری در سرویس‌های اولیه راه‌اندازی می‌کنیم.

شبکه VPC

از Cloud Shell

gcloud compute networks create vpc-demo-onprem --project=$prodproject --subnet-mode=custom

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

از Cloud Shell

gcloud compute networks subnets create vpc-demo-onprem-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=vpc-demo-onprem --region=asia-southeast1

قوانین فایروال را ایجاد کنید.

Load Balancer داخلی HTTPS از بررسی سلامت توزیع شده پشتیبانی می کند، قوانین فایروال فقط باید محدوده IP زیرشبکه پروکسی را مجاز کند. برای فهرست مجاز پروژه های خود، سند را دنبال کنید.

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

gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-onprem --source-ranges 10.0.3.0/24 --enable-logging

از Cloud Shell یک قانون فایروال ایجاد کنید تا به IAP اجازه دهد به نمونه های VM شما متصل شود.

gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-onprem --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

4. نمونه های On-Prem VM را ایجاد کنید

این VM در سرویس‌های مقدماتی شبیه‌سازی می‌شود و باید با HTTPS Load Balancer داخلی با استفاده از NEG ترکیبی در معرض دید قرار گیرد.

از Cloud Shell نمونه www01 ایجاد کنید

gcloud compute instances create www01 \
    --zone=asia-southeast1-b \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-onprem-asia-southeast1 \
    --shielded-secure-boot \
    --shielded-vtpm \
    --shielded-integrity-monitoring \
    --metadata=startup-script='#! /bin/bash
sudo apt-get update
sudo apt-get install nginx -y
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.nginx-debian.html
sudo systemctl restart nginx'

در بخش بعدی از letsencrypt برای تولید گواهی و نصب بر روی Nginx استفاده می کنیم. برای مرحله بعد فایل کلید عمومی و خصوصی را دانلود کنید. برای تولید گواهی باید به طور موقت پورت TCP 80 را به اینترنت باز کنید.

مطمئن شوید که این VM یک نام دامنه عمومی حل شده دارد. برای مثال، در Cloud DNS یک رکورد A اضافه کنید [www01.yinghli.demo.altostrat.com](http://www01.yinghli.demo.altostrat.com) و به آدرس IP عمومی VM اشاره کنید.

gcloud dns --project=$prodproject record-sets create www01.yinghli.demo.altostrat.com. --zone="yinghli-demo" --type="A" --ttl="300" --rrdatas="34.87.77.186"

از کنسول VM www01، دستورالعمل نصب گواهی‌ها را در Nginx دنبال کنید و برای مراحل زیر از fullchain.pem و private.pem کپی کنید.

sudo apt install snapd
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx

5. ایجاد شبکه VPC Producers

توجه: پیکربندی شبکه هیبریدی در این پیکربندی گنجانده نشده است.

شبکه VPC

از Cloud Shell

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

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

از Cloud Shell

gcloud compute networks subnets create vpc-demo-asia-southeast1 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=asia-southeast1

ایجاد زیرشبکه پروکسی

از Cloud Shell

gcloud compute networks subnets create proxy-subnet-asia-southeast1 \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=asia-southeast1 \
  --network=vpc-demo-producer \
  --range=10.0.3.0/24

اتصال هیبریدی

برای پیاده سازی اتصال HA-VPN بین On-Prem و Producer VPC، اسناد Cloud VPN را دنبال کنید. تنظیمات پیش‌فرض را روی روتر ابری حفظ کنید، نیازی نیست 130.211.0.0/22، 35.191.0.0/16 را به تبلیغات BGP اضافه کنیم.

6. Producers Hybrid NEG را ایجاد کنید

یک گروه نقطه پایانی شبکه ترکیبی ایجاد کنید و IP:PORT VM را به NEG اضافه کنید.

از Cloud Shell

gcloud compute network-endpoint-groups create on-prem-service-neg \
    --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
    --zone=asia-southeast1-b \
    --network=vpc-demo-producer

gcloud compute network-endpoint-groups update on-prem-service-neg \
    --zone=asia-southeast1-b \
    --add-endpoint="ip=10.0.0.2,port=443"

7. ایجاد تعادل بار داخلی HTTPS برای تولیدکنندگان

در حال حاضر External HTTPS Load Balancer فقط از پروتکل HTTPS به PSC NEG ( Docs ) پشتیبانی می کند. وقتی خدمات منتشر می شود، باید از تعادل بار داخلی HTTPS استفاده کنیم و دسترسی جهانی قوانین حمل و نقل را فعال کنیم.

از Cloud Shell بررسی سلامت منطقه ای را ایجاد کنید.

gcloud compute health-checks create https on-prem-service-hc \
    --region=asia-southeast1 \
    --use-serving-port

از Cloud Shell سرویس Backend را ایجاد کنید و Hybrid NEG را اضافه کنید.

gcloud compute backend-services create on-premise-service-backend \
   --load-balancing-scheme=INTERNAL_MANAGED \
   --protocol=HTTPS \
   --region=asia-southeast1 \
   --health-checks=on-prem-service-hc \
   --health-checks-region=asia-southeast1

gcloud compute backend-services add-backend on-premise-service-backend \
   --network-endpoint-group=on-prem-service-neg \
   --network-endpoint-group-zone=asia-southeast1-b \
   --region=asia-southeast1 \
   --balancing-mode=RATE \
   --max-rate-per-endpoint=100

از Cloud Shell نقشه URL را ایجاد کنید

gcloud compute url-maps create on-premise-url \
    --default-service on-premise-service-backend \
    --region=asia-southeast1

از Cloud Shell گواهینامه های SSL منطقه ای را ایجاد کنید. دو فایل گواهی از VM دانلود می شود.

gcloud compute ssl-certificates create www01 \
    --certificate=fullchain.pem \
    --private-key=private.pem \
    --region=asia-southeast1

از Cloud Shell https-target-proxy ایجاد کنید

gcloud compute target-https-proxies create on-premise-httpsproxy \
    --ssl-certificates=www01 \
    --url-map=on-premise-url \
    --url-map-region=asia-southeast1 \
    --region=asia-southeast1

از Cloud Shell یک IP استاتیک داخلی رزرو کنید و قانون ارسال را ایجاد کنید

gcloud compute addresses create ilbaddress \
  --region=asia-southeast1 \
  --subnet=vpc-demo-asia-southeast1  \
  --addresses=10.0.2.100 

gcloud compute forwarding-rules create https-ilb-psc \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=vpc-demo-producer \
      --subnet=vpc-demo-asia-southeast1  \
      --address=ilbaddress \
      --ports=443 \
      --region=asia-southeast1 \
      --target-https-proxy=on-premise-httpsproxy \
      --target-https-proxy-region=asia-southeast1
      --allow-global-access

8. نمونه Producer VM را ایجاد کنید

یک VM تولید کننده برای تأیید ایجاد کنید.

از Cloud Shell

gcloud compute instances create test01 \
    --zone=asia-southeast1-b \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-asia-southeast1 \
    --shielded-secure-boot \
    --shielded-vtpm \
    --shielded-integrity-monitoring

برای اینکه به IAP اجازه دهید به نمونه های VM شما متصل شود، یک قانون فایروال ایجاد کنید که:

از Cloud Shell

gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

از کنسول VM سازنده، به [ www01.yinghli.demo.altostrat.com ](https://www01.yinghli.demo.altostrat.com) دسترسی پیدا کنید و آدرس IP داخلی HTTPS load balancer را حل کنید. HTTP 200 نشان داد که پیکربندی طبق انتظار عمل می کند.

curl -v --resolve www01.yinghli.demo.altostrat.com:443:10.0.2.100 https://www01.yinghli.demo.altostrat.com

* Added www01.yinghli.demo.altostrat.com:443:10.0.2.100 to DNS cache
* Hostname www01.yinghli.demo.altostrat.com was found in DNS cache
*   Trying 10.0.2.100:443...
* Connected to www01.yinghli.demo.altostrat.com (10.0.2.100) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=www01.yinghli.demo.altostrat.com
*  start date: Jun  4 10:36:43 2023 GMT
*  expire date: Sep  2 10:36:42 2023 GMT
*  subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55865ef982e0)
> GET / HTTP/2
> Host: www01.yinghli.demo.altostrat.com
> user-agent: curl/7.74.0
> accept: */*
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 200 
< server: nginx/1.18.0
< date: Mon, 05 Jun 2023 02:29:38 GMT
< content-type: text/html
< content-length: 35
< last-modified: Sun, 04 Jun 2023 09:02:16 GMT
< etag: "647c5318-23"
< accept-ranges: bytes
< via: 1.1 google
< 
Page on www01 in asia-southeast1-b
* Connection #0 to host www01.yinghli.demo.altostrat.com left intact

توجه: نمی‌توانید مستقیماً به سرویس‌های HTTPS VM 10.0.0.2 دسترسی پیدا کنید، زیرا فایروال on-prem فقط به زیرشبکه پروکسی 10.0.3.0/24 اجازه دسترسی می‌دهد.

9. زیرشبکه PSC NAT ایجاد کنید

از Cloud Shell

gcloud compute networks subnets create psc-nat-subnet \
--network=vpc-demo-producer \
--region=asia-southeast1 \
--range=10.0.5.0/24 \
--purpose=private-service-connect

10. پیوست سرویس HTTPs ایجاد کنید

از Cloud Shell پیوست سرویس HTTPs را ایجاد کنید

gcloud compute service-attachments create ilbserviceattach \
--region=asia-southeast1 \
--producer-forwarding-rule=https-ilb-psc \
--connection-preference=ACCEPT_AUTOMATIC \
--nat-subnets=psc-nat-subnet

پیوست سرویس HTTPs را اعتبارسنجی کنید

gcloud compute service-attachments describe ilbserviceattach --region asia-southeast1

ثبت نام پیوست سرویس:

projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach

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

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

شبکه VPC

از Cloud Shell

gcloud compute networks create vpc-demo-consumer --project=$prodproject --subnet-mode=custom

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

از Cloud Shell

gcloud compute networks subnets create consumer-subnet --project=$prodproject  --range=10.0.6.0/24 --network=vpc-demo-consumer --region=asia-southeast1

12. گروه نقطه پایانی شبکه PSC را ایجاد کنید

PSC NEG را ایجاد کنید

نام پیوست خدمات https قبلی را کپی کرده و در پارامترهای --psc-target-service جایگذاری کنید

از Cloud Shell

gcloud beta compute network-endpoint-groups create consumerpscneg \
--project=$prodproject \
--region=asia-southeast1 \
--network-endpoint-type=PRIVATE_SERVICE_CONNECT \
--psc-target-service=projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach \
--network=vpc-demo-consumer \
--subnet=consumer-subnet

پس از راه‌اندازی موفقیت‌آمیز PSC NEG، از UI، به دنبال Private Service Connect -> Published Services -> توجه داشته باشید که اتصال ilbserviceattach منتشر شده اکنون 1 قانون ارسال را نشان می‌دهد.

320741b7dedc7984.png

13. Consumer External HTTPS Load Balancer را ایجاد کنید

یک HTTPS Load Balancer خارجی ایجاد کنید و از PSC NEG به عنوان خدمات پشتیبان ( مستندات ) استفاده کنید.

از Cloud Shell

gcloud compute addresses create httpspsclb \
    --ip-version=IPV4 --global

gcloud compute backend-services create consumer-bs \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTPS \
    --global

gcloud compute backend-services add-backend consumer-bs \
  --network-endpoint-group=consumerpscneg \
  --network-endpoint-group-region=asia-southeast1 \
  --global

gcloud compute url-maps create consumer-url \
  --default-service=consumer-backend-service \
  --global

gcloud compute ssl-certificates create wwwglobal \
    --certificate=fullchain.pem \
    --private-key=private.pem \
    --global

gcloud compute target-https-proxies create consumer-url-target-proxy \
  --url-map=consumer-url \
  --ssl-certificates=wwwglobal

gcloud compute forwarding-rules create consumer-url-forwarding-rule \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --network-tier=PREMIUM \
    --address=httpspsclb \
    --target-https-proxy=consumer-url-target-proxy \
    --ports=443 \
    --global

رکورد DNS را برای www01.yinghli.demo.altostrat.com به روز کنید و به آدرس IP عمومی Load Balancer HTTPS اشاره کنید.

gcloud dns --project=$prodproject record-sets update www01.yinghli.demo.altostrat.com. --type="A" --zone="yinghli-demo" --rrdatas="34.102.178.214" --ttl="300"

14. اعتبار سنجی

از لپ تاپ خود به https://www01.yinghli.demo.altostrat.com با curl دسترسی داشته باشید.

curl -v https://www01.yinghli.demo.altostrat.com
*   Trying 34.102.178.214:443...
* Connected to www01.yinghli.demo.altostrat.com (34.102.178.214) port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=www01.yinghli.demo.altostrat.com
*  start date: Jun  4 10:36:43 2023 GMT
*  expire date: Sep  2 10:36:42 2023 GMT
*  subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /]
* h2h3 [:scheme: https]
* h2h3 [:authority: www01.yinghli.demo.altostrat.com]
* h2h3 [user-agent: curl/8.0.0]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x149019a00)
> GET / HTTP/2
> Host: www01.yinghli.demo.altostrat.com
> user-agent: curl/8.0.0
> accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
< HTTP/2 200
< server: nginx/1.18.0
< date: Mon, 05 Jun 2023 02:48:43 GMT
< content-type: text/html
< content-length: 35
< last-modified: Sun, 04 Jun 2023 09:02:16 GMT
< etag: "647c5318-23"
< accept-ranges: bytes
< via: 1.1 google, 1.1 google
< alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
<
Page on www01 in asia-southeast1-b
* Connection #0 to host www01.yinghli.demo.altostrat.com left intact

15. مراحل پاکسازی

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

توجه: مراحل پاکسازی فقط Load Balancer و پیکربندی مربوط به PSC را نشان می‌دهد، VPC و اتصال ترکیبی شامل نمی‌شود.

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

gcloud compute forwarding-rules delete consumer-url-forwarding-rule --global
gcloud compute target-https-proxies delete consumer-url-target-proxy
gcloud compute ssl-certificates delete wwwglobal --global
gcloud compute url-maps delete consumer-url
gcloud compute backend-services delete consumer-bs --global
gcloud compute addresses delete httpspsclb --global

gcloud beta compute network-endpoint-groups delete consumerpscneg --region=asia-southeast1

gcloud compute service-attachments delete ilbserviceattach --region=asia-southeast1
gcloud compute networks subnets delete psc-nat-subnet --region=asia-southeast1

gcloud compute forwarding-rules delete https-ilb-psc --region=asia-southeast1
gcloud compute addresses delete ilbaddress --region=asia-southeast1
gcloud compute target-https-proxies delete on-premise-httpsproxy --region=asia-southeast1
gcloud compute ssl-certificates delete www01 --region=asia-southeast1
gcloud compute url-maps delete on-premise-url --region=asia-southeast1
gcloud compute backend-services delete on-premise-service-backend --region=asia-southeast1
gcloud compute health-checks delete on-prem-service-hc --region=asia-southeast1

gcloud compute network-endpoint-groups delete on-prem-service-neg --zone=asia-southeast1-b
gcloud compute networks subnets delete proxy-subnet-asia-southeast1 --region=asia-southeast1

16. تبریک می گویم!

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

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

  • Load Balancer داخلی HTTPS با NEG هیبریدی و بررسی سلامت توزیع شده
  • پیوست سرویس PSC با Load Balancer داخلی HTTPS
  • راه اندازی گروه نقطه پایانی شبکه PSC
  • PSC NEG را با Load Balancer خارجی HTTPS نمایش دهید