Triển khai khối lượng công việc Confidential Space bằng MIG bằng cách sử dụng tính năng Tự động mở rộng quy mô, Tự động khắc phục và Cập nhật hình ảnh

1. Tổng quan

Không gian bí mật (CS) cung cấp một môi trường an toàn, được chứng thực và mã hoá để xử lý dữ liệu nhạy cảm. Việc dựa vào các phiên bản máy ảo độc lập sẽ tạo ra chi phí vận hành, vì việc điều phối thủ công không có khả năng mở rộng cần thiết cho các dịch vụ quan trọng. Nếu không có tính năng điều phối tự động, việc thực hiện các bản cập nhật luân phiên được đồng bộ hoá hoặc triển khai hình ảnh hệ điều hành mới trên một nhóm thiết bị sẽ trở nên khó khăn về mặt kỹ thuật và dễ xảy ra thời gian ngừng hoạt động.

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách triển khai một tải công việc trong Không gian bảo mật trên Nhóm phiên bản được quản lý (MIG). Bạn cũng sẽ tìm hiểu cách bật tính năng tự phục hồi bằng cách sử dụng các quy trình kiểm tra tình trạng, phương thức tự động cấp tài nguyên bổ sung dựa trên mức sử dụng CPU và cập nhật từng phần cho cả hình ảnh hệ điều hành và tải.

Các quy trình được trình bày trong lớp học lập trình này sẽ giúp bạn thiết lập Confidential Space bảo mật và sẵn sàng cho hoạt động sản xuất của riêng mình cho các hoạt động triển khai quan trọng và kéo dài.

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

  • Cách tạo một mẫu phiên bản chuyên biệt cho Không gian riêng tư.
  • Cách sử dụng Google Compute Engine và cách định cấu hình MIG cũng như nhóm thực thể
  • Cách tạo quy tắc tường lửa và Kiểm tra tình trạng để tự khắc phục.
  • Cách định cấu hình MIG theo khu vực bằng mẫu và quy trình kiểm tra tình trạng.
  • Cách thiết lập tính năng tự động mở rộng quy mô cho MIG.
  • Cách thiết lập tính năng cập nhật hình ảnh hệ điều hành bằng một lần nhấp thông qua việc sử dụng tập lệnh trên MIG cho cả hình ảnh tải cũng như các bản phát hành hình ảnh hệ điều hành mới cho Confidential Space

Bạn cần có

  • Một dự án trên Google Cloud đã bật tính năng thanh toán.
  • Làm quen với trình chỉnh sửa văn bản, việc triển khai Docker và tập lệnh Bash
  • Công cụ dòng lệnh gcloud đã được cài đặt và xác thực.
  • Có kiến thức cơ bản về Compute Engine, Confidential Space, IAM, Máy ảo bảo mật, công nghệ vùng chứa, kho lưu trữ từ xa, tài khoản dịch vụ, Cloud Run và Cloud Scheduler
  • Hình ảnh vùng chứa tải của Không gian bảo mật đã được tạo và chuyển đến Artifact Registry.

2. Cách hoạt động của Không gian bảo mật có MIG

Việc sử dụng Nhóm phiên bản được quản lý (MIG) để triển khai một khối lượng công việc trong Confidential Space giúp ứng dụng bảo mật trở nên mạnh mẽ, có khả năng mở rộng và dễ vận hành hơn.

Nhu cầu về tính bảo mật và hoạt động của một dịch vụ sản xuất được chia thành 2 thành phần một cách hợp lý. Confidential Space cung cấp khả năng bảo mật cần thiết bằng cách chạy khối lượng công việc trong một môi trường được chứng thực, mã hoá và biệt lập cao, được gọi là Môi trường thực thi đáng tin cậy (TEE). Ngược lại, MIG cung cấp các chức năng vận hành thiết yếu cần thiết để chạy ứng dụng bảo mật ở quy mô lớn, tương tự như Kubernetes. Nhóm phiên bản được quản lý (MIG) giúp loại bỏ những rủi ro vốn có khi chạy một khối lượng công việc quan trọng trên một VM duy nhất. VM này có thể chậm hoặc dễ gặp sự cố. Sự kết hợp này đảm bảo cả việc bảo vệ dữ liệu và độ tin cậy của hệ thống. Giải pháp này đảm bảo Tính sẵn sàng caoKhả năng tự phục hồi vì khối lượng công việc chạy trên nhiều VM trong một nhóm. Nếu một VM gặp sự cố, dịch vụ vẫn hoạt động đầy đủ do tính năng cân bằng tải và sự hiện diện của các phiên bản còn lại.

Ngoài ra, MIG sử dụng các chế độ kiểm tra tình trạng có thể định cấu hình để liên tục giám sát trạng thái hoạt động của các VM. Nếu phát hiện thấy một phiên bản không hoạt động bình thường, MIG sẽ tự động thay thế phiên bản đó bằng một VM mới hoạt động bình thường, nhờ đó đảm bảo hoạt động liên tục.

MIG cũng mang lại khả năng mở rộng hiệu quả cho người dùng nhờ tính năng tự động mở rộng quy mô. Khả năng này cung cấp một cách tự động để quản lý dung lượng mà không cần can thiệp thủ công, đáp ứng nhu cầu linh hoạt thêm hoặc xoá dung lượng dựa trên mức sử dụng.

Cuối cùng, MIG cho phép Cập nhật không thời gian ngừng hoạt động thông qua Cập nhật từng phần. Một lợi ích chính là khả năng " nâng cấp bằng một cú nhấp chuột" cho hình ảnh hệ điều hành Confidential Space cơ bản hoặc hình ảnh vùng chứa của ứng dụng (hoặc cả hai), mà không gây ra bất kỳ thời gian ngừng hoạt động nào của dịch vụ. MIG quản lý thay đổi này bằng cách dần thay thế các phiên bản cũ bằng các phiên bản mới chạy hình ảnh đã cập nhật, đảm bảo tính khả dụng liên tục trong suốt quá trình triển khai. Xin lưu ý rằng ứng dụng của bạn có thể cần tương thích ngược để hỗ trợ loại nâng cấp từng bước này.

3. Thiết lập tài nguyên trên đám mây

Trước khi bắt đầu

  1. Thiết lập một dự án trên Google Cloud. Để biết thêm thông tin về cách tạo dự án trên đám mây của Google, vui lòng tham khảo lớp học lập trình"Thiết lập và điều hướng dự án Google đầu tiên của bạn". Bạn có thể tham khảo bài viết tạo và quản lý dự án để biết thông tin chi tiết về cách truy xuất mã dự án và mã dự án khác với tên dự án và số dự án như thế nào.
  2. Bật tính năng Thanh toán cho các dự án của bạn.
  3. Trong Cloud Shell của một trong các dự án Google, hãy đặt các biến môi trường dự án bắt buộc như minh hoạ bên dưới.
export  CURRENT_PROJECT_ID=<Google Cloud project id of current project>
  1. Bật Điện toán bảo mật API và các API sau đây cho dự án của bạn.
gcloud config set project $CURRENT_PROJECT_ID
gcloud services enable \
cloudapis.googleapis.com \
container.googleapis.com \
artifactregistry.googleapis.com \
confidentialcomputing.googleapis.com \
compute.googleapis.com \
logging.googleapis.com \
run.googleapis.com \
cloudscheduler.googleapis.com
  1. Trong Cloud Shell của dự án trên đám mây Google Cloud, hãy nhân bản Kho lưu trữ Confidential Space Codelab trên Github và dùng lệnh bên dưới để lấy các tập lệnh phù hợp cần thiết để hoàn thành lớp học lập trình này.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
  1. Thay đổi thư mục thành thư mục tập lệnh cho lớp học lập trình nhóm phiên bản
cd confidential-space/codelabs/mig_cs_codelab/scripts
  1. Cập nhật dòng mã dự án trong config_env.sh để phản ánh mã dự án của dự án bạn đã chọn.
  2. Đặt mọi biến số có sẵn. Ghi đè tên tài nguyên bằng các biến này
  • Bạn có thể đặt các biến sau bằng tên tài nguyên đám mây hiện có. Nếu bạn đặt biến này, thì các tài nguyên đám mây hiện có tương ứng trong dự án sẽ được dùng. Nếu bạn không đặt tên này, thì tên tài nguyên đám mây sẽ lấy từ tập lệnh config_env.sh
  1. Chạy tập lệnh config_env.sh để đặt các tên biến còn lại cho dự án này thành các giá trị dựa trên mã dự án cho tên tài nguyên
source config_env.sh
  1. Thêm quyền cho dự án. Bạn có thể thêm quyền bằng cách làm theo thông tin chi tiết trên trang web cấp vai trò IAM.

Bạn cần có các quyền sau cho dự án này

  • Người viết Artifact Registry
  • Quản trị viên Cloud Scheduler
  • Nhân viên hỗ trợ dịch vụ điện toán
  • Người dùng tải Điện toán bảo mật
  • Người ghi nhật ký
  • Nhà phát triển Cloud Run
  • Cloud Run Invoker
gcloud config set project $CURRENT_PROJECT_ID

# Add Artifact Registry Writer role
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/artifactregistry.writer'

# Add Confidential Space Workload Userd
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/confidentialcomputing.workloadUser'

# Add Logging Log Writer
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/logging.logWriter'

# Add Cloud Run Developer
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/run.developer'

# Add Cloud Run Invoker
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/run.invoker'


# Add Cloud Scheduler Admin
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/cloudscheduler.admin'
  1. Xem test_workload.py
  • Xác minh kết quả của tải bằng cách xem xét mã nguồn, kết quả chỉ cần in phiên bản hiện tại của tải
  • Khi lần đầu tiên chuyển khối lượng công việc sang CS và kiểm tra đầu ra, chúng ta sẽ thấy "phiên bản A" được in ra

4. Thiết lập khối lượng công việc

Trước tiên, bạn cần tạo một hình ảnh Docker cho tải trọng được dùng trong lớp học lập trình này. Tải là một tập lệnh đơn giản in ra phiên bản của tải mà bạn hiện đang chạy. Chương trình sẽ in ra thông báo cho biết khối lượng công việc đang bắt đầu, sau đó in ra phiên bản của khối lượng công việc, tạm dừng trong 5 giây rồi in ra thông báo cho biết khối lượng công việc đã hoàn tất.

Các bước tạo Workload

  1. Chạy create_workload.sh để tạo tải. Tập lệnh này:
  • Tạo Artifact Registry thuộc sở hữu của Dự án nơi tải sẽ được xuất bản
  • Tạo mã và đóng gói mã đó trong một hình ảnh Docker. Hãy xem cấu hình dockerfile được liên kết để biết thêm thông tin.
  • Xuất bản hình ảnh Docker vào Artifact Registry do dự án sở hữu
  • Cấp cho tài khoản dịch vụ <tên tài khoản dịch vụ của bạn> quyền đọc đối với kho lưu trữ hiện vật <tên kho lưu trữ hiện vật>

5. Thiết lập Mẫu phiên bản và MIG

Các bước tạo mẫu thực thể

Trước tiên, bạn phải tạo một Mẫu phiên bản. Mẫu này là bản thiết kế bắt buộc mà Nhóm phiên bản được quản lý (MIG) sẽ dùng để cung cấp và chạy các khối lượng công việc của bạn trong Confidential Space.

Mẫu thực thể là yếu tố cần thiết vì mẫu này xác định tất cả các tham số chuyên biệt:

  • Loại máy: Trong ví dụ này, chúng ta sử dụng loại máy VM bảo mật (ví dụ: n2d-standard-2) hỗ trợ công nghệ điện toán bảo mật AMD SEV (--confidential-compute-type=SEV).
  • Hình ảnh hệ điều hành máy ảo: Chúng tôi sử dụng dự án confidential-space-images và họ hình ảnh confidential-space-debug để kéo hình ảnh hệ điều hành Confidential Space mới nhất.
  • Lưu ý: Chúng tôi sử dụng hình ảnh gỡ lỗi trong hướng dẫn này để giúp bạn khắc phục sự cố dễ dàng hơn. Không giống như hình ảnh sản xuất, phiên bản gỡ lỗi sẽ giữ cho máy ảo hoạt động sau khi khối lượng công việc của bạn hoàn tất và cho phép truy cập SSH để kiểm thử. Đối với các hoạt động triển khai chính thức sử dụng dữ liệu nhạy cảm trong thế giới thực, bạn phải chuyển sang họ hình ảnh chính thức.
  • Tham chiếu tải: Dòng bắt buộctee-image-reference trong siêu dữ liệu chứa hình ảnh vùng chứa cụ thể (tải ứng dụng của bạn) mà VM trong Không gian bảo mật sẽ khởi chạy.

Chế độ thiết lập này đảm bảo rằng mọi VM do MIG tạo đều là một Không gian bảo mật được định cấu hình đúng cách và sẵn sàng thực thi khối lượng công việc của bạn.

Các bước tạo Nhóm phiên bản được quản lý

Bước tiếp theo là tạo Nhóm phiên bản được quản lý (MIG) bằng mẫu mà bạn vừa xác định. MIG là thành phần thiết yếu vì nó tự động hoá việc triển khai, quản lý và mở rộng quy mô của nhiều VM giống hệt nhau.

Tập lệnh create_launch_mig.sh hoàn thành 3 mục tiêu chính:

1. Tạo MIG

  • Lệnh: gcloud compute instance-groups managed create ${CURRENT_MIG_NAME}
  • Mục đích: Lệnh này tạo nhóm sẽ quản lý các máy ảo của bạn.
  • --size 3: Chỉ định rằng MIG ban đầu phải tạo và duy trì 3 phiên bản của khối lượng công việc.
  • --template ${TEMPLATE_NAME}: Điều quan trọng là nó tham chiếu đến Instance Template (Mẫu thực thể) đã được tạo trước đó, đảm bảo cả 3 thực thể đều được định cấu hình dưới dạng VM Confidential Space chạy vùng chứa tải cụ thể của tee-image-reference.
  • --zone ${CURRENT_PROJECT_ZONE}: Chỉ định vị trí triển khai cho các phiên bản.

2. Tìm nạp mã số dự án

  • Lệnh: PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
  • Mục đích: Tập lệnh này tìm nạp mã nhận dạng bằng số của dự án. Bạn thường cần có số này để tạo vai trò và quyền cho tài khoản dịch vụ, đặc biệt là đối với các tác nhân dịch vụ do Google quản lý.

3. Cấp quyền IAM

  • Lệnh: gcloud projects add-iam-policy-binding --role="roles/compute.serviceAgent"
  • Mục đích: Bước này cấp vai trò Tác nhân dịch vụ Compute Engine cho Tài khoản dịch vụ của tải (${SERVICE_ACCOUNT). Quyền này rất quan trọng vì cho phép Tài khoản dịch vụ thay mặt cho dịch vụ Compute Engine của dự án thực hiện các thao tác. Điều này thường cần thiết cho các tính năng tự động của MIG, chẳng hạn như quản lý các phiên bản, thiết lập mạng và tương tác với các dịch vụ khác của Google Cloud.

Chạy create_launch_mig.sh để tạo nhóm phiên bản được quản lý.

6. Các bước để bật tính năng Tự phục hồi và Tự động mở rộng quy mô

Thiết lập tính năng Tự động khắc phục

Để đảm bảo tính sẵn sàng cao, chúng tôi xác minh rằng khối lượng công việc có phản hồi. Nếu ứng dụng bị treo, MIG sẽ thay thế VM. Các quy tắc tường lửa cho dải IP nguồn được xác định trong tài liệu này.

# 1. Create Health Check (TCP Port 22)
gcloud compute health-checks create tcp ${HEALTH_CHECK_NAME} \
  --port 22 \
  --check-interval 30s \
  --healthy-threshold 1 \
  --timeout 10s \
  --unhealthy-threshold 3 \
  --global

# 2. Allow Health Check Traffic (Firewall)
gcloud compute firewall-rules create allow-health-check \
    --allow tcp:22 \
    --source-ranges 130.211.0.0/22,35.191.0.0/16 \
    --network default \
    --project="${CURRENT_PROJECT_ID}" \ 

# 3. Apply to MIG
gcloud compute instance-groups managed update ${CURRENT_MIG_NAME} \
    --health-check ${HEALTH_CHECK_NAME} \
    --initial-delay 60 \
    --zone ${CURRENT_PROJECT_ZONE}

Thiết lập phương thức tự động cấp tài nguyên bổ sung

Chúng tôi sẽ định cấu hình nhóm để tự động cấp tài nguyên bổ sung từ 1 đến 5 thực thể nhằm xử lý các đợt tăng đột biến về lưu lượng truy cập.

gcloud compute instance-groups managed set-autoscaling ${CURRENT_MIG_NAME} \
    --max-num-replicas 5 \
    --target-cpu-utilization 0.80 \
    --cool-down-period 90 \
    --zone ${CURRENT_PROJECT_ZONE}

7. Xác minh khối lượng công việc và thiết lập thông tin cập nhật hình ảnh

Xác minh đơn vị công việc

Sau khi Nhóm phiên bản được quản lý (MIG) khởi chạy các VM, chúng ta cần xác minh rằng tải Confidential Space đang chạy đúng cách.

Bạn có thể thực hiện việc này thông qua Bảng điều khiển Google Cloud hoặc Dòng lệnh.

gcloud compute instance-groups managed list-instances ${CURRENT_MIG_NAME} \
    --zone ${CURRENT_PROJECT_ZONE}

Bạn cũng có thể kiểm tra Đầu ra của cổng nối tiếp cho phiên bản cụ thể đó để xem nhật ký của khối lượng công việc

# Replace <INSTANCE_NAME> with one of the names from the previous command
gcloud compute instances get-serial-port-output <INSTANCE_NAME> \
    --zone ${CURRENT_PROJECT_ZONE} \
    --port 1

Thiết lập tính năng Cập nhật hình ảnh

Trong môi trường sản xuất, Nhóm phiên bản được quản lý (MIG) phải được cập nhật thường xuyên để giải quyết 2 trường hợp riêng biệt:

  1. Cập nhật khối lượng công việc: Phát hành phiên bản mới của mã xử lý ứng dụng (ví dụ: cập nhật test_workload.py từ phiên bản 1 lên phiên bản 2).
  2. Bản cập nhật cơ sở hạ tầng: Google phát hành bản vá bảo mật hoặc bản cập nhật cho hệ điều hành Confidential Space cơ bản. Xin lưu ý rằng bạn nên lấy hình ảnh mới nhất của CS ít nhất mỗi tháng một lần.

Vì đã định cấu hình Mẫu phiên bản bằng Đường liên kết đến hình ảnh động (.../images/family/...) và Thẻ vùng chứa động (:latest), nên chúng ta có thể xử lý cả hai trường hợp này bằng một thao tác "Thay thế luân phiên". Điều này đảm bảo nhóm VM của bạn luôn chạy ngăn xếp mới nhất mà không bị thời gian ngừng hoạt động và không yêu cầu bạn tạo một Mẫu phiên bản mới cho mọi thay đổi nhỏ.

The Rolling Replace Script

Trong thư mục update_images, hãy chuyển đến update_images_script.sh. Tập lệnh này kích hoạt lệnh Rolling Replace (Thay thế luân phiên), lệnh này sẽ huỷ và tạo lại từng VM trong nhóm một cách từ từ

#!/bin/bash

# Initialize the template
gcloud compute instance-groups managed set-instance-template "${CURRENT_MIG_NAME}" \
--template=projects/"${PROJECT_ID}"/global/instanceTemplates/"${TEMPLATE_NAME}" \
--zone="${CURRENT_PROJECT_ZONE}" \
--project="${PROJECT_ID}"

# Trigger the rolling replace
gcloud compute instance-groups managed rolling-action replace "${CURRENT_MIG_NAME}" \
    --version=template="${TEMPLATE_NAME}" \
    --project="${PROJECT_ID}" \
    --zone="${CURRENT_PROJECT_ZONE}" \
    --max-surge=1 \
    --max-unavailable=0

# Wait for the update to complete
gcloud compute instance-groups managed wait-until --version-target-reached "${CURRENT_MIG_NAME}" \
    --zone="${CURRENT_PROJECT_ZONE}" \
    --project="${PROJECT_ID}"

Đối với tập lệnh này, chúng ta có thể dùng lệnh thay thế thay vì khởi động lại.

  • Lệnh Restart (Khởi động lại) chỉ khởi động lại máy. Thao tác này sẽ giữ nguyên đĩa hệ điều hành hiện có, tức là thao tác này sẽ không chọn các bản vá hệ điều hành mới.
  • Lệnh Replace sẽ xoá VM và tạo một VM mới từ mẫu. Thao tác này buộc hệ thống tra cứu hình ảnh hệ điều hành Confidential Space mới nhất từ họ cũng như kéo hình ảnh vùng chứa "Mới nhất" từ sổ đăng ký.

–max-surge=1: Lệnh này cho phép MIG tạm thời tạo 1 VM bổ sung so với kích thước mục tiêu. Thao tác này sẽ tạo một VM mới (đã cập nhật) và đợi VM này hoạt động bình thường trước khi xoá một VM cũ (lỗi thời).

–max-unavailable=0: Lệnh này đảm bảo không có thời gian ngừng hoạt động. Quy tắc này cho biết MIG không được phép tắt bất kỳ máy nào trừ phi đã thay thế thành công.

Tập lệnh khởi động lại luân phiên

Trong thư mục update_images cũng có một tập lệnh khác là update_workload_image_script.sh. Tập lệnh này kích hoạt Rolling Restart (Khởi động lại luân phiên). Đây là một phương pháp nhanh hơn, chỉ dùng để làm mới khối lượng công việc. Vì Confidential Space kéo hình ảnh vùng chứa từ sổ đăng ký ở mỗi lần khởi động, nên việc khởi động lại là đủ để cập nhật ứng dụng của bạn lên phiên bản :latest mà không làm thay đổi máy chủ lưu trữ cơ bản.

#!/bin/bash
# Reboots the existing VMs to refresh the container
gcloud compute instance-groups managed rolling-action restart "${CURRENT_MIG_NAME}" \
    --project="${PROJECT_ID}" \
    --zone="${CURRENT_PROJECT_ZONE}" \
    --max-surge=1 \
    --max-unavailable=0

# Wait for the update to complete
gcloud compute instance-groups managed wait-until --stable "${CURRENT_MIG_NAME}" \
    --zone="${CURRENT_PROJECT_ZONE}" \
    --project="${CURRENT_PROJECT_ID}"

Xác minh khối lượng công việc đã cập nhật

Chúng ta có thể kiểm thử "Nâng cấp bằng một lần nhấp" bằng cách mô phỏng một bản phát hành ứng dụng thực tế. Chúng ta sẽ sửa đổi mã tải, đẩy mã đó vào Artifact Registry, cập nhật MIG và xác minh rằng phiên bản mới đang chạy mà không bị gián đoạn.

Bước 1: Triển khai phiên bản tải mới

Trước tiên, chúng ta cần tạo một phiên bản "mới" cho ứng dụng của bạn.

  1. Mở tệp test_workload.py cục bộ.
  2. Thay đổi câu lệnh in phiên bản từ print("Workload Version A") thành print("Workload Version B")
  3. Tạo lại và đẩy hình ảnh vùng chứa vào Artifact Registry bằng cách chạy create_workload.sh. Xin lưu ý rằng chúng ta đang đẩy đến cùng một thẻ (:latest).

Bước 2: Thực hiện quy trình Cập nhật từng bước

Chạy tập lệnh cập nhật mà chúng ta đã tạo ở phần trước. Thao tác này sẽ buộc MIG thay thế mọi VM, kéo hàm băm vùng chứa mới được liên kết với :latest.

# Run your update script
./update_images/update_images_script.sh

Chờ tập lệnh hoàn tất

Bước 3: Xác minh nội dung cập nhật qua cổng nối tiếp

Sau khi quá trình cập nhật hoàn tất, chúng tôi sẽ xác minh rằng các VM mới đang chạy mã đã cập nhật.

# Replace <INSTANCE_NAME> with one of the names from the previous command
gcloud compute instances get-serial-port-output <INSTANCE_NAME> \
    --zone ${CURRENT_PROJECT_ZONE} \
    --port 1

Lấy tên của một phiên bản mới:

gcloud compute instance-groups managed list-instances ${CURRENT_MIG_NAME} --zone ${CURRENT_PROJECT_ZONE}

Kiểm tra nhật ký:

# Replace <NEW_INSTANCE_NAME> with one of the names of the running VMs
gcloud compute instances get-serial-port-output <NEW_INSTANCE_NAME> \
    --zone ${CURRENT_PROJECT_ZONE} \
    --port 1

Sau khi các phiên bản đang chạy, hãy chọn tên phiên bản bất kỳ trong lệnh gcloud trước đó để xem cổng nối tiếp của phiên bản đó

Kết quả dự kiến: Bạn sẽ thấy thông điệp nhật ký đã cập nhật, xác nhận rằng quá trình triển khai đã thành công:

... Workload Version B ...

Bước 4: Xác minh cấu hình cơ sở hạ tầng (Không bắt buộc)

Bạn cũng có thể xác minh rằng Instance Template được định cấu hình đúng cách để kéo các bản cập nhật động cho cả hệ điều hành và Workload bằng cách kiểm tra siêu dữ liệu của Instance Template.

Chạy lệnh sau để xem tham chiếu vùng chứa động:

gcloud compute instance-templates describe ${TEMPLATE_NAME} \
    | grep -A 1 tee-image-reference

Kết quả: Bạn sẽ thấy hình ảnh vùng chứa kết thúc bằng :latest.

  • Hệ quả: Vì mẫu này trỏ đến thẻ chứ không phải một hàm băm cụ thể, nên mọi thao tác thay thế luân phiên đều kéo thành công mã mới nhất mà bạn đã đẩy ở Bước 1.

(Không bắt buộc) Tự động cập nhật

Mặc dù các bản cập nhật thủ công rất hữu ích cho các bản phát hành phiên bản lớn, nhưng bạn thường muốn đội xe của mình tự động nhận các bản vá bảo mật mới nhất hoặc các bản dựng triển khai thường xuyên mà không cần sự can thiệp của con người.

Chúng ta có thể tự động hoá quy trình "Thay thế luân phiên" bằng cách đóng gói tập lệnh cập nhật vào một Cloud Run Job. Trong lớp học lập trình này, chúng ta sẽ kích hoạt tính năng này sau mỗi 15 phút. Trong môi trường phát hành, bạn nên chạy ít thường xuyên hơn. Tuỳ thuộc vào nhu cầu của người dùng, họ có thể định cấu hình tính năng này hằng tuần hoặc hằng tháng.

Bước 1: Đóng gói Tập lệnh cập nhật vào vùng chứa

Trước tiên, chúng ta cần đóng gói update_images_script.sh (chứa logic thay thế rolling-action gcloud ...) vào một vùng chứa Docker để có thể chạy trong đám mây.

Chúng tôi đã chuẩn bị một tập lệnh trợ giúp để tạo vùng chứa này và đẩy vùng chứa đó vào Artifact Registry của bạn.

Chạy lệnh sau:

# Build and Push the "Updater" Container
# This packages your update logic into a docker image
./update_images/deploy_docker_script_image.sh

Tác dụng của tính năng này:

  • Lệnh này lấy update_images_script.sh từ thư mục update_images/.
  • Thao tác này sẽ tạo một hình ảnh Docker chứa Google Cloud SDK và tập lệnh của bạn.
  • Lệnh này sẽ đẩy hình ảnh đến ${CURRENT_PROJECT_REGION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY}/update-script:latest.

Bước 2: Triển khai và lên lịch cho công việc

Bây giờ, chúng ta cần yêu cầu Google Cloud chạy vùng chứa này định kỳ. Chúng tôi sử dụng Cloud Run Jobs để thực thi vùng chứa và Cloud Scheduler để kích hoạt vùng chứa đó.

Chạy tập lệnh cấu hình lập lịch:

# Create the Cloud Run Job and the Scheduler Trigger
./create_configs/create_schedule_job.sh

Trong tập lệnh: Tập lệnh này thực hiện 2 hành động quan trọng:

  1. Tạo một Cloud Run Job: Lệnh này xác định một job có tên là mig-updater-job để thực thi vùng chứa mà chúng ta vừa đẩy.
  2. Tạo Trình kích hoạt theo lịch: Trình kích hoạt này thiết lập một công việc Cloud Scheduler để truy cập vào Cloud Run Job API sau mỗi 15 phút.
# (Snippet from create_schedule_job.sh for reference)
# The schedule is set to run every 15 minutes for testing purposes
gcloud scheduler jobs create http ${SCHEDULER_NAME} \
    --schedule "*/15 * * * *" \
    --uri "https://${CURRENT_PROJECT_REGION}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${PROJECT_ID}/jobs/${JOB_NAME}:run" \
    --http-method POST \
    --oauth-service-account-email ${SERVICE_ACCOUNT}

Bước 3: Xác minh tính năng Tự động hoá

Bạn không cần phải đợi 15 phút để kiểm tra. Bạn có thể buộc trình lập lịch biểu chạy ngay lập tức để xác minh pipeline.

  1. Force Run the Job (Buộc chạy tác vụ):
gcloud scheduler jobs run ${SCHEDULER_NAME} --location ${CURRENT_PROJECT_REGION}
  1. Kiểm tra quá trình thực thi: Chuyển đến bảng điều khiển Cloud Run > Jobs (Tác vụ). Bạn sẽ thấy một quy trình thực thi mới bắt đầu.
  2. Kiểm tra MIG: Chạy gcloud compute instance-groups managed list-instances ${CURRENT_MIG_NAME}. Bạn sẽ thấy các phiên bản chuyển sang trạng thái TẠO LẠI khi công việc kích hoạt quy trình cập nhật từng phần.

Tại sao lại là 15 phút? Chúng ta sẽ đặt lịch biểu thành */15 * * * * cho lớp học lập trình này để bạn có thể thấy kết quả một cách nhanh chóng. Trong môi trường phát hành thực tế, bạn có thể thay đổi chế độ này để chạy hằng ngày (ví dụ: 0 3 * * * cho 3 giờ sáng) hoặc hằng tuần.

8. Dọn dẹp

Bạn có thể dùng tập lệnh dọn dẹp cleanup.sh để dọn dẹp các tài nguyên mà chúng ta đã tạo trong lớp học lập trình này. Trong quá trình dọn dẹp này, các tài nguyên sau đây sẽ bị xoá:

  • Nhóm thực thể được quản lý (${CURRENT_MIG_NAME}) và các VM cơ bản của nhóm.
  • Mẫu phiên bản (${TEMPLATE_NAME}).
  • Health Check và Firewall Rules (${HEALTH_CHECK_NAME}).
  • Kho lưu trữ Artifact Registry (${REPOSITORY}).
  • Tài khoản dịch vụ (nếu bạn đã tạo một tài khoản riêng cho lớp học này).

Nếu bạn đã khám phá xong, vui lòng cân nhắc xoá dự án của mình bằng cách làm theo hướng dẫn sau: Tắt (xoá) dự án.

Xin chúc mừng

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

Bạn đã tìm hiểu cách mở rộng quy mô an toàn cho các tải Confidential Space bằng cách sử dụng Nhóm phiên bản được quản lý (MIG). Bạn đã định cấu hình thành công tính năng Tự phục hồi để khắc phục lỗi, tính năng Tự động mở rộng quy mô để xử lý các đợt tăng đột biến lưu lượng truy cập và thực hiện Bản cập nhật không có thời gian ngừng hoạt động cho cả hình ảnh hệ điều hành Confidential Space và vùng chứa Tải.

Tiếp theo là gì?

Hãy xem các lớp học lập trình khác về Không gian bảo mật:

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