1. Giới thiệu
Private Service Connect có cấu hình DNS tự động sử dụng Service Directory và Cloud DNS để tự động tạo các bản ghi DNS được lập trình bằng địa chỉ IP đ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 Private Service Connect toàn diện minh hoạ cách sử dụng DNS tự động như minh hoạ trong Hình 1.
DNS tự động có thể được thực hiện bằng các cách sau:
- Tệp đính kèm dịch vụ của nhà sản xuất tạo ra DNS tự động bằng cách cung cấp một miền Công khai thuộc sở hữu của bạn có cờ "– domain-names" khi tạo tệp đính kèm dịch vụ Private Service Connect.
- Thành phần sử dụng xác định tên điểm cuối.
- DNS tự động tạo cả Vùng DNS goog-psc-default-us-central1 và tên DNS cosmopup.net, ngoài mục nhập Danh 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 dùng thông qua DNS, FQDN stargazer.cosmopup.net.
Hình 1
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ụ có DNS tự động
- Cách thiết lập dịch vụ Nhà sản xuất Private Service Connect
- 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 trên Google Cloud
- Miền công khai 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ợ triển khai cấu hình gcloud trong Cloud Shell.
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
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 của nhà sản xuất
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
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ộ
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ổ
Sử dụng lệnh mô tả địa chỉ điện 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
Việc phân bổ proxy diễn ra ở cấp mạng VPC, chứ không phải ở cấp bộ cân bằng tải. Bạn phải tạo một mạng con chỉ dành cho proxy trong mỗi khu vực của mạng ảo (VPC) mà bạn sử dụng bộ 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 một khu vực và cùng một mạng VPC, thì các trình cân bằng tải đó sẽ dùng chung một mạng con chỉ dành cho proxy để cân bằng tải.
- Ứng dụng khách kết nối với địa chỉ IP và cổng của quy tắc chuyển tiếp của bộ cân bằng tải.
- Mỗi proxy sẽ nghe địa chỉ IP và cổng do quy tắc chuyển tiếp của bộ cân bằng tải tương ứng chỉ định. Một trong các proxy sẽ nhận và chấm dứt kết nối mạng của ứng dụng.
- Proxy thiết lập kết nối với máy ảo phụ trợ thích hợp do bản đồ URL và dịch vụ phụ trợ của trình cân bằng tải xác định.
Bạn phải tạo mạng con chỉ dành cho proxy, bất kể mạng VPC của bạn ở chế độ tự động hay chế độ tuỳ chỉnh. Mạng con chỉ có proxy phải cung cấp từ 64 địa chỉ IP trở lên. Giá trị này tương ứng với độ dài tiền tố là /26 trở xuống. Kích thước mạng con đề xuất là /23 (512 địa chỉ chỉ dành cho proxy).
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 các mạng con NAT của 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 Google Cloud Console để phát hành dịch vụ, bạn có thể tạo các 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ột mạng con thông thường thành mạng con Private Service Connect.
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 nhà sản xuất
Đị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 Dịch vụ kết nối riêng tư và mạng con chỉ có proxy ILB.
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 quy trình kiểm tra tình trạng của Google Cloud tiếp cận 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 tường lửa cho phép lưu lượng truy cập 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ì thực thể 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 một phiên bản Compute Engine và nhóm phiên bản không được quản lý. Trong các bước sau, 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 quy trình 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 bộ 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 phát hành dưới dạng tệp đính kèm dịch vụ ở bước sau
Bên trong Cloud Shell, hãy tạo quy trình 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 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 đến proxy. Không sử dụng mạng con chỉ dành cho 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
Trong Cloud Console, hãy chuyển đến phần Dịch vụ mạng → Cân bằng tải → Bộ 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ợ
Việc chọn "l7-ilb-map" sẽ trả về địa chỉ IP giao diện người dùng. Địa chỉ này phải khớp với địa chỉ IP mà bạn đã tìm nạp ở bước trước và xác định Dịch vụ phụ trợ.
5. Tạo tệp đính kèm dịch vụ Private Service Connect
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 dấu chấm "." vào 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 → Private Service Connect để xem tệp đính kèm dịch vụ mới được thiết lập
Việc chọn published-service sẽ cung cấp thêm thông tin chi tiết, bao gồm cả URI đính kèm dịch vụ mà người dùng sử dụng để thiết lập Kết nối dịch vụ riêng tư và tên miền.
Thông tin chi tiết về tệp đính kèm dịch vụ:
projects/<project name>/regions/us-central1/serviceAttachments/published-service
6. Thiết lập người dùng
Bật API người dùng
Bên trong Cloud, Shell 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 VPC của người dùng
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 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 dùng (quy tắc chuyển tiếp)
Bên trong Cloud Shell, hãy tạo Địa chỉ IP tĩnh sẽ được 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 ta sử dụng URI tệp đí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 dùng
Trên mạng VPC của người 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 Network Services (Dịch vụ mạng) → Private Service Connect (Kết nối dịch vụ riêng tư) → Connected Endpoints (Điểm cuối đã kết nối). Hãy lưu ý đến kết nối stargazer đã thiết lập và Địa chỉ IP tương ứng mà chúng ta đã tạo trước đó.
Khi chọn psc-consumer-1, thông tin chi tiết sẽ được cung cấp, bao gồm cả URI đính kèm dịch vụ
8. Xác thực kết nối trong mạng VPC của nhà sản xuất
Trên 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 Dịch vụ mạng → Kết nối dịch vụ riêng tư → Dịch vụ đã xuất bản. Lưu ý rằng kết nối dịch vụ đã xuất bản hiện cho biết 1 quy tắc chuyển tiếp (điểm cuối kết nối).
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 → Khu vực. Vùng goog-psc-default-us-central & tên DNS cosmopup.net. được tạo tự động.
Xem cấu hình DNS và Thư mục dịch vụ
Khi 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.
Cấu hình Danh bạ dịch vụ
Chuyển đến Dịch vụ mạng → Thư mục dịch vụ
Hãy nhớ tên điểm cuối của người dùng là "stargazer"? Ứng dụng này được lập trình tự động trong Service Directory (Danh mục dịch vụ) cho phép chúng ta truy cập vào điểm cuối của người dùng bằng cách sử dụng FQDN stargazer.goog-psc-default–us-central1
10. Xác thực quyền truy cập của người dùng vào dịch vụ của nhà sản xuất
Từ mạng VPC của người dùng, chúng ta sẽ tạo một máy ảo để kiểm thử khả năng kết nối của dịch vụ đã phát hành bằng cách truy cập vào điểm cuối của người dùng stargazer.cosmopup.net
Bên trong Cloud Shell, hãy tạo thực thể kiểm thử trong vpc của người dù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, hãy tạo một quy tắc tường lửa:
- Áp dụng cho tất cả các phiên bản máy ảo mà bạn muốn truy cập bằng IAP.
- Cho phép lưu lượng truy cập vào từ dải IP 35.235.240.0/20. Phạm vi 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 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 consumer-vm bằng IAP trong Cloud Shell để xác thực khả năng kết nối với dịch vụ nhà sản xuất bằng cách thực hiện một lệnh curl. 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 một curl xác thực khả năng kết nối với dịch vụ nhà sản xuất. Sau khi xác thực, hãy thoát khỏi máy ảo và quay lại lời nhắc của Cloud Shell
Bên trong Cloud Shell, hãy thực hiện một lệnh curl đối với 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 lệnh curl được thực hiện đối với 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 để quay lại lời nhắc Cloud Shell nhằm bắt đầu các tác vụ dọn dẹp
11. Dọn dẹp
Trong 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 một điểm cuối 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à thêm một tệp đính kèm dịch vụ có đăng ký miền công khai. Bạn đã tìm hiểu cách tạo điểm cuối của người dùng trong mạng VPC của người 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 các lớp học lập trình rất tuyệt vời!!
Tiếp theo là gì?
Hãy xem một số lớp học lập trình này...
- Sử dụng Private Service Connect để phát hành và sử dụng các dịch vụ bằng GKE
- Sử dụng Private Service Connect để phát hành và sử dụng dịch vụ
- Kết nối với các dịch vụ tại chỗ thông qua Mạng kết hợp bằng Private Service Connect và bộ cân bằng tải Proxy TCP nội bộ
Tài liệu đọc thêm và video
- Tổng quan về Private Service Connect
- Kết nối dịch vụ riêng tư (PSC) là gì?
- Các loại bộ cân bằng tải được hỗ trợ