การใช้ตัวจัดสรรภาระงาน HTTP แบบไฮบริดเพื่อเข้าถึงกลุ่มปลายทางของเครือข่าย

1. บทนำ

กลยุทธ์แบบผสมเป็นโซลูชันที่ใช้ได้จริงสำหรับคุณในการปรับตัวให้เข้ากับความต้องการของตลาดที่เปลี่ยนแปลง และปรับแอปพลิเคชันให้ทันสมัยโดยค่อยเป็นค่อยไป การสนับสนุนแบบผสมสำหรับตัวจัดสรรภาระงาน HTTP ทั้งภายนอกและภายในของ Google Cloud จะขยายการจัดสรรภาระงานในระบบคลาวด์ไปยังแบ็กเอนด์ที่อยู่ภายในองค์กรและในระบบคลาวด์อื่นๆ และเป็นตัวเปิดการใช้งานหลักสำหรับกลยุทธ์แบบผสม วิธีนี้อาจเป็นเพียงชั่วคราวเพื่อให้สามารถย้ายข้อมูลไปยังโซลูชันระบบคลาวด์ที่ทันสมัย หรืออุปกรณ์ติดตั้งโครงสร้างพื้นฐานด้านไอทีขององค์กรอย่างถาวร

3312e69c63b02f73.png

ในห้องทดลองนี้ คุณจะได้เรียนรู้วิธีการสร้างกลุ่มปลายทางเครือข่าย (NEG) โดยใช้เครื่องเสมือน 2 เครื่องที่เข้าถึงได้จากตัวจัดสรรภาระงานทั่วโลกของ HTTP แม้ว่า NEG ในห้องปฏิบัติการจะอยู่ใน GCP แต่กระบวนการเดียวกันก็ใช้ในการสื่อสารกับทรัพยากรสาธารณะหรือทรัพยากรภายในองค์กรด้วยความสามารถในการเข้าถึง IP

สิ่งที่คุณจะได้เรียนรู้

  • สร้าง VPC ที่กำหนดเอง
  • สร้างเครื่องเสมือน (VM) 2 เครื่องที่ใช้เป็นกลุ่มปลายทางของเครือข่าย (NEG)
  • สร้างตัวจัดสรรภาระงานแบบผสม บริการแบ็กเอนด์ และการตรวจสอบประสิทธิภาพการทำงานที่เกี่ยวข้อง
  • สร้างกฎไฟร์วอลล์ที่อนุญาตการเข้าถึงตัวจัดสรรภาระงาน
  • ระบบจะสร้าง Cloud Router และ NAT เพื่ออนุญาตการอัปเดตแพ็กเกจจากอินเทอร์เน็ต
  • ตรวจสอบความสามารถในการเข้าถึงกลุ่มปลายทางของเครือข่าย

สิ่งที่คุณต้องมี

  • ความรู้เกี่ยวกับตัวจัดสรรภาระงาน

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

  1. ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • ชื่อโปรเจ็กต์คือตัวระบุส่วนตัวของคุณสำหรับโปรเจ็กต์นี้ ตราบใดที่คุณทำตามแบบแผนการตั้งชื่อ คุณก็สามารถใช้อะไรก็ได้ตามต้องการและอัปเดตชื่อได้ทุกเมื่อ
  • รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้เมื่อตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น PROJECT_ID) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" เมื่อสร้างโปรเจ็กต์แล้ว
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud

การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ซึ่งจะแนะนำคุณเกี่ยวกับวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้

จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้

bce75f34b2c53987.png

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้

f6ef2b5f13479f3a.png

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ใช้งานได้ต่อเนื่องและทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานทั้งหมดใน Lab นี้สามารถทำได้โดยใช้เบราว์เซอร์

2. ก่อนเริ่มต้น

ตรวจสอบว่าตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว

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

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

3. สร้างเครือข่าย VPC ในโหมดที่กำหนดเองใหม่

ในงานนี้ คุณจะได้สร้าง Virtual Private Cloud (VPC) ซึ่งเป็นพื้นฐานของเครือข่าย

เครือข่าย VPC

จาก Cloud Shell

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

สร้างซับเน็ต

จาก Cloud Shell

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

สร้างอินสแตนซ์ Cloud NAT

แม้ว่าจะไม่ใช่ข้อกำหนดสำหรับเครือข่ายแบบผสม แต่อินสแตนซ์การประมวลผลจำเป็นต้องใช้การเชื่อมต่ออินเทอร์เน็ตเพื่อดาวน์โหลดแอปพลิเคชันและการอัปเดต

ในงานนี้ คุณจะได้สร้างอินสแตนซ์ Cloud Router และอินสแตนซ์ NAT ที่อนุญาตให้เชื่อมต่ออินเทอร์เน็ตกับอินสแตนซ์ VM

สร้าง Cloud Router

จาก Cloud Shell

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

สร้าง Cloud NAT

จาก Cloud Shell

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

4. สร้างอินสแตนซ์ VM 2 รายการ

ในงานนี้ คุณจะได้สร้างอินสแตนซ์ VM 2 รายการที่เรียกใช้ Apache จากนั้นในห้องทดลอง อินสแตนซ์ VM เหล่านี้จะกลายเป็นกลุ่มปลายทางของเครือข่าย (NEG)

on-prem-neg-1 ให้สร้างอินสแตนซ์แรกภายในองค์กรจาก Cloud Shell

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'

on-prem-neg-2 ให้สร้างอินสแตนซ์แรกภายในองค์กรจาก Cloud Shell

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'

5. สร้าง NEG ที่มีปลายทางภายในองค์กร

ขั้นแรก ให้สร้าง NEG ชื่อ on-prem-neg-1 และ on-prem-neg-2 คุณจะระบุด้วยว่า LB ควรพิจารณาด้วยว่าปลายทางเหล่านี้อยู่ในโซน GCP สำหรับการกำหนดเส้นทางและการจัดสรรภาระงาน เราขอแนะนำให้โซนที่กำหนดค่าสอดคล้องกับโซนใดก็ตามที่เชื่อมโยงกับภูมิภาคของไฟล์แนบสำหรับการเชื่อมต่อถึงกัน/เกตเวย์ VPN สำหรับการวัดการจัดสรรภาระงานตามระยะใกล้ซึ่งใช้สำหรับการจัดสรรภาระงาน

จาก 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 ที่เรียกใช้ Apache ใน GCP หรือจะระบุปลายทางภายในองค์กรหรือปลายทางอินเทอร์เน็ตเป็นปลายทางเครือข่ายก็ได้

ระบุที่อยู่ IP ของ GCE จาก Cloud Shell

gcloud compute instances list | grep -i on-prem

เชื่อมโยงกลุ่มปลายทางเครือข่ายกับที่อยู่ IP ของอินสแตนซ์ GCE ที่ระบุก่อนหน้านี้ในขั้นตอนก่อนหน้า สำหรับแต่ละเชิงลบ on-prem-neg-1 & on-prem-neg-2.

จากการเชื่อมโยง Cloud Shell on-prem-neg-1 ให้อัปเดต x.x.x.x ด้วย 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 on-prem-neg-2 ให้อัปเดต x.x.x.x ด้วย IP ที่ระบุ

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

6. สร้างการตรวจสอบประสิทธิภาพการทำงานของ HTTP, บริการแบ็กเอนด์ และ ไฟร์วอลล์

ในขั้นตอนนี้ คุณจะสร้างบริการแบ็กเอนด์ส่วนกลางที่ชื่อว่า "บริการแบ็กเอนด์ภายในองค์กร" บริการแบ็กเอนด์นี้จะกำหนดวิธีที่ระนาบข้อมูลจะส่งการจราจรของข้อมูลไปยัง NEG

ขั้นแรก ให้สร้างการตรวจสอบประสิทธิภาพการทำงานที่มีชื่อว่า "การตรวจสอบประสิทธิภาพการทำงานภายในองค์กร" เพื่อตรวจสอบประสิทธิภาพของปลายทางใดก็ตามที่อยู่ใน NEG นี้ (ซึ่งก็คือปลายทางภายในองค์กรของคุณ)

จาก Cloud Shell

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

สร้างบริการแบ็กเอนด์ชื่อ on-prem-backend-service และเชื่อมโยงกับการตรวจสอบประสิทธิภาพการทำงาน

จาก Cloud Shell

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

ตัวจัดสรรภาระงานภายนอกและแบ็กเอนด์ HTTP(S) จะทำการตรวจสอบประสิทธิภาพการทำงานที่มาจากซับเน็ต 35.191.0.0/16 และ 130.211.0.0/22 ดังนั้นจึงต้องมีไฟร์วอลล์เพื่ออนุญาตให้ตัวกระจายโหลดทำงานแบ็กเอนด์ได้

จาก Cloud Shell

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

7. เชื่อมโยง NEG และบริการแบ็กเอนด์

เพิ่ม NEG ภายในองค์กร-neg-1 ลงในบริการแบ็กเอนด์นี้

จาก Cloud Shell

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

เพิ่ม NEG ภายในองค์กร-neg-2 ลงในบริการแบ็กเอนด์นี้

จาก Cloud Shell

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 ที่ใช้เข้าถึงปลายทางเครือข่าย

จาก Cloud Shell

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

เราดำเนินการกำหนดค่า CLI เรียบร้อยแล้ว มากำหนดค่าจาก Cloud Console ให้เสร็จสิ้นกัน

8. สร้างตัวจัดสรรภาระงาน HTTP ภายนอกและ เชื่อมโยงบริการแบ็กเอนด์

จาก Cloud Console ให้ไปที่การจัดสรรภาระงานและเลือก "สร้างตัวจัดสรรภาระงาน" ที่เลือก

ระบุการจัดสรรภาระงาน HTTP(S) แล้วคลิก "เริ่มการกำหนดค่า"

70ccd168957e89d9.png

เลือก "จากอินเทอร์เน็ตไปยัง VM ของฉัน" ตามภาพหน้าจอด้านล่างที่อนุญาตการเข้าถึง VM แบบสาธารณะ

a55cd31dbeadfecc.png

ระบุ "xlb" เป็นชื่อของตัวจัดสรรภาระงานและเลือกบริการแบ็กเอนด์ "on-prem-backend-service" ที่สร้างขึ้นก่อนหน้านี้ ตามด้วย "ตกลง" ตามภาพหน้าจอที่ให้ไว้

f1589df43bf9e3e8.png

เลือกการกำหนดค่าฟรอนท์เอนด์ อัปเดตชื่อ "xlb-fe" แล้วเลือกที่อยู่ IPv4 แบบคงที่ที่สร้างไว้ก่อนหน้านี้ อย่าลืมมิเรอร์ภาพหน้าจอที่ให้ไว้ b47cd48c7c1ccfc3.png

เลือก "ตรวจสอบและดำเนินการขั้นสุดท้าย" แล้วทำตามภาพหน้าจอที่ให้ไว้ และเลือก "สร้าง"

bfa39f7dc3ad91e1.png

การตรวจสอบประสิทธิภาพการทำงานของแบ็กเอนด์

จาก Cloud Console ให้ตรวจสอบว่าแบ็กเอนด์ "xlb" มีประสิทธิภาพดี โดยเป็นสีเขียวตามภาพหน้าจอที่ให้ไว้

131bbfc955d6166c.png

9. ตรวจสอบ NEG ที่เข้าถึงได้จากอินเทอร์เน็ต

เรียกคืนที่อยู่ IP แบบคงที่ภายนอกที่ใช้ขณะสร้างตัวจัดสรรภาระงานเป็น IP ส่วนหน้าของปลายทางเครือข่ายแล้ว มาตรวจสอบความถูกต้องของที่อยู่ IP ก่อนทำการทดสอบครั้งสุดท้ายกัน

จาก Cloud Shell

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 ฟรอนท์เอนด์ของตัวจัดสรรภาระงานร่วม คุณสามารถเข้าถึงแบ็กเอนด์ของปลายทางเครือข่ายได้ โปรดทราบว่าปลายทางใน Codelab คืออินสแตนซ์ GCE แต่คุณจะใช้กับปลายทางภายในองค์กร เป็นต้น

จากเวิร์กสเตชันภายใน ให้เปิดเทอร์มินัลและดำเนินการ Curl ไปยังที่อยู่ IP ของตัวจัดสรรภาระงาน

จากเวิร์กสเตชันของคุณ ให้ใช้ที่อยู่ 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 Hybrid ที่มี NEG ใช้งานได้เสร็จสมบูรณ์แล้ว

ขอแสดงความยินดีที่เรียน Codelab จนจบ

หัวข้อที่ครอบคลุม

  • สร้าง VPC ที่กำหนดเอง
  • สร้างเครื่องเสมือน (VM) 2 เครื่องที่ใช้เป็นกลุ่มปลายทางของเครือข่าย (NEG)
  • สร้างตัวจัดสรรภาระงานแบบผสม บริการแบ็กเอนด์ และการตรวจสอบประสิทธิภาพการทำงานที่เกี่ยวข้อง
  • สร้างกฎไฟร์วอลล์ที่อนุญาตการเข้าถึงตัวจัดสรรภาระงาน
  • ตรวจสอบความสามารถในการเข้าถึงกลุ่มปลายทางของเครือข่าย

10. ขั้นตอนการทำความสะอาด

จาก UI ของ Cloud Console ให้ระบุและทำเครื่องหมาย "xlb" ตัวจัดสรรภาระงานและเลือกลบผ่านบริการเครือข่าย → การจัดสรรภาระงาน เมื่อเลือกแล้ว ให้เลือก "บริการแบ็กเอนด์ภายในองค์กร" &amp; ‘on-premise-health-check&#39; แล้วเลือกลบ

53d7463fe354fe66.png

จาก UI ของ Cloud Console ให้ไปที่ Compute Engine → กลุ่มปลายทางของเครือข่าย เมื่อเลือกแล้ว ให้ทำเครื่องหมาย "on-prem-neg-1" &amp; ‘on-prem-neg-2&#39; แล้วเลือกลบ

4d8f04264b44d03c.png

จากคอมโพเนนต์ลบของ Cloud Shell

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