Kết nối với thực thể AlloyDB riêng tư từ ứng dụng chạy trên GKE Autopilot

1. Tổng quan

Trong phòng thí nghiệm này, bạn sẽ triển khai một dịch vụ vi mô 2 cấp, trong đó có một nhóm chạy trên GKE Autopilot và kết nối nhóm đó với một thực thể riêng tư của cơ sở dữ liệu AlloyDB. Ứng dụng Dịch vụ khách hàng là một phần của hệ thống Cymbal Eats và cung cấp chức năng quản lý người dùng đã đăng ký. Ứng dụng Dịch vụ khách hàng là một dịch vụ vi mô dựa trên Java, sử dụng khung Quarkus.

e8a5140b09521b7a.png

AlloyDB hỗ trợ kết nối mạng thông qua các địa chỉ IP nội bộ, riêng tư được định cấu hình để truy cập vào các dịch vụ riêng tư.

Quyền truy cập vào các dịch vụ riêng tư được triển khai dưới dạng kết nối ngang hàng VPC giữa mạng VPC của bạn và mạng VPC cơ bản của Google Cloud nơi lưu trữ các tài nguyên (cụm và phiên bản) AlloyDB của bạn. Kết nối riêng tư cho phép các tài nguyên trong mạng VPC của bạn giao tiếp với các tài nguyên AlloyDB mà những tài nguyên đó chỉ truy cập bằng cách sử dụng địa chỉ IP nội bộ. Các tài nguyên trong mạng VPC của bạn không cần có quyền truy cập Internet hoặc địa chỉ IP bên ngoài để truy cập tài nguyên AlloyDB.

44662d7a086358de.png.

GKE Autopilot là gì?

GKE Autopilot là một chế độ hoạt động trong GKE, trong đó Google quản lý cấu hình cụm của bạn, bao gồm cả các nút, điều chỉnh tỷ lệ, bảo mật và các chế độ cài đặt được định cấu hình sẵn khác. Các cụm tự động triển khai được tối ưu hoá để chạy hầu hết các tải công việc trong môi trường thực tế và cung cấp tài nguyên điện toán dựa trên tệp kê khai của Kubernetes. Cấu hình được tinh giản tuân theo các đề xuất và phương pháp hay nhất của GKE để thiết lập cụm và tải công việc, cũng như khả năng mở rộng và bảo mật. Để biết danh sách các chế độ cài đặt tích hợp sẵn, hãy tham khảo bảng so sánh Tiêu chuẩn và Tự động triển khai.

AlloyDB là gì?

Dịch vụ cơ sở dữ liệu tương thích với PostgreSQL được quản lý toàn diện cho các tải công việc đòi hỏi cao nhất về cơ sở dữ liệu doanh nghiệp. AlloyDB kết hợp những tính năng ưu việt nhất của Google với một trong những công cụ cơ sở dữ liệu nguồn mở phổ biến nhất là PostgreSQL, để mang lại hiệu suất, quy mô và khả năng sử dụng vượt trội.

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

Trong phòng thí nghiệm này, bạn sẽ tìm hiểu cách thực hiện những việc sau:

  • Tạo thực thể riêng tư của cơ sở dữ liệu AlloyDB
  • Triển khai một ứng dụng trên cụm GKE Autopilot và kết nối với thực thể AlloyDB

Điều kiện tiên quyết

  • Phòng thí nghiệm này giả định rằng bạn đã quen thuộc với môi trường Cloud Console và Cloud Shell.
  • Bạn đã có kinh nghiệm sử dụng GKE và AlloyDB trước đây là rất hữu ích nhưng không bắt buộc.

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

Thiết lập dự án trên Cloud

  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. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
  • Mã dự án 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 (mã này thường được xác định là PROJECT_ID). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử phương pháp của riêng mình và xem có được cung cấp hay không. Bạn không thể thay đổi thông tin này sau bước này và thông báo đó sẽ vẫn tồn tại trong thời gian của dự án.
  • Đối với thông tin của bạn, có giá trị thứ ba, 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ẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. 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 nhằm tránh bị tính phí ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạn đã tạo hoặc xoá toàn bộ dự án. 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.

Thiết lập môi trường

Kích hoạt Cloud Shell bằng cách nhấp vào biểu tượng ở bên phải thanh tìm kiếm.

eb0157a992f16fa3.png

Sao chép kho lưu trữ rồi di chuyển đến thư mục, sao chép và dán lệnh bên dưới vào cửa sổ dòng lệnh rồi nhấn Enter:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

Triển khai các phần phụ thuộc bắt buộc bằng cách chạy gke-lab-setup.sh

Các tài nguyên sau đây sẽ được tạo:

  • Cụm và bản sao AlloyDB
  • Artifact Registry để lưu trữ hình ảnh vùng chứa cho Cloud Run Job và Dịch vụ khách hàng
  • Trình kết nối Quyền truy cập VPC cho Cloud Run Job để giao tiếp với cơ sở dữ liệu AlloyDB
  • Công việc chạy trên đám mây để tạo cơ sở dữ liệu AlloyDB
  • Cụm tự động triển khai GKE
./gke-lab-setup.sh

Nếu được nhắc cho phép, hãy nhấp vào "Uỷ quyền" để tiếp tục.

6356559df3eccdda.pngS

Quá trình thiết lập sẽ mất khoảng 10 phút. Xem tập lệnh thiết lập dùng để tạo các phần phụ thuộc bắt buộc.

gke-lab-setup.sh

Hãy chờ cho đến khi tập lệnh hoàn tất và bạn sẽ thấy kết quả bên dưới trước khi chạy các bước tiếp theo.

Job [db-job] has successfully been created.

To execute this job, use:
gcloud beta run jobs execute db-job
OK Creating execution... Done.               
  OK Provisioning resources...
Done.
Execution [db-job-k94ps] has successfully started running.

3. Triển khai ứng dụng

Xem xét cụm AlloyDB

Chạy lệnh bên dưới để xem lại bản sao AlloyDB đã tạo:

gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1

Kết quả mẫu:

createTime: '2023-01-06T14:40:07.213288293Z'
instanceType: PRIMARY
ipAddress: 10.77.176.2
machineConfig:
  cpuCount: 2
name: projects/cymbal-eats-20056-16671/locations/us-central1/clusters/customer-cluster/instances/customer-instance
nodes:
- zoneId: us-central1-f
queryInsightsConfig:
  queryPlansPerMinute: 5
  queryStringLength: 1024
  recordApplicationTags: true
  recordClientAddress: true
reconciling: false
state: READY
uid: df90d57d-88df-49be-a626-6dfec0513e64
updateTime: '2023-01-06T14:49:40.907977843Z'
writableNode:
  zoneId: us-central1-b

Khám phá các tính năng hiện có(Thông tin chi tiết về truy vấn, Giám sát) trong bảng điều khiển.

3b12b0fa1367fb42.png.

Xem xét cụm Tự động triển khai của GKE

Đặt các biến môi trường của Dự án:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')

Trong quá trình thiết lập ban đầu, cụm được tạo bằng lệnh bên dưới (Bạn không cần chạy lệnh này):

gcloud container clusters create-auto $CLUSTER_NAME --region $REGION

Chạy lệnh để xem cụm GKE Autopilot đã tạo:

gcloud container clusters list

Kết quả mẫu:

e8882c44fa0bb631.png

Chạy lệnh để lưu trữ thông tin đăng nhập cho cụm:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION

Triển khai ứng dụng

Tiếp theo, bạn sẽ triển khai ứng dụng Dịch vụ khách hàng.

Ứng dụng Dịch vụ khách hàng là một dịch vụ vi mô dựa trên java sử dụng khung Quarkus.

Chuyển đến thư mục cymbal-eats/customer-service rồi chạy các lệnh để tạo và tải hình ảnh vùng chứa lên:

./mvnw clean package -DskipTests

export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Mở Cloud Build trong bảng điều khiển để xem lại chi tiết về bản dựng mới nhất.

49fd65309967ae47.pngs

Đặt biến môi trường bên dưới bằng cách sử dụng giá trị của địa chỉ IP riêng tư AlloyDB:

export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
    --cluster=customer-cluster \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo $DB_HOST

Chạy các lệnh bên dưới để tạo đối tượng bí mật của Kubernetes nhằm lưu trữ thông tin đăng nhập của cơ sở dữ liệu mà ứng dụng Dịch vụ khách hàng sẽ dùng để kết nối với cơ sở dữ liệu:

DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123

kubectl create secret generic gke-alloydb-secrets \
  --from-literal=database=$DB_NAME \
  --from-literal=username=$DB_USER \
  --from-literal=password=$DB_PASSWORD \
  --from-literal=db_host=$DB_HOST

Chạy lệnh để thay thế CUSTOMER_SERVICE_IMAGE trong tệp triển khai.yaml:

sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml

Chạy lệnh để triển khai ứng dụng:

kubectl apply -f customer-service-deployment.yaml

Ứng dụng sẽ mất một lúc để chuyển sang trạng thái CHẠY.

Chạy lệnh để tạo IP bên ngoài sẽ được dùng trong các bước kiểm thử:

SERVICE_NAME=customer-service

kubectl expose deployment $SERVICE_NAME \
  --type LoadBalancer --port 80 --target-port 8080

Chạy lệnh để xác minh tài nguyên đã tạo:

kubectl get all

Kết quả mẫu:

179a23bd33793924.pngs

4. Kiểm thử ứng dụng

Chạy các lệnh bên dưới để lưu URL Dịch vụ khách hàng.

kubectl get svc

Đặt biến môi trường ở bên dưới bằng cách sử dụng giá trị của IP ngoài từ dữ liệu đầu ra trước đó.

CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

Chạy các lệnh bên dưới để tạo bản ghi khách hàng mới:

curl -X POST $CUSTOMER_SERVICE_URL/customer \
-H 'Content-Type: application/json' \
-d '{"id": "id1","rewardPoints": 3,"address": "1845 Denise St","city": "Mountain View","createDateTime": "2022-11-11T15:56:45.487566","email": "ajensen9090+eats@gmail.com","name": "Angela Jensen","state": "CA","updateDateTime": "2022-11-11T15:56:45.866125","zip": "94043"}'

Chạy lệnh trên nhiều lần để tạo thông điệp nhật ký mà bạn sẽ xem trong Trình khám phá nhật ký sau này.

Kiểm tra hồ sơ của khách hàng

Chạy các lệnh bên dưới để xem bản ghi khách hàng đã tạo.

curl $CUSTOMER_SERVICE_URL/customer | jq

Kết quả mẫu:

[
  {
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2023-01-06T16:13:19.118744",
    "email": "ajensen9090+eats@gmail.com",
    "id": "id1",
    "name": "Angela Jensen",
    "rewardPoints": 3,
    "state": "CA",
    "updateDateTime": "2023-01-06T16:13:19.118896",
    "zip": "94043"
  }
]

Xem xét các dịch vụ và tải công việc GKE

Mở Kubernetes Engine trong Cloud Console rồi xem lại các Khối lượng công việc và Dịch vụ đã tạo.

e1217216e003a839.png

d5c97fb5950c4db.png

Nhật ký ứng dụng

Mở Logs Explorer (Trình khám phá nhật ký) rồi tìm nhật ký có chứa thông tin "Khách hàng đã tồn tại" .

543c5ed97819f540.pngS

5. Xin chúc mừng!

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

Những nội dung chúng ta đã đề cập:

  • Cách tạo phiên bản riêng tư của cơ sở dữ liệu AlloyDB
  • Cách triển khai ứng dụng trên cụm GKE Autopilot và kết nối với thực thể AlloyDB

Bước tiếp theo:

Khám phá các lớp học lập trình khác về Cymbal Eats:

Dọn dẹp

Để tránh làm phát sinh chi phí cho các tài nguyên được sử dụng trong hướng dẫn này trong tài khoản Google Cloud của bạn, hãy xoá dự án chứa các tài nguyên đó, hoặc giữ lại dự án và xoá từng tài nguyên riêng lẻ.

Xoá dự án

Cách dễ nhất để loại bỏ việc thanh toán là xoá dự án bạn đã tạo cho phần hướng dẫn.