Private Service Connect có cấu hình DNS tự động

1. Giới thiệu

Private Service Connect có cấu hình DNS tự động sử dụng Thư mục dịch vụ và Cloud DNS để tự động tạo bản ghi DNS được lập trình bằng địa chỉ IP của điểm cuối Private Service Connect của người dùng.

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, bạn sẽ xây dựng một cấu trúc toàn diện của Kết nối dịch vụ riêng tư minh hoạ cách sử dụng DNS tự động như minh hoạ trong Hình 1.

Bạn có thể sử dụng DNS tự động bằng những cách sau đây:

  1. Tệp đính kèm dịch vụ dành cho nhà sản xuất tạo DNS tự động bằng cách cung cấp một miền Công cộng sở hữu với "– tên miền" gắn cờ khi tạo tệp đính kèm dịch vụ Kết nối dịch vụ riêng tư.
  2. Ứng dụng tiêu thụ xác định tên điểm cuối.
  3. DNS tự động tạo ra cả Vùng DNS goog-psc-default-us-central1 và tên DNS cosmopup.net, ngoài mục nhập Thư mục dịch vụ bao gồm tên điểm cuối của người dùng.

Lợi ích của DNS tự động được minh hoạ trong (4) trong đó người dùng cuối có thể giao tiếp với điểm cuối của người tiêu dùng thông qua DNS, FQDN stargazer.cosmopup.net.

Hình 1

5e26a358454d1336.pngS

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

  • Cách tạo trình cân bằng tải HTTP(S) nội bộ
  • Cách tạo tệp đính kèm dịch vụ bằng DNS tự động
  • Cách thiết lập dịch vụ Nhà sản xuất kết nối dịch vụ riêng tư
  • Cách truy cập vào điểm cuối của người dùng bằng DNS tự động

Bạn cần có

  • Dự án trong Google Cloud
  • Phạm vi công cộng mà bạn sở hữu

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

Cập nhật dự án để hỗ trợ lớp học lập trình

Lớp học lập trình này sử dụng $variables để hỗ trợ việc triển khai cấu hình gcloud trong Cloud Shell.

Bên trong Cloud Shell, hãy thực hiện như sau:

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

3. Thiết lập Producer

Tạo VPC của nhà sản xuất

Bên trong Cloud Shell, hãy thực hiện như sau:

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

Tạo mạng con cho nhà sản xuất

Bên trong Cloud Shell, hãy thực hiện như sau:

gcloud compute networks subnets create gce-subnet --project=$projectname --range=172.16.20.0/28 --network=producer-vpc --region=us-central1

Bên trong Cloud Shell, hãy thực hiện như sau:

gcloud compute networks subnets create load-balancer-subnet --project=$projectname --range=172.16.10.0/28 --network=producer-vpc --region=us-central1

Đặt trước địa chỉ IP cho trình cân bằng tải nội bộ

Bên trong Cloud Shell, hãy thực hiện như sau:

gcloud compute addresses create lb-ip \
    --region=us-central1 \
    --subnet=load-balancer-subnet \
    --purpose=GCE_ENDPOINT

Xem địa chỉ IP được phân bổ

Dùng lệnh mô tả địa chỉ tính toán để xem địa chỉ IP được phân bổ

gcloud compute addresses describe lb-ip  --region=us-central1 | grep address:

Tạo mạng con proxy theo khu vực

Quá trình phân bổ proxy ở cấp mạng VPC, không phải ở cấp trình cân bằng tải. Bạn phải tạo một mạng con chỉ có proxy trong mỗi khu vực của mạng ảo (VPC) mà bạn sử dụng các trình cân bằng tải dựa trên Envoy. Nếu bạn triển khai nhiều trình cân bằng tải trong cùng khu vực và cùng một mạng VPC, thì các trình này sẽ dùng chung một mạng con chỉ có proxy để cân bằng tải.

  1. Ứng dụng sẽ kết nối với địa chỉ IP và cổng cho quy tắc chuyển tiếp của trình cân bằng tải.
  2. Mỗi proxy xử lý địa chỉ IP và cổng được chỉ định bởi quy tắc chuyển tiếp của trình cân bằng tải tương ứng. Một trong các proxy nhận và chấm dứt kết nối mạng của ứng dụng.
  3. Proxy thiết lập kết nối với máy ảo phụ trợ phù hợp được xác định bởi bản đồ URL và các dịch vụ phụ trợ của trình cân bằng tải.

Bạn phải tạo mạng con chỉ proxy, bất kể mạng VPC của bạn là chế độ tự động hay chế độ tuỳ chỉnh. Mạng con chỉ có proxy phải cung cấp 64 địa chỉ IP trở lên. Số này tương ứng với độ dài tiền tố là /26 trở xuống. Kích thước mạng con được đề xuất là /23 (512 địa chỉ chỉ proxy).

Bên trong Cloud Shell, hãy thực hiện như sau:

gcloud compute networks subnets create proxy-subnet-us-central \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=us-central1 \
  --network=producer-vpc \
  --range=172.16.0.0/23

Tạo mạng con NAT Private Service Connect

Tạo một hoặc nhiều mạng con chuyên dụng để sử dụng với Private Service Connect. Nếu đang sử dụng bảng điều khiển Google Cloud để xuất bản một dịch vụ, thì bạn có thể tạo mạng con trong quy trình đó. Tạo mạng con trong cùng khu vực với trình cân bằng tải của dịch vụ. Bạn không thể chuyển đổi mạng con thông thường thành mạng con Private Service Connect.

Bên trong Cloud Shell, hãy thực hiện như sau:

gcloud compute networks subnets create psc-nat-subnet \
    --project $projectname \
    --network producer-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

Tạo quy tắc tường lửa cho trình tạo

Định cấu hình quy tắc tường lửa để cho phép lưu lượng truy cập giữa mạng con NAT của Private Service Connect và mạng con chỉ proxy ILB.

Bên trong Cloud Shell, hãy thực hiện như sau:

gcloud compute --project=$projectname firewall-rules create allow-to-ingress-nat-subnet --direction=INGRESS --priority=1000 --network=producer-vpc --action=ALLOW --rules=all --source-ranges=100.100.10.0/24

Bên trong Cloud Shell, hãy tạo quy tắc tường lửa fw-allow-health-check để cho phép các yêu cầu kiểm tra tình trạng của Google Cloud kết nối với dịch vụ nhà sản xuất (dịch vụ phụ trợ) trên cổng TCP 80.

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

Tạo quy tắc cho phép tường lửa vào cho mạng con chỉ có proxy để cho phép trình cân bằng tải giao tiếp với các thực thể phụ trợ trên cổng TCP 80.

gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
    --network=producer-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=172.16.0.0/23 \
    --rules=tcp:80

Cấu hình Cloud Router và NAT

Cloud NAT được dùng trong lớp học lập trình để cài đặt gói phần mềm vì phiên bản máy ảo không có địa chỉ IP bên ngoài.

Bên trong Cloud Shell, hãy tạo bộ định tuyến trên đám mây.

gcloud compute routers create cloud-router-for-nat --network producer-vpc --region us-central1

Bên trong Cloud Shell, hãy tạo cổng NAT.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

Cấu hình nhóm thực thể

Trong phần sau, bạn sẽ tạo phiên bản Compute Engine và nhóm thực thể không được quản lý. Trong các bước tiếp theo, nhóm thực thể sẽ được dùng làm dịch vụ phụ trợ của trình cân bằng tải.

Bên trong Cloud Shell, hãy tạo yêu cầu kiểm tra tình trạng theo khu vực được chuyển đến dịch vụ nhà sản xuất.

gcloud compute instances create app-server-1 \
    --project=$projectname \
    --machine-type=e2-micro \
    --image-family debian-10 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=gce-subnet \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to App-Server-1 !!' | tee /var/www/html/index.html
      EOF"

Bên trong Cloud Shell, hãy tạo nhóm thực thể không được quản lý.

gcloud compute instance-groups unmanaged create psc-instance-group --zone=us-central1-a

gcloud compute instance-groups unmanaged set-named-ports psc-instance-group --project=$projectname --zone=us-central1-a --named-ports=http:80

gcloud compute instance-groups unmanaged add-instances psc-instance-group --zone=us-central1-a --instances=app-server-1

Định cấu hình trình cân bằng tải

Trong các bước sau, bạn sẽ định cấu hình trình cân bằng tải HTTP nội bộ. Trình cân bằng tải này sẽ được xuất bản dưới dạng tệp đính kèm dịch vụ trong bước sau

Bên trong Cloud Shell, hãy tạo yêu cầu kiểm tra tình trạng theo khu vực.

gcloud compute health-checks create http http-health-check \
    --region=us-central1 \
    --use-serving-port

Bên trong Cloud Shell, hãy tạo dịch vụ phụ trợ.

 gcloud compute backend-services create l7-ilb-backend-service \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=http-health-check \
      --health-checks-region=us-central1 \
      --region=us-central1

Bên trong Cloud Shell, hãy thêm phần phụ trợ vào dịch vụ phụ trợ.

gcloud compute backend-services add-backend l7-ilb-backend-service \
  --balancing-mode=UTILIZATION \
  --instance-group=psc-instance-group \
  --instance-group-zone=us-central1-a \
  --region=us-central1

Bên trong Cloud Shell, hãy tạo bản đồ URL để định tuyến các yêu cầu đến đến dịch vụ phụ trợ.

gcloud compute url-maps create l7-ilb-map \
    --default-service l7-ilb-backend-service \
    --region=us-central1

Tạo proxy mục tiêu HTTP.

gcloud compute target-http-proxies create l7-ilb-proxy\
    --url-map=l7-ilb-map \
    --url-map-region=us-central1 \
    --region=us-central1

Tạo quy tắc chuyển tiếp để định tuyến các yêu cầu đến tới proxy. Không sử dụng mạng con chỉ có proxy để tạo quy tắc chuyển tiếp.

 gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=producer-vpc \
      --subnet=load-balancer-subnet \
      --address=lb-ip \
      --ports=80 \
      --region=us-central1 \
      --target-http-proxy=l7-ilb-proxy \
      --target-http-proxy-region=us-central1

4. Xác thực trình cân bằng tải

Từ Cloud Console, hãy chuyển đến Dịch vụ mạng → Cân bằng tải → Trình cân bằng tải. Ghi lại kết quả kiểm tra tình trạng thành công cho dịch vụ phụ trợ

881567cc11627009.pngS

Chọn "l7-ilb-map" sẽ tạo ra địa chỉ IP của giao diện người dùng. Địa chỉ này khớp với địa chỉ IP mà bạn đã xác định ở bước trước và xác định Dịch vụ phụ trợ.

bab89b0a7b4f95e9.png

5. Tạo tệp đính kèm cho dịch vụ Kết nối dịch vụ riêng tư

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

Bên trong Cloud Shell, hãy tạo tệp đính kèm dịch vụ. Hãy nhớ thêm '.' ở cuối tên miền.

gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet --domain-names=cosmopup.net.

Không bắt buộc: Nếu sử dụng VPC dùng chung, hãy tạo tệp đính kèm dịch vụ trong dự án dịch vụ.

gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=projects/<hostproject>/regions/us-central1/subnetworks/psc-nat-subnet --domain-names=cosmopup.net.

Chuyển đến Dịch vụ mạng → Kết nối dịch vụ riêng tư để xem tệp đính kèm dịch vụ mới thiết lập

d27fee9073dbbe2.png

Việc chọn published-service sẽ cung cấp thông tin chi tiết hơn, bao gồm cả URI tệp đính kèm dịch vụ mà người tiêu dùng sử dụng để thiết lập Kết nối dịch vụ riêng tư và tên miền.

503df63730c62df2.pngs

Thông tin chi tiết về tệp đính kèm dịch vụ:

dự án/<tên dự án>/ khu vực/us-central1/serviceAttach/Publish-service

6. Thiết lập dành cho người tiêu dùng

Bật API người dùng thông thường

Bên trong Cloud, Shell sẽ thực hiện những việc sau:

gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com

Tạo mạng lưới VPC của người tiêu dùng

Bên trong Cloud Shell, hãy thực hiện như sau:

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

Tạo mạng con của người tiêu dùng

Bên trong Cloud Shell, hãy tạo mạng con cho thực thể kiểm thử.

gcloud compute networks subnets create db1-subnet --project=$projectname --range=10.20.0.0/28 --network=consumer-vpc --region=us-central1

Bên trong Cloud Shell, hãy tạo một mạng con cho điểm cuối của người dùng.

gcloud compute networks subnets create consumer-ep-subnet --project=$projectname --range=10.10.0.0/28 --network=consumer-vpc --region=us-central1

Tạo điểm cuối của người tiêu dùng (quy tắc chuyển tiếp)

Bên trong Cloud Shell, hãy tạo Địa chỉ IP tĩnh để dùng cho điểm cuối của người dùng.

gcloud compute addresses create psc-consumer-ip-1 --region=us-central1 --subnet=consumer-ep-subnet --addresses 10.10.0.10

Chúng tôi sử dụng URI đính kèm dịch vụ đã tạo trước đó để tạo điểm cuối của người dùng.

Bên trong Cloud Shell, hãy tạo điểm cuối của người dùng.

gcloud compute forwarding-rules create stargazer --region=us-central1 --network=consumer-vpc --address=psc-consumer-ip-1 --target-service-attachment=projects/$projectname/regions/us-central1/serviceAttachments/published-service

7. Xác thực kết nối trong mạng VPC của người tiêu dùng

Từ mạng VPC của người tiêu dùng, hãy xác minh Kết nối dịch vụ riêng tư thành công bằng cách chuyển đến Dịch vụ mạng → Kết nối dịch vụ riêng tư → Điểm cuối đã kết nối. Hãy lưu ý kết nối stargazer đã được thiết lập và Địa chỉ IP tương ứng mà chúng ta đã tạo trước đó.

c60812433c3e1676.png

Khi chọn, chúng tôi cung cấp thông tin chi tiết về psc-consumer-1, bao gồm cả URI đính kèm dịch vụ

14d3e3b1e0aee3c2.pngS

8. Xác thực kết nối trong mạng VPC của nhà sản xuất

Từ mạng VPC của nhà sản xuất, hãy xác minh Kết nối dịch vụ riêng tư thành công bằng cách chuyển đến Network Services (Dịch vụ mạng) → Private Service Connect (Kết nối dịch vụ riêng tư) → Publishing Service (Dịch vụ đã xuất bản). Xin lưu ý rằng trạng thái kết nối dịch vụ đã xuất bản hiện cho biết có 1 quy tắc chuyển tiếp (điểm cuối kết nối).

911dbd7421bcfd3a.pngS

9. Xác thực cấu hình DNS tự động

Hãy đánh giá cấu hình DNS và Thư mục dịch vụ.

Cấu hình Cloud DNS

Chuyển đến Dịch vụ mạng → Cloud DNS → Vùng. Tên vùng goog-psc-default-us-central & DNS cosmopup.net. được tạo tự động.

4395e7b33fc42faa.pngS

Xem cấu hình DNS và Thư mục dịch vụ

Khi bạn chọn tên vùng, chúng ta có thể xem cách Thư mục dịch vụ được tích hợp với Cloud DNS.

e4fe44d945b20451.png

Cấu hình Danh bạ dịch vụ

Chuyển đến Dịch vụ mạng → Thư mục dịch vụ

Bạn có nhớ tên điểm cuối dành cho người tiêu dùng "stargazer" không? Dịch vụ này được lập trình tự động trong Danh bạ dịch vụ. Nhờ đó, chúng tôi có thể tiếp cận người dùng cuối bằng cách sử dụng FQDN stargazer.goog-psc-default–us-central1 của FQDN

602deab65b5ac315.pngS

10. Xác thực quyền truy cập của người tiêu dùng vào dịch vụ của nhà sản xuất

Từ mạng VPC của người tiêu dùng, chúng tôi sẽ tạo một máy ảo để kiểm thử khả năng kết nối của dịch vụ đã xuất bản bằng cách truy cập vào điểm cuối dành cho người tiêu dùng stargazer.cosmopup.net

Bên trong Cloud Shell, hãy tạo một thực thể kiểm thử trong vpc dành cho người dùng thông thường.

gcloud compute instances create db1 \
    --zone=us-central1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=db1-subnet \
    --no-address

Để 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.

Bên trong Cloud Shell, hãy tạo quy tắc tường lửa cho IAP.

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

Đăng nhập vào tài khoản người tiêu dùng vm bằng IAP trong Cloud Shell để xác thực khả năng kết nối với dịch vụ của nhà sản xuất bằng cách thực hiện một curl. Hãy thử lại nếu hết thời gian chờ.

gcloud compute ssh db1 --project=$projectname --zone=us-central1-a --tunnel-through-iap

Thực hiện việc xác thực kết nối cuộn tròn với dịch vụ thực thể sản xuất. Sau khi xác thực lượt thoát khỏi máy ảo, hãy quay lại lời nhắc của Cloud Shell

Bên trong Cloud Shell sẽ cuộn trên miền tuỳ chỉnh của bạn, ví dụ: stargazer.[custom-domain.com]. Trong kết quả bên dưới, một curl được thực hiện trên stargazer.cosmopup.net

user@db1:~$ curl -v stargazer.cosmopup.net
*   Trying 10.10.0.10...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55d3aa8190f0)
* Connected to stargazer.cosmopup.net (10.10.0.10) port 80 (#0)
> GET / HTTP/1.1
> Host: stargazer.cosmopup.net
> User-Agent: curl/7.64.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< date: Thu, 22 Dec 2022 00:16:25 GMT
< server: Apache/2.4.38 (Debian)
< last-modified: Wed, 21 Dec 2022 20:26:32 GMT
< etag: "1b-5f05c5e43a083"
< accept-ranges: bytes
< content-length: 27
< content-type: text/html
< via: 1.1 google
< 
Welcome to App-Server-1 !!

Thoát khỏi máy ảo và quay lại lời nhắc của Cloud Shell để bắt đầu các nhiệm vụ dọn dẹp

11. Dọn dẹp

Trên Cloud Shell, hãy xoá các thành phần của lớp học lập trình.

gcloud compute forwarding-rules delete stargazer --region=us-central1 --quiet

gcloud compute instances delete db1 --zone=us-central1-a --quiet 

gcloud compute addresses delete psc-consumer-ip-1 --region=us-central1 --quiet 

gcloud compute networks subnets delete consumer-ep-subnet db1-subnet --region=us-central1 --quiet 

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

gcloud compute networks delete consumer-vpc --quiet 

gcloud compute service-attachments delete published-service --region=us-central1 --quiet 

gcloud compute forwarding-rules delete l7-ilb-forwarding-rule --region=us-central1 --quiet 

gcloud compute target-http-proxies delete l7-ilb-proxy --region=us-central1 --quiet 
 
gcloud compute url-maps delete l7-ilb-map --region=us-central1 --quiet 
 
gcloud compute backend-services delete l7-ilb-backend-service --region=us-central1 --quiet
 
gcloud compute instance-groups unmanaged delete psc-instance-group --zone=us-central1-a --quiet
 
gcloud compute instances delete app-server-1 --zone=us-central1-a --quiet 
 
gcloud compute firewall-rules delete allow-to-ingress-nat-subnet fw-allow-health-check fw-allow-proxy-only-subnet --quiet 
 
gcloud compute addresses delete lb-ip --region=us-central1 --quiet 
 
gcloud compute networks subnets delete gce-subnet load-balancer-subnet psc-nat-subnet proxy-subnet-us-central --region=us-central1 --quiet 
 
gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet 
 
gcloud compute networks delete producer-vpc --quiet 

12. Xin chúc mừng

Xin chúc mừng! Bạn đã định cấu hình và xác thực thành công điểm cuối của Private Service Connect bằng cấu hình DNS tự động.

Bạn đã tạo cơ sở hạ tầng nhà sản xuất và bạn đã thêm một tệp đính kèm dịch vụ bằng cách đăng ký miền công cộng. Bạn đã tìm hiểu cách tạo điểm cuối của người tiêu dùng trong mạng VPC của người tiêu dùng để cho phép kết nối với dịch vụ tại chỗ bằng DNS được tạo tự động.

Cosmopup cho rằng lớp học lập trình thật tuyệt vời!!

8c2a10eb841f7b01.jpeg

Tiếp theo là gì?

Hãy xem một số lớp học lập trình này...

Tài liệu đọc thêm & Video

Tài liệu tham khảo