Kết nối dịch vụ riêng tư – Sử dụng các tuỳ chọn kiểm soát dịch vụ HTTP(S) của người tiêu dùng dành cho các dịch vụ được quản lý từ XLB toàn cầu

1. Giới thiệu

Private Service Connect cho phép nhà sản xuất dịch vụ cung cấp dịch vụ cho người tiêu dùng dịch vụ. Mạng VPC của nhà sản xuất dịch vụ có thể hỗ trợ nhiều người tiêu dùng dịch vụ.

Có hai loại điểm cuối Kết nối dịch vụ riêng tư có thể kết nối với một dịch vụ đã xuất bản:

  • Điểm cuối của Kết nối dịch vụ riêng tư (dựa trên quy tắc chuyển tiếp)

Với loại điểm cuối này, người tiêu dùng kết nối với một địa chỉ IP nội bộ do họ xác định. Private Service Connect thực hiện dịch địa chỉ mạng (NAT) để định tuyến yêu cầu đến nhà sản xuất dịch vụ.

  • Điểm cuối Private Service Connect có các chế độ kiểm soát dịch vụ HTTP(S) dành cho người tiêu dùng (dựa trên trình cân bằng tải HTTP(S) bên ngoài chung)

Với loại điểm cuối này, người tiêu dùng kết nối với một địa chỉ IP bên ngoài. Private Service Connect sử dụng một nhóm điểm cuối mạng để định tuyến yêu cầu đến nhà sản xuất dịch vụ.

Việc sử dụng trình cân bằng tải HTTP(S) bên ngoài toàn cầu làm điểm thực thi chính sách sẽ có những lợi ích sau:

  • Bạn có thể đổi tên các dịch vụ và ánh xạ các dịch vụ đó thành URL mà bạn chọn.
  • Bạn có thể định cấu hình trình cân bằng tải để ghi tất cả yêu cầu vào Cloud Logging.
  • Bạn có thể sử dụng chứng chỉ TLS do khách hàng quản lý. hoặc chứng chỉ do Google quản lý.

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách tạo một tuỳ chọn kiểm soát dịch vụ HTTP(S) của người tiêu dùng kết nối điểm cuối riêng tư bằng cách sử dụng Global XLB để truy cập riêng tư vào một dịch vụ trong một mạng khác. Mẫu PSC này có thể được thực hiện bằng một dự án hoặc các dự án riêng biệt. Vì mục đích của phòng thí nghiệm này, chúng tôi sẽ sử dụng một dự án duy nhất có 2 VPC riêng biệt.

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

  • Tạo điểm cuối Private Service Connect bằng các tuỳ chọn kiểm soát dịch vụ HTTP(S) của người tiêu dùng bằng Global XLB
  • Định cấu hình cho một dịch vụ được quản lý hiển thị thông qua một Tệp đính kèm dịch vụ để chấp nhận các kết nối L7 XLB.
  • Tạo chứng chỉ SSL và định cấu hình máy chủ web Apache để chấm dứt TLS và chấp nhận lưu lượng truy cập trên cổng 443.
  • Tạo PSC NEG.

Bạn cần có

  • Một dự án trên Google Cloud
  • Có kiến thức về cách triển khai thực thể và định cấu hình các thành phần mạng

2. Môi trường kiểm thử

Môi trường mà bạn tạo sẽ bao gồm Trình cân bằng tải HTTP(S) bên ngoài và PSC NEG trong VPC của người tiêu dùng. VPC của nhà sản xuất sẽ lưu trữ một dịch vụ web Apache đơn giản được định cấu hình bằng HTTPS. Bạn sẽ tạo một dịch vụ phụ trợ qua dịch vụ web Apache và phía trước dịch vụ phụ trợ đó bằng một Trình cân bằng tải TCP nội bộ được định cấu hình với một tệp đính kèm dịch vụ PSC.

bbca972cf488ece.png

3. Thiết lập và yêu cầu

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng và bạn có thể cập nhật chuỗi này bất cứ lúc nào.
  • Mã dự án phải là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. 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 (và mã này thường được xác định là PROJECT_ID). Vì vậy, nếu không thích, bạn có thể tạo một mã ngẫu nhiên khác hoặc bạn có thể thử mã của riêng mình để xem có mã này chưa. Sau đó, video sẽ được "đóng băng" sau khi tạo dự án.
  • Có giá trị thứ ba là Project Number (Số dự án) mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
  1. Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên/API trên Cloud. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên để bạn không phải chịu thanh toán ngoài hướng dẫn này, hãy làm theo mọi thao tác "dọn dẹp" hướng dẫn ở cuối lớp học lập trình. 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í 300 USD.

Khởi động Cloud Shell

Mặc dù bạn 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 trong Đám mây.

Trong Google Cloud Console, hãy nhấp vào biểu tượng Cloud Shell ở thanh công cụ trên cùng bên phải:

55efc1aaa7a4d3ad.pngS

Sẽ chỉ mất một chút thời gian để cấp phép và kết nối với môi trường. Sau khi hoàn tất, bạn sẽ thấy như sau:

7ffe5cbb04455448.pngS

Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Phiên bản này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Bạn có thể thực hiện tất cả công việc trong phòng thí nghiệm này chỉ bằng một trình duyệt.

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

Bật API

Bên 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-NAME]
export project=YOUR-PROJECT-NAME
export region=us-central1
echo $project
echo $region

Bật tất cả dịch vụ cần thiết

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com

5. VPC của nhà sản xuất, Mạng con, Thiết lập quy tắc về tường lửa

Mạng VPC

Của Cloud Shell

gcloud compute networks create producer-vpc --subnet-mode custom

Tạo mạng con

Cần có mạng con ở phía nhà sản xuất để thực hiện quá trình Dịch địa chỉ mạng (NAT) cho PSC. Lưu ý rằng mục đích là PRIVATE_SERVICE_CONNECT. Điều này có nghĩa là không thể sử dụng mạng con này để triển khai khối lượng công việc.

Của Cloud Shell

gcloud compute networks subnets create producer-nat-subnet \
--network=producer-vpc \
--region=$region \
--range=10.100.100.0/24 \
--purpose=PRIVATE_SERVICE_CONNECT

Chúng ta sẽ triển khai hai mạng con trong VPC của nhà sản xuất. Dịch vụ đầu tiên triển khai dịch vụ của nhà sản xuất và dịch vụ khác ở khu vực khác để triển khai client-vm nhằm kiểm tra khả năng kết nối với dịch vụ qua Global Access trên Trình cân bằng tải nội bộ TCP.

Của Cloud Shell

gcloud compute networks subnets create service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/24 \
    --region=$region

Của Cloud Shell

gcloud compute networks subnets create client-subnet \
    --network=producer-vpc \
    --range=10.0.1.0/24 \
    --region=us-east4

Tạo Cloud NAT

Cần có Cloud NAT để cài đặt các gói phù hợp cho dịch vụ dành cho nhà sản xuất của chúng tôi.

Của Cloud Shell

gcloud compute routers create service-cr \
--region=$region --network=producer-vpc \
--asn=65501

Của Cloud Shell

gcloud compute routers nats create service-nat-gw \
--router=service-cr \
--router-region=$region \
--nat-custom-subnet-ip-ranges=service-subnet \
--auto-allocate-nat-external-ips

Tạo quy tắc về tường lửa

Đối với phòng thí nghiệm này, bạn sẽ sử dụng IAP để kết nối với các phiên bản mà bạn tạo. Quy tắc tường lửa sau đây sẽ cho phép bạn kết nối với các phiên bản thông qua IAP. Nếu bạn không muốn sử dụng IAP, bạn có thể bỏ qua bước này và thay vào đó thêm địa chỉ IP công khai trên ví dụ và tạo quy tắc tường lửa cho phép truy cập trên cổng TCP 22 từ 0.0.0.0/0.

Để cho phép IAP kết nối với các phiên bản máy ảo của bạn, hãy tạo một quy tắc tường lửa:

  • Áp dụng cho tất cả các thực thể máy ảo mà bạn muốn truy cập được bằng cách sử dụng IAP.
  • Cho phép lưu lượng truy cập vào từ dải IP 35.235.240.0/20. Dải ô này chứa tất cả địa chỉ IP mà IAP sử dụng để chuyển tiếp TCP.

Của Cloud Shell

gcloud compute firewall-rules create allow-ssh-iap \
    --network producer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20

Lưu lượng truy cập ứng dụng sẽ bắt nguồn từ trình cân bằng tải HTTP(S) bên ngoài toàn cầu, do đó, bạn phải tạo quy tắc Tường lửa để cho phép lưu lượng truy cập này đến các máy chủ đích được gắn thẻ sẽ lưu trữ dịch vụ web của chúng tôi. Chúng ta cũng sẽ mở quy tắc tường lửa từ client-subnet (client-subnet) của mình nhằm mục đích kiểm tra.

Của Cloud Shell

gcloud compute firewall-rules create allow-xlb-client \
  --network=producer-vpc \
  --direction=ingress \
  --allow=tcp:443 \
  --target-tags=psc-service \
  --source-ranges=130.211.0.0/22,35.191.0.0/16,10.0.1.0/24

Tạo dịch vụ web Apache

Chúng tôi sẽ tạo một Dịch vụ web Apache đơn giản hiển thị "Dịch vụ PSC"

Tạo mẫu phiên bản

Của Cloud Shell

gcloud compute instance-templates create producer-service-template \
    --network producer-vpc \
    --subnet service-subnet \
    --region $region \
    --no-address \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=psc-service \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    echo "PSC Service" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

Tạo tính năng Kiểm tra tình trạng cho MIG

Của Cloud Shell

gcloud compute health-checks create https psc-service-mig-healthcheck \
    --port=443 \
    --global

Tạo nhóm thực thể được quản lý

Của Cloud Shell

gcloud compute instance-groups managed create psc-service-mig \
    --region $region \
    --size=2 \
    --template=producer-service-template \
    --health-check=psc-service-mig-healthcheck

Định cấu hình SSL trên Máy chủ web Apache

Tiếp theo, chúng tôi sẽ cần định cấu hình SSL trên từng máy chủ Web Apache. Chúng ta sẽ thực hiện việc này bằng cách tạo một chứng chỉ rồi thêm chứng chỉ đó vào Cấu hình Apache.

Bạn phải định cấu hình chấm dứt SSL trên các dịch vụ phụ trợ vì dịch vụ phải được đặt trước một trình cân bằng tải TCP/UDP (L4) nội bộ cho mẫu PSC cụ thể này. Trình cân bằng tải TCP/UDP nội bộ không chấm dứt SSL ở tầng cân bằng tải.

Bắt đầu bằng cách tạo SSH vào máy ảo đầu tiên trong MIG của bạn. Vùng máy ảo và tên máy ảo sẽ được phân bổ động cho mỗi môi trường. Trong bảng điều khiển, hãy chuyển đến Compute Engine > Các thực thể máy ảo để tìm tên và vùng của các thực thể đó.

Của Cloud Shell

gcloud compute ssh --zone "<YOUR_VM_ZONE>" "<YOUR_MIG_VM_1>"  --tunnel-through-iap --project $project

Tiếp theo, chúng ta sẽ tạo chứng chỉ thông qua OpenSSL. Bạn sẽ được yêu cầu điền thông tin về Quốc gia, Tiểu bang, Thành phố, Tổ chức, Tên đơn vị tổ chức, Tên phổ biến và địa chỉ email. Thông tin duy nhất bạn cần điền là Common Name (Tên chung), đây phải là FQDN nội bộ do bạn lựa chọn. Để phục vụ mục đích của phòng thí nghiệm này, bạn nên chọn example.com.

Của Cloud Shell

sudo openssl genrsa -out private-key-file.pem 2048

Của Cloud Shell

cat <<'EOF' >config.txt
[req]
default_bits              = 2048
req_extensions            = extension_requirements
distinguished_name        = dn_requirements

[extension_requirements]
basicConstraints          = CA:FALSE
keyUsage                  = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName            = @sans_list

[dn_requirements]
countryName               = Country Name (2 letter code)
stateOrProvinceName       = State or Province Name (full name)
localityName              = Locality Name (eg, city)
0.organizationName        = Organization Name (eg, company)
organizationalUnitName    = Organizational Unit Name (eg, section)
commonName                = Common Name (e.g. server FQDN or YOUR name)
emailAddress              = Email Address

[sans_list]
DNS.1                     = example.com

EOF

Của Cloud Shell

sudo openssl req -new -key private-key-file.pem \
    -out csr.pem \
    -config config.txt

Của Cloud Shell

sudo openssl x509 -req \
    -signkey private-key-file.pem \
    -in csr.pem \
    -out cert.cert \
    -extfile config.txt \
    -extensions extension_requirements \
    -days 10

Bây giờ, hãy cập nhật thông tin cấu hình Apache bằng thông tin chi tiết về chứng chỉ mới của chúng ta.

sudo vi /etc/apache2/sites-enabled/default-ssl.conf

Thêm một dòng trong ServerAdmin có nội dung

ServerName example.com

Cập nhật các SSLCertificateFile và SSLCertificateKeyFile vị trí của tệp cert.cert và các vị trí private-key-file.pem trên máy ảo của bạn. Dưới đây là ví dụ minh hoạ. Hãy nhớ cập nhật <profile> bằng tên thư mục của bạn.

SSLCertificateFile  /home/<profile>/cert.cert

SSLCertificateKeyFile /home/<profile>/private-key-file.pem

Đóng trình chỉnh sửa và khởi động lại Apache.

sudo a2enmod ssl
sudo systemctl restart apache2

Thoát khỏi thực thể và lặp lại các bước tương tự với thực thể còn lại trong nhóm thực thể được quản lý.

6. Tạo Dịch vụ dành cho nhà sản xuất

Tiếp theo, chúng ta sẽ tạo các thành phần cân bằng tải cho dịch vụ.

Tạo quy trình kiểm tra tình trạng của trình cân bằng tải.

Của Cloud Shell

gcloud compute health-checks create https service-lb-healthcheck \
    --port=443 \
    --region=$region

Tạo dịch vụ phụ trợ.

Của Cloud Shell

 gcloud compute backend-services create psc-backend-service \
    --load-balancing-scheme=internal \
    --protocol=TCP \
    --region=$region \
    --health-checks=service-lb-healthcheck \
    --health-checks-region=$region

gcloud compute backend-services add-backend psc-backend-service \
--region=$region \
--instance-group=psc-service-mig

Tạo quy tắc chuyển tiếp. Xin lưu ý rằng quy tắc chuyển tiếp phải được định cấu hình trên cổng 443 và với Quyền truy cập chung. Đây là yêu cầu bắt buộc để mẫu PSC này hoạt động.

Của Cloud Shell

 gcloud compute forwarding-rules create producer-fr \
    --region=$region \
    --load-balancing-scheme=internal \
    --network=producer-vpc \
    --subnet=service-subnet \
    --address=10.0.0.100 \
    --ip-protocol=TCP \
    --ports=443 \
    --backend-service=psc-backend-service \
    --backend-service-region=$region \
    --allow-global-access

7. Kiểm thử Dịch vụ

Trước khi tạo Tệp đính kèm dịch vụ, chúng ta sẽ tạo một ứng dụng khách ở một khu vực khác để kiểm tra Trình cân bằng tải được định cấu hình với Global Access, cũng như dịch vụ Apache được định cấu hình để chấm dứt TLS.

Của Cloud Shell

gcloud compute instances create vm-client \
    --zone=us-east4-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=client-subnet \
    --no-address

SSH vào phiên bản.

Của Cloud Shell

gcloud compute ssh \
    --zone "us-east4-a" "vm-client" \
    --tunnel-through-iap \
    --project $project

Kiểm tra Dịch vụ Apache bằng cách kết nối trên 443 thông qua trình cân bằng tải.

curl https://example.com:443 -k --connect-to example.com:443:10.0.0.100:443

KẾT QUẢ DỰ KIẾN

PSC Service

8. Tạo tệp đính kèm về dịch vụ

Của Cloud Shell

gcloud compute service-attachments create pscservice \
    --region=$region \
    --producer-forwarding-rule=producer-fr \
    --connection-preference=ACCEPT-AUTOMATIC \
    --nat-subnets=producer-nat-subnet

Bạn nên ghi lại URI tệp đính kèm của dịch vụ vì bạn sẽ cần đến URI này trong bước tiếp theo đối với cấu hình điểm cuối. Bạn có thể lấy tệp này bằng cách thực thi lệnh sau trong Cloud Shell

Của Cloud Shell

gcloud compute service-attachments describe pscservice --region $region

Sao chép URI bắt đầu từ /projects

Ví dụ: /projects/<YOUR_PROJECT_ID>/region/us-central1/serviceAttach/pscservice

9. Thiết lập VPC và mạng con của người tiêu dùng

Mạng VPC

Của Cloud Shell

gcloud compute networks create consumer-vpc --subnet-mode custom

Tạo mạng con

Phía người tiêu dùng cần có một mạng con nơi Nhóm thiết bị đầu cuối mạng kết nối dịch vụ riêng tư (NEG) sẽ được triển khai.

Của Cloud Shell

gcloud compute networks subnets create psc-neg-subnet \
--network=consumer-vpc \
--region=$region \
--range=10.100.200.0/24 \
--purpose=private

10. Tạo Điểm cuối kết nối dịch vụ riêng tư và Kiểm tra kết nối

Chúng ta sẽ thực hiện theo quy trình tạo PSC NEG sẽ được liên kết với Tài liệu đính kèm dịch vụ mà chúng tôi vừa tạo, đính kèm PSC NEG vào dịch vụ phụ trợ và liên kết dịch vụ phụ trợ với quy tắc chuyển tiếp.

Có sẵn URI tệp đính kèm dịch vụ mà chúng tôi đã ghi chú ở bước trước. Thay thế URL bên dưới bằng URI của bạn.

Của Cloud Shell

gcloud beta compute network-endpoint-groups create xlb-psc-neg \
--network-endpoint-type=private-service-connect \
--psc-target-service=projects/<PROJECT-ID>/regions/us-central1/serviceAttachments/pscservice \
--region=$region \
--network=consumer-vpc \
--subnet=psc-neg-subnet

Tạo địa chỉ IP công khai XLB và lấy địa chỉ IP thực tế được chỉ định để kiểm tra sau này.

Của Cloud Shell

gcloud compute addresses create xlb-psc-address \
--ip-version=IPv4 --global

gcloud compute addresses describe xlb-psc-address --format="get(address)" --global

Tiếp theo, chúng ta sẽ tạo điểm cuối PSC, trong trường hợp này là trong Trình cân bằng tải bên ngoài.

Của Cloud Shell

gcloud beta compute backend-services create pscneg-backend-service \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTPS \
--global

Của Cloud Shell

gcloud beta compute backend-services add-backend pscneg-backend-service \
--network-endpoint-group=xlb-psc-neg \
--network-endpoint-group-region=$region \
--global

Của Cloud Shell

gcloud beta compute url-maps create xlb-psc-map \
--default-service=pscneg-backend-service \
--global

Của Cloud Shell

gcloud beta compute target-http-proxies create psc-http-proxy \
--url-map=xlb-psc-map

Của Cloud Shell

gcloud beta compute forwarding-rules create xlb-psc-fr \
--load-balancing-scheme=EXTERNAL_MANAGED \
--network-tier=PREMIUM \
--address=xlb-psc-address \
--target-http-proxy=psc-http-proxy \
--ports=80 \
--global

Đợi 5-7 phút, sau đó nhập địa chỉ IP được liên kết với địa chỉ xlb-psc-address vào thanh địa chỉ của trình duyệt.

Nếu "Dịch vụ PSC" được hiển thị, thì bạn đã định cấu hình giải pháp đúng cách.

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

Từ một thiết bị đầu cuối Cloud Shell, xoá các thành phần trong phòng thí nghiệm

gcloud beta compute forwarding-rules delete xlb-psc-fr --global --quiet

gcloud beta compute target-http-proxies delete psc-http-proxy --quiet

gcloud beta compute url-maps delete xlb-psc-map --global --quiet

gcloud beta compute backend-services delete pscneg-backend-service --global --quiet

gcloud compute addresses delete xlb-psc-address --global --quiet

gcloud beta compute network-endpoint-groups delete xlb-psc-neg --region $region --quiet

gcloud compute networks subnets delete psc-neg-subnet --region $region --quiet

gcloud compute networks delete consumer-vpc --quiet

gcloud compute service-attachments delete pscservice --region $region --quiet

gcloud compute instances delete vm-client --zone=us-east4-a --quiet

gcloud compute forwarding-rules delete producer-fr --region $region --quiet

gcloud compute backend-services delete psc-backend-service --region $region --quiet

gcloud compute health-checks delete service-lb-healthcheck --region $region --quiet

gcloud compute instance-groups managed delete psc-service-mig --region $region --quiet

gcloud compute health-checks delete psc-service-mig-healthcheck --region $region --quiet

gcloud compute instance-templates delete producer-service-template --quiet

gcloud compute firewall-rules delete allow-xlb-client --quiet

gcloud compute firewall-rules delete allow-ssh-iap --quiet

gcloud compute routers nats delete service-nat-gw –router service-cr --region $region --quiet

gcloud compute routers delete service-cr --region $region --quiet

gcloud compute networks subnets delete client-subnet --quiet

gcloud compute networks subnets delete service-subnet --quiet

gcloud compute networks subnets delete producer-nat-subnet --quiet

gcloud compute networks delete producer-vpc --quiet

12. Xin chúc mừng!

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

Nội dung đã đề cập

  • Tạo điểm cuối Private Service Connect bằng các tuỳ chọn kiểm soát dịch vụ HTTP(S) của người tiêu dùng bằng Global XLB
  • Định cấu hình cho một dịch vụ được quản lý hiển thị thông qua một Tệp đính kèm dịch vụ để chấp nhận các kết nối L7 XLB.
  • Tạo chứng chỉ SSL và định cấu hình máy chủ web Apache để chấm dứt TLS và chấp nhận lưu lượng truy cập trên cổng 443.
  • Tạo PSC NEG.