Sử dụng Trình cân bằng tải kết hợp HTTP bên ngoài để truy cập Nhóm thiết bị đầu cuối mạng

1. Giới thiệu

Chiến lược kết hợp là một giải pháp thiết thực giúp bạn thích ứng với nhu cầu thay đổi của thị trường và từng bước hiện đại hoá các ứng dụng của mình. Tính năng hỗ trợ kết hợp cho các trình cân bằng tải HTTP(s) bên ngoài và nội bộ của Google Cloud mở rộng khả năng cân bằng tải trên đám mây cho các phần phụ trợ nằm tại chỗ và trong các đám mây khác, đồng thời là yếu tố chính giúp bạn triển khai chiến lược kết hợp. Đây có thể là một giải pháp tạm thời để cho phép di chuyển sang một giải pháp hiện đại dựa trên đám mây hoặc một giải pháp cố định trong cơ sở hạ tầng CNTT của tổ chức bạn.

3312e69c63b02f73.png

Trong phòng thí nghiệm này, bạn sẽ tìm hiểu cách tạo một Nhóm điểm cuối mạng (NEG) bằng cách sử dụng 2 máy ảo có thể truy cập từ một Trình cân bằng tải bên ngoài (toàn cầu) HTTP(s). Mặc dù NEG trong phòng thí nghiệm nằm trong GCP, nhưng quy trình tương tự được dùng để giao tiếp với các tài nguyên công khai hoặc tại chỗ có khả năng tiếp cận IP.

Kiến thức bạn sẽ học được

  • Tạo một VPC tuỳ chỉnh
  • Tạo 2 máy ảo (VM) được dùng làm Nhóm thiết bị đầu cuối mạng (NEG)
  • Tạo một Trình cân bằng tải kết hợp, dịch vụ phụ trợ và các quy trình kiểm tra sức khoẻ liên quan
  • Tạo một quy tắc tường lửa cho phép truy cập vào Bộ cân bằng tải
  • Cloud Router và NAT sẽ được tạo để cho phép cập nhật gói từ Internet
  • Xác thực khả năng truy cập của Nhóm thiết bị đầu cuối của mạng

Bạn cần có

  • Có kiến thức về trình cân bằng tải

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Tên dự án là giá trị nhận dạng cá nhân của bạn cho dự án này. Miễn là tuân thủ quy ước đặt tên, bạn có thể sử dụng bất kỳ tên nào bạn muốn và có thể cập nhật tên đó bất cứ lúc nào.
  • Mã dự án phải là duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi sau khi đặt). Bảng điều khiển Cloud sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là PROJECT_ID). Vì vậy, nếu không thích mã này, bạn có thể tạo một mã ngẫu nhiên khác hoặc thử mã của riêng mình để xem mã đó có dùng được hay không. Sau đó, tên này sẽ "được cố định" sau khi dự án được tạo.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên của Google Cloud.

Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" để biết cách tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 USD.

Khởi động Cloud Shell

Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.

Trên Bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

bce75f34b2c53987.png

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

f6ef2b5f13479f3a.png

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn chỉ cần một trình duyệt là có thể thực hiện mọi thao tác trong phòng thí nghiệm này.

2. Trước khi bắt đầu

Trong Cloud Shell, hãy đảm bảo rằng bạn đã thiết lập mã dự án

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

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

3. Tạo mạng VPC ở chế độ tuỳ chỉnh mới

Trong nhiệm vụ này, bạn sẽ tạo một Đám mây riêng ảo (VPC), nền tảng của mạng.

Mạng VPC

Từ Cloud Shell

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

Tạo mạng con

Từ Cloud Shell

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

Tạo phiên bản Cloud NAT

Mặc dù không phải là yêu cầu đối với mạng kết hợp, nhưng phiên bản điện toán cần có kết nối Internet để tải các ứng dụng và bản cập nhật xuống.

Trong nhiệm vụ này, bạn sẽ tạo một Cloud Router và phiên bản NAT cho phép kết nối Internet với các phiên bản máy ảo.

Tạo Cloud Router

Từ Cloud Shell

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

Tạo Cloud NAT

Từ 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. Tạo 2 phiên bản máy ảo

Trong nhiệm vụ này, bạn sẽ tạo 2 phiên bản máy ảo chạy Apache. Sau đó,trong phòng thí nghiệm,các phiên bản máy ảo này sẽ trở thành một Nhóm thiết bị đầu cuối mạng (NEG).

Từ Cloud Shell, hãy tạo phiên bản tại chỗ đầu tiên, 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'

Từ Cloud Shell, hãy tạo phiên bản tại chỗ đầu tiên, 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'

5. Tạo một NEG chứa điểm cuối tại chỗ của bạn

Trước tiên, hãy tạo một NEG có tên là on-prem-neg-1 và on-prem-neg-2. Bạn cũng sẽ chỉ định rằng LB nên xem xét rằng, cho mục đích định tuyến và cân bằng tải, các điểm cuối này nằm trong vùng GCP us-west1-a. Bạn nên định cấu hình để vùng tương ứng với mọi vùng được liên kết với khu vực của Interconnect Attachment/VPN Gateway cho các phép đo cân bằng tải dựa trên khoảng cách được dùng để cân bằng tải.

Tạo on-prem-neg-1 từ Cloud Shell

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

Tạo on-prem-neg-2 từ Cloud Shell

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

Trong lớp học lập trình này, nhóm thiết bị đầu cuối mạng là một phiên bản GCE chạy Apache trong GCP. Ngoài ra, bạn có thể chỉ định một điểm cuối tại chỗ hoặc điểm cuối trên Internet làm điểm cuối mạng

Xác định địa chỉ IP GCE từ Cloud Shell

gcloud compute instances list | grep -i on-prem

Liên kết nhóm điểm cuối mạng với địa chỉ IP của phiên bản GCE mà bạn đã xác định trước đó ở bước trước; đối với mỗi neg, on-prem-neg-1 & on-prem-neg-2.

Từ Cloud Shell, hãy liên kết trên on-prem-neg-1, cập nhật x.x.x.x bằng IP mà bạn xác định

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

Từ Cloud Shell, hãy liên kết trên on-prem-neg-2, cập nhật x.x.x.x bằng IP mà bạn xác định được

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

6. Tạo dịch vụ kiểm tra tình trạng http, dịch vụ phụ trợ và tường lửa

Trong bước này, bạn sẽ tạo một dịch vụ phụ trợ chung có tên là on-prem-backend-service. Dịch vụ phụ trợ này xác định cách lớp dữ liệu sẽ gửi lưu lượng truy cập đến NEG.

Trước tiên, hãy tạo một quy trình kiểm tra tình trạng có tên là on-prem-health-check để theo dõi tình trạng của mọi điểm cuối thuộc NEG này (tức là điểm cuối tại cơ sở của bạn).

Từ Cloud Shell

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

Tạo một dịch vụ phụ trợ có tên là on-prem-backend-service và liên kết dịch vụ đó với quy trình kiểm tra tình trạng.

Từ Cloud Shell

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

Trình cân bằng tải và phụ trợ bên ngoài HTTP(S) thực hiện các quy trình kiểm tra tình trạng bắt nguồn từ các mạng con 35.191.0.0/16 và 130.211.0.0/22; do đó, bạn cần có một quy tắc về tường lửa để cho phép trình cân bằng tải định tuyến đến phụ trợ.

Từ 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. Liên kết NEG và dịch vụ phụ trợ

Thêm NEG on-prem-neg-1 vào dịch vụ phụ trợ này

Từ 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

Thêm NEG on-prem-neg-2 vào dịch vụ phụ trợ này

Từ 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

Dành riêng một địa chỉ IP tĩnh IPv4 dùng để truy cập vào điểm cuối mạng của bạn

Từ Cloud Shell

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

Chúng ta đã hoàn tất việc định cấu hình CLI. Hãy hoàn tất quá trình thiết lập trên Cloud Console.

8. Tạo trình cân bằng tải HTTP bên ngoài và liên kết dịch vụ phụ trợ

Trên bảng điều khiển đám mây, hãy chuyển đến phần Cân bằng tải rồi chọn Tạo trình cân bằng tải

Xác định tính năng cân bằng tải HTTP(S) rồi nhấp vào "bắt đầu định cấu hình"

70ccd168957e89d9.png

Chọn "Từ Internet đến các VM của tôi" theo ảnh chụp màn hình bên dưới để cho phép truy cập công khai vào VM của bạn

a55cd31dbeadfecc.png

Cung cấp "xlb" làm tên của bộ cân bằng tải và chọn dịch vụ phụ trợ "on-prem-backend-service" đã tạo trước đó rồi chọn "ok" theo ảnh chụp màn hình được cung cấp

f1589df43bf9e3e8.png

Chọn Cấu hình giao diện người dùng, cập nhật tên "xlb-fe" và chọn địa chỉ IPv4 tĩnh đã tạo trước đó, nhớ phản ánh ảnh chụp màn hình được cung cấp b47cd48c7c1ccfc3.png

Chọn "Xem lại và hoàn tất" để khớp với ảnh chụp màn hình được cung cấp, rồi chọn "Tạo"

bfa39f7dc3ad91e1.png

Xác thực tình trạng của phần phụ trợ

Trên bảng điều khiển đám mây, hãy đảm bảo "xlb" phụ trợ hoạt động bình thường, có màu xanh lục theo ảnh chụp màn hình được cung cấp

131bbfc955d6166c.png

9. Xác thực rằng có thể truy cập NEG từ Internet

Hãy nhớ rằng Địa chỉ IP tĩnh bên ngoài được dùng trong khi tạo trình cân bằng tải hiện là IP giao diện người dùng của các điểm cuối mạng. Hãy xác thực địa chỉ IP trước khi thực hiện quy trình kiểm thử cuối cùng.

Từ Cloud Shell

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

Đầu ra (Địa chỉ IP của bạn sẽ khác)

Đầu ra từ cloudshell

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

Khi sử dụng địa chỉ IP giao diện người dùng của bộ cân bằng tải toàn cầu, bạn có thể truy cập vào phần phụ trợ của điểm cuối mạng. Xin lưu ý rằng trong lớp học lập trình, điểm cuối là một phiên bản GCE, tuy nhiên, bạn có thể sử dụng điểm cuối này với các điểm cuối tại chỗ.

Từ máy trạm cục bộ, hãy khởi chạy một thiết bị đầu cuối và thực hiện một lệnh curl đến địa chỉ IP của bộ cân bằng tải

Từ máy trạm, hãy thực hiện một lệnh curl đối với địa chỉ IP của giao diện người dùng. Quan sát 200 OK và thông tin chi tiết về trang bao gồm tên và khu vực của phiên bản neg.

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

Xin chúc mừng, bạn đã triển khai thành công một Bộ cân bằng tải kết hợp L7 bằng NEG

Chúc mừng bạn đã hoàn thành lớp học lập trình này!

Nội dung đã đề cập

  • Tạo một VPC tuỳ chỉnh
  • Tạo 2 máy ảo (VM) được dùng làm Nhóm thiết bị đầu cuối mạng (NEG)
  • Tạo một Trình cân bằng tải kết hợp, dịch vụ phụ trợ và các quy trình kiểm tra sức khoẻ liên quan
  • Tạo một quy tắc tường lửa cho phép truy cập vào Bộ cân bằng tải
  • Xác thực khả năng truy cập của Nhóm thiết bị đầu cuối của mạng

10. Các bước dọn dẹp

Trong giao diện người dùng Cloud Console, hãy xác định và đánh dấu vào trình cân bằng tải "xlb", sau đó chọn xoá thông qua Network Services (Dịch vụ mạng) → Load Balancing (Cân bằng tải). Sau khi chọn, hãy đánh dấu vào "on-premise-backend service" (dịch vụ phụ trợ tại chỗ) và "on-premise-health-check" (kiểm tra tình trạng tại chỗ), sau đó chọn xoá

53d7463fe354fe66.png

Trong giao diện người dùng Cloud Console, hãy chuyển đến Compute Engine → Network Endpoint Groups (Nhóm thiết bị đầu cuối của mạng). Sau khi chọn, hãy đánh dấu vào "on-prem-neg-1" và "on-prem-neg-2", sau đó chọn xoá

4d8f04264b44d03c.png

Xoá các thành phần trong phòng thí nghiệm khỏi 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