Ngân hàng đề — Google Cloud Associate Cloud Engineer
Tìm thấy 449 câu.
- A Create firewall rules to load balance traffic
- B Create a VPN between the custom model network and other networks in the VPC.
- C Create subnets in all regions
- D Create subnets in regions where you plan to deploy instances
Xem giải thích
Đáp án
D — Tạo SUBNET ở những REGION mà bạn dự định triển khai instance.
Vì sao đúng
Mạng ở chế độ custom mode được tạo ra hoàn toàn TRỐNG — không có subnet nào cả.
⚠ Điểm mấu chốt — hai chế độ mạng của GCP:
AUTO MODE
↓
Tự tạo MỘT subnet ở MỌI Region
với dải IP định sẵn (10.128.0.0/9)
↓
→ tiện cho việc thử nghiệm
→ nhưng không kiểm soát được dải IP
CUSTOM MODE ← đề này
↓
KHÔNG có subnet nào
↓
→ bạn tự tạo subnet ở đúng Region cần
→ tự chọn dải CIDR
↓
→ khuyến nghị cho production
⚠ Và vì sao chỉ tạo ở Region CẦN, không tạo ở MỌI Region:
Tạo subnet ở mọi Region (phương án C)
↓
→ tiêu tốn không gian địa chỉ IP
→ tăng bề mặt cần quản lý và bảo mật
→ nhiều subnet không bao giờ dùng tới
↓
Chỉ tạo ở Region cần
↓
→ quy hoạch IP gọn gàng
→ thêm sau lúc nào cũng được
↓
(Subnet của GCP mở rộng được dải IP,
nhưng KHÔNG thu nhỏ được)
⚠ Nhắc lại một khác biệt lớn so với AWS:
GCP: VPC là TOÀN CẦU, subnet theo REGION
AWS: VPC theo Region, subnet theo AZ
↓
→ ở GCP, MỘT subnet phục vụ được
VM ở MỌI zone trong Region đó
→ không cần tạo subnet cho từng zone
Vì sao các phương án khác sai
-
C (tạo subnet ở TẤT CẢ các Region) — đây là phương án gần nhất và về kỹ thuật thì làm được, nhưng lãng phí không gian IP và tạo ra hàng chục subnet không dùng tới. Thêm subnet khi cần là việc rất nhanh.
-
A (tạo firewall rule để cân bằng tải) — firewall rule không cân bằng tải; và chưa có subnet thì cũng chưa có gì để bảo vệ.
-
B (tạo VPN giữa custom mode network và các mạng khác trong VPC) — các subnet trong CÙNG một VPC đã thông với nhau sẵn, không cần VPN.
Ghi nhớ
⚠ Auto mode ↔ Custom mode — bảng phải thuộc: | | Auto mode | Custom mode | |---|---|---| | Subnet ban đầu | một subnet ở MỌI Region | KHÔNG có subnet nào | | Dải IP | định sẵn 10.128.0.0/9 | bạn tự chọn | | Region mới của Google | tự thêm subnet | không | | Khuyến nghị | thử nghiệm | PRODUCTION | | Chuyển đổi | auto → custom được | custom → auto KHÔNG được |
Từ khoá nhận diện:
"custom mode network vừa tạo" → bước tiếp theo là TẠO SUBNET "kiểm soát dải IP" → custom mode "VPC của GCP" → TOÀN CẦU, subnet theo REGION "subnet hết địa chỉ" → mở rộng được, không thu nhỏ được "nối hai VPC" → peering hoặc Shared VPC
| Tạo subnet — các tham số | Nội dung |
|---|---|
--range |
dải CIDR chính |
--region |
Region của subnet |
--secondary-range |
dải phụ — dùng cho pod và service của GKE |
--enable-private-ip-google-access |
VM không có IP công cộng vẫn gọi được API Google |
--enable-flow-logs |
bật VPC Flow Logs |
| Mở rộng sau | gcloud compute networks subnets expand-ip-range |
| Quy hoạch IP cho VPC | Nguyên tắc |
|---|---|
| Chừa dư chỗ | subnet mở rộng được nhưng không thu nhỏ |
| Không chồng lấn | với mạng tại chỗ và với VPC sẽ peer |
| Dải phụ cho GKE | pod và service cần dải riêng, khá lớn |
| Ghi lại | một sơ đồ IP làm nguồn sự thật duy nhất |
| Chuẩn bị trước | cho VPC peering và Shared VPC về sau |
| Firewall của GCP — nhắc lại | Nội dung |
|---|---|
| Mặc định | chặn mọi ingress, cho phép mọi egress |
| Phạm vi | áp cho cả VPC |
| Nhắm mục tiêu | network tag hoặc service account |
| Ưu tiên | số nhỏ hơn thắng |
| Luật ngầm định | default-allow-internal chỉ có ở mạng default |
| Sau khi tạo subnet — các bước tiếp theo | Việc |
|---|---|
| Firewall rule | mở cổng cần thiết (SSH, HTTP, health check) |
| Cloud NAT | cho VM không có IP công cộng ra internet |
| Private Google Access | gọi API Google không qua internet |
| Cloud Router | cần cho Cloud NAT và cho VPN động |
| Flow logs | bật để có dữ liệu chẩn đoán về sau |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Mạng có subnet nào chưa | gcloud compute networks subnets list --network=<ten> | | Mạng ở chế độ nào | gcloud compute networks describe <ten> → subnetMode | | Dải IP có chồng lấn không | so sánh với sơ đồ IP của tổ chức |
Và một lưu ý phải tính tới ngay khi chọn dải CIDR cho subnet: subnet của GCP mở rộng được nhưng không bao giờ thu nhỏ. Chọn một dải quá hẹp nghĩa là phải tạo subnet mới và di chuyển VM về sau; chọn quá rộng thì chiếm mất không gian địa chỉ mà một VPC khác có thể cần khi peering — nên đây là quyết định đáng dành thời gian ngay từ đầu.
- A gcloud containers autoscale rc my-app-rc --min=2 --max=6 --cpu-percent=80
- B kubectl autoscale rc my-app-rc --min=2 --max=6 --cpu-percent=80
- C gcloud containers apply rc my-app-rc --min=2 --max=6 --cpu-percent=80
- D kubectl apply rc my-app-rc --min=2 --max=6 --cpu-percent=80
Xem giải thích
Đáp án
B — kubectl autoscale rc my-app-rc --min=2 --max=6 --cpu-percent=80
Vì sao đúng
Hai điều cần đúng: công cụ là kubectl, và động từ là autoscale.
⚠ Điểm mấu chốt — kubectl quản bên trong cụm, gcloud quản chính cụm:
gcloud container clusters ...
↓
Tạo, xoá, nâng cấp CỤM; quản node pool
↓
kubectl ...
↓
Pod, deployment, replication controller,
service, HPA — BÊN TRONG cụm
↓
→ co giãn pod là việc bên trong cụm
→ phải dùng kubectl
⚠ kubectl autoscale nhận nhiều loại tài nguyên:
kubectl autoscale rc my-app-rc \
--min=2 --max=6 --cpu-percent=80
↓
Áp được cho:
rc (replication controller)
deployment
replicaset
statefulset
↓
→ tạo ra một HorizontalPodAutoscaler
⚠ Và điều kiện bắt buộc để HPA hoạt động:
HPA tính % CPU SO VỚI `resources.requests.cpu`
↓
Container không khai `requests`
↓
→ không có mẫu số
→ kubectl get hpa hiện <unknown>
→ autoscaler KHÔNG hoạt động
Xem thêm câu #12472 (CÙNG LÔ): gần như cùng một câu hỏi (ở đó là
deployment, ở đây làrc), cùng đáp ánkubectl autoscale. Chỉ khác chữ cái — ở đó là A, ở đây là B. Khoá nhất quán.
Vì sao các phương án khác sai
-
D (
kubectl apply rc ...) — đây là phương án gần nhất vì dùng đúng công cụkubectl, nhưngapplydùng để áp một tệp manifest (kubectl apply -f tep.yaml), không nhận các cờ--min,--max,--cpu-percent. -
A và C (
gcloud containers ...) — sai hai lần: nhóm đúng làgcloud container(số ít), và gcloud không quản HPA.
Ghi nhớ
⚠ gcloud ↔ kubectl — bảng phải thuộc: | Công cụ | Quản gì | |---|---| | gcloud container clusters | tạo, xoá, nâng cấp CỤM; node pool | | kubectl | pod, deployment, rc, service, HPA — TRONG cụm | | Nối hai thứ | gcloud container clusters get-credentials <ten> | | Bẫy | gcloud không tạo được HPA hay deployment |
Từ khoá nhận diện:
"co giãn số POD" →
kubectl autoscale(HPA) "thêm NODE" → Cluster Autoscaler "chỉnh tài nguyên mỗi pod" → VPA "áp một tệp YAML" →kubectl apply -f"tạo cụm" →gcloud container clusters create
| Ba bộ autoscaler của Kubernetes | Việc |
|---|---|
| HPA | số lượng POD |
| VPA | tài nguyên mỗi pod |
| Cluster Autoscaler | số lượng NODE |
| Karpenter (AWS) / Node auto-provisioning (GKE) | tự tạo node pool phù hợp |
| Kết hợp phổ biến | HPA + Cluster Autoscaler |
| HPA — điều kiện | Nội dung |
|---|---|
| Bắt buộc | container khai resources.requests |
| Chỉ số | CPU, bộ nhớ, chỉ số tuỳ chỉnh, chỉ số ngoài |
| Kiểm tra | kubectl get hpa — cột TARGETS |
<unknown> |
thiếu requests hoặc metrics server có vấn đề |
| Chống dao động | stabilization window |
| Replication controller ↔ Deployment | Khác nhau |
|---|---|
| RC | cơ chế CŨ — chỉ giữ đúng số pod |
| Deployment | quản ReplicaSet, có rolling update và rollback |
| Khuyến nghị | luôn dùng Deployment cho ứng dụng không trạng thái |
| RC vẫn xuất hiện | trong đề thi và hệ thống cũ |
| Các lệnh kubectl hay dùng | Việc |
|---|---|
kubectl get pods -o wide |
pod và node của chúng |
kubectl describe pod <ten> |
chẩn đoán pod không chạy |
kubectl logs <pod> |
xem log |
kubectl scale --replicas=N |
co giãn thủ công |
kubectl rollout status / undo |
theo dõi và lùi triển khai |
kubectl top pods |
mức dùng tài nguyên |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | HPA có hoạt động không | kubectl get hpa | | Vì sao không co giãn | kubectl describe hpa <ten> — đọc Events | | Pod dùng bao nhiêu | kubectl top pods |
Và một nguyên nhân chiếm phần lớn các ca "HPA không hoạt động": container quên khai resources.requests.cpu. Cột TARGETS hiện <unknown>, autoscaler không có mẫu số để tính, và số pod nằm im ở mức tối thiểu — một triệu chứng rất dễ bị đổ nhầm cho cấu hình HPA thay vì cho manifest của deployment.
- A roles/bigtable.admin
- B roles/bigtable.reader
- C roles/bigtable.owner
- D roles/bigtable.user
Xem giải thích
Đáp án
B — roles/bigtable.reader
Vì sao đúng
Nhóm này chỉ cần ĐỌC dữ liệu, và thực hành tốt về bảo mật là quyền tối thiểu.
⚠ Điểm mấu chốt — chọn vai trò hẹp nhất đủ dùng:
Nhu cầu: ĐỌC dữ liệu từ Bigtable
↓
roles/bigtable.reader
↓
→ chỉ đọc dữ liệu trong bảng
→ không ghi, không sửa lược đồ,
không quản instance
⚠ Bốn vai trò Bigtable — thang từ hẹp tới rộng:
roles/bigtable.reader → ĐỌC dữ liệu ← đề này
roles/bigtable.user → đọc VÀ GHI dữ liệu
roles/bigtable.admin → quản instance, cluster, bảng
roles/bigtable.owner → toàn quyền, kể cả xoá instance
Xem thêm câu #12469 (CÙNG LÔ): cùng một câu hỏi, cùng đáp án
roles/bigtable.reader, và cũng cùng chữ cái B. Khoá nhất quán.
Vì sao các phương án khác sai
-
D (
roles/bigtable.user) — đây là phương án gần nhất và cũng đọc được, nhưng nó cấp thêm quyền GHI — thừa so với nhu cầu. -
A (
roles/bigtable.admin) — cho quản lý instance, cluster và lược đồ, rộng hơn nhiều. -
C (
roles/bigtable.owner) — rộng nhất, kể cả xoá instance.
Ghi nhớ
⚠ Ba loại vai trò IAM — bảng phải thuộc: | Loại | Đặc điểm | |---|---| | Basic | viewer / editor / owner — quá rộng, tránh dùng | | Predefined | theo dịch vụ, Google bảo trì — NÊN DÙNG | | Custom | tự chọn permission — bạn tự bảo trì | | Nguyên tắc | bắt đầu từ predefined hẹp nhất đủ dùng |
Từ khoá nhận diện:
"chỉ cần đọc" →
readerhoặcviewer"đọc và ghi" →user(với Bigtable) "quản lý tài nguyên" →admin"thực hành tốt về bảo mật" → quyền tối thiểu "predefined vẫn quá rộng" → custom role
| Mẫu đặt tên vai trò của GCP | Nội dung |
|---|---|
roles/<dichvu>.viewer |
xem cấu hình, siêu dữ liệu |
roles/<dichvu>.reader |
đọc DỮ LIỆU |
roles/<dichvu>.user |
dùng dịch vụ, thường có ghi |
roles/<dichvu>.admin |
quản lý tài nguyên |
| Lưu ý | viewer và reader không giống nhau ở mọi dịch vụ |
| Gán vai trò ở cấp nào | Nội dung |
|---|---|
| Organization | áp cho mọi folder và project |
| Folder | mọi project bên dưới |
| Project | phổ biến nhất |
| Tài nguyên | hẹp nhất — một bảng, một bucket |
| Nguyên tắc | kế thừa từ trên xuống, gán ở mức HẸP NHẤT |
| Công cụ kiểm soát quyền của GCP | Việc |
|---|---|
| IAM Recommender | gợi ý thu hẹp vai trò dựa trên 90 ngày dùng thật |
| Policy Analyzer | ai có quyền gì trên tài nguyên nào |
| IAM Deny policy | từ chối tường minh, thắng mọi Allow |
| Organization Policy | ràng buộc cấu hình |
| VPC Service Controls | vành đai chống rò rỉ dữ liệu |
| Bigtable — vài điểm nên nhớ | Nội dung |
|---|---|
| Loại | NoSQL cột rộng, độ trễ thấp, thông lượng cao |
| Phù hợp | chuỗi thời gian, IoT, tài chính, cá nhân hoá |
| Chỉ mục | chỉ có ROW KEY |
| Không có | giao dịch nhiều dòng, chỉ mục phụ, SQL đầy đủ |
| So sánh | Spanner khi cần SQL và giao dịch |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Ai có quyền gì | gcloud projects get-iam-policy <project> | | Vai trò gồm permission nào | gcloud iam roles describe roles/bigtable.reader | | Có quyền nào thừa không | IAM Recommender |
Và một công cụ đáng dùng định kỳ: IAM Recommender. Nó phân tích 90 ngày sử dụng thật rồi gợi ý thay vai trò rộng bằng vai trò hẹp hơn — cách nhanh nhất để siết quyền mà không phải đoán ai còn cần gì.
- A gcloud deployment apply my-app.yaml
- B kubectl apply -f my-app.yaml
- C gcloud containers deployment apply my-app.yaml
- D kubectl deployment apply my-app.yaml
Xem giải thích
Đáp án
B — kubectl apply -f my-app.yaml
Vì sao đúng
Triển khai một manifest lên cụm Kubernetes là việc bên trong cụm, nên dùng kubectl, và cờ để chỉ tệp là -f.
⚠ Điểm mấu chốt — cú pháp đầy đủ:
kubectl apply -f my-app.yaml
↓
apply → tạo mới nếu chưa có,
CẬP NHẬT nếu đã có
↓
-f → chỉ định tệp (file)
↓
Thiếu -f → kubectl coi "my-app.yaml"
là TÊN TÀI NGUYÊN, không phải tệp
⚠ apply khác create ở điểm quan trọng:
kubectl create -f tep.yaml
↓
Chỉ TẠO MỚI
→ tài nguyên đã tồn tại → LỖI
kubectl apply -f tep.yaml
↓
Tạo mới HOẶC cập nhật
→ khai báo (declarative)
→ chạy lại nhiều lần được
↓
→ đây là cách nên dùng trong CI/CD
⚠ Vài dạng khác của -f rất hữu ích:
kubectl apply -f thu-muc/ → cả thư mục
kubectl apply -f https://... → từ URL
kubectl apply -k thu-muc/ → Kustomize
kubectl apply -f - <<EOF ... EOF → từ stdin
↓
kubectl diff -f tep.yaml
↓
→ XEM TRƯỚC thay đổi mà không áp
→ rất nên dùng trước khi apply lên production
Vì sao các phương án khác sai
-
D (
kubectl deployment apply my-app.yaml) — đây là phương án gần nhất vì dùng đúng công cụ, nhưng sai cấu trúc:kubectllàkubectl <động từ> <loại tài nguyên>, không phải ngược lại. Và vẫn thiếu cờ-f. -
A (
gcloud deployment apply ...) —gcloudkhông triển khai manifest Kubernetes. (Cógcloud deployment-managernhưng đó là công cụ hạ tầng dạng mã của GCP, khác hẳn.) -
C (
gcloud containers deployment apply ...) — sai nhóm lệnh (containersố ít), sai công cụ, và sai cấu trúc.
Ghi nhớ
⚠ Cấu trúc lệnh kubectl — bảng phải thuộc: | Cấu trúc | Ví dụ | |---|---| | kubectl <động từ> <loại> <tên> | kubectl get pod my-pod | | kubectl <động từ> -f <tệp> | kubectl apply -f app.yaml | | Động từ hay dùng | get, describe, apply, delete, logs, exec, scale, rollout | | Loại tài nguyên | pod, deployment, service, configmap, secret, ingress, hpa | | Viết tắt | po, deploy, svc, cm, ns |
Từ khoá nhận diện:
"triển khai manifest" →
kubectl apply -f"xem trước thay đổi" →kubectl diff -f"tạo cụm" →gcloud container clusters create"kết nối kubectl với cụm" →gcloud container clusters get-credentials"gcloud triển khai YAML" → luôn SAI
apply ↔ create ↔ replace |
Khác nhau |
|---|---|
apply |
tạo mới hoặc cập nhật — KHAI BÁO, chạy lại được |
create |
chỉ tạo mới — đã tồn tại thì lỗi |
replace |
thay thế hoàn toàn — mất các trường không khai |
patch |
sửa một phần |
| Khuyến nghị | apply cho mọi thứ trong CI/CD |
| Quy trình triển khai an toàn lên GKE | Bước |
|---|---|
| 1 | gcloud container clusters get-credentials <ten> |
| 2 | kubectl config current-context — xác nhận đúng cụm |
| 3 | kubectl diff -f app.yaml — xem trước thay đổi |
| 4 | kubectl apply -f app.yaml |
| 5 | kubectl rollout status deployment/<ten> |
| 6 | Có vấn đề → kubectl rollout undo deployment/<ten> |
| Quản lý manifest cho nhiều môi trường | Công cụ |
|---|---|
| Kustomize | có sẵn trong kubectl (-k) — overlay theo môi trường |
| Helm | chart có tham số, quản lý phiên bản |
| Config Connector | quản tài nguyên GCP bằng manifest Kubernetes |
| Config Sync / Anthos Config Management | GitOps — đồng bộ cụm với repo Git |
| Nguyên tắc | đừng sửa tài nguyên bằng tay trên cụm production |
| Chẩn đoán sau khi apply | Lệnh |
|---|---|
kubectl get pods |
pod có chạy không |
kubectl describe pod <ten> |
vì sao Pending hoặc CrashLoop |
kubectl logs <pod> --previous |
log của lần chạy TRƯỚC khi crash |
kubectl get events --sort-by=.metadata.creationTimestamp |
dòng thời gian sự kiện |
kubectl rollout history deployment/<ten> |
lịch sử triển khai |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đang trỏ vào cụm nào | kubectl config current-context | | Triển khai xong chưa | kubectl rollout status deployment/<ten> | | Có gì thay đổi | kubectl diff -f app.yaml trước khi apply |
Và một thói quen nên có trước mọi lần apply lên production: chạy kubectl config current-context để xác nhận đang trỏ đúng cụm. Phần lớn các sự cố triển khai nhầm môi trường bắt nguồn từ việc context còn sót lại từ một phiên làm việc trước — và một lệnh mất một giây sẽ tránh được điều đó.
- A The target pool is not sending logs to Cloud Logging.
- B The target pool is missing a health check.
- C The target pool nodes are configured with different memory specifications
- D The target pool is not sending metrics to Cloud Monitoring.
Xem giải thích
Đáp án
B — Target pool THIẾU HEALTH CHECK.
Vì sao đúng
Target pool bắt buộc phải có health check thì load balancer mới biết gửi lưu lượng tới instance nào.
⚠ Điểm mấu chốt:
Target pool
↓
Danh sách instance nhận lưu lượng
↓
Health check quyết định instance nào KHOẺ
↓
Không có health check
↓
→ load balancer không xác định được
trạng thái backend
→ hoạt động không như mong đợi
⚠ Và instance ở hai zone KHÔNG phải lỗi:
Target pool có phạm vi THEO REGION
↓
→ chứa instance ở NHIỀU ZONE
trong CÙNG Region là bình thường
↓
→ chi tiết "hai zone" trong đề
là để đánh lạc hướng
⚠ Nguyên nhân số hai — firewall chặn probe:
Health check probe đến từ hai dải:
130.211.0.0/22
35.191.0.0/16
↓
Firewall phải cho phép ingress từ hai dải này
↓
→ thiếu luật này là MỌI backend
bị đánh dấu UNHEALTHY
Xem thêm câu #12485 (CÙNG LÔ): cùng một câu hỏi, cùng đáp án thiếu health check. Chỉ khác chữ cái — ở đó là A, ở đây là B. Khoá nhất quán.
Vì sao các phương án khác sai
-
A (không gửi log sang Cloud Logging) — đây là phương án gần nhất về hình thức, nhưng log chỉ để chẩn đoán, không ảnh hưởng tới chức năng định tuyến.
-
D (không gửi chỉ số sang Cloud Monitoring) — cùng lý do: chỉ số để quan sát, không quyết định định tuyến.
-
C (các node có cấu hình bộ nhớ khác nhau) — target pool không đòi instance phải giống nhau về phần cứng.
Ghi nhớ
⚠ Health check của Google Cloud — bảng phải thuộc: | Nội dung | Chi tiết | |---|---| | Dải IP của probe | 130.211.0.0/22 và 35.191.0.0/16 | | Firewall | PHẢI cho phép ingress từ hai dải đó | | Loại | HTTP, HTTPS, HTTP/2, TCP, SSL, gRPC | | Tham số | check-interval, timeout, healthy-threshold, unhealthy-threshold | | Dùng cho | load balancer và autohealing của MIG | | Legacy | chỉ target pool dùng legacy HTTP health check |
Từ khoá nhận diện:
"target pool không hoạt động" → thiếu health check "mọi backend unhealthy" → firewall chưa mở dải probe "tự tạo lại VM hỏng" → autohealing của MIG "định tuyến theo URL" → backend service, không phải target pool "giữ IP nguồn client" → passthrough Network LB
| Target pool ↔ Backend service | Khác nhau |
|---|---|
| Target pool | kiểu CŨ, chỉ cho external passthrough Network LB |
| Backend service | kiểu MỚI — cho mọi loại load balancer |
| Tính năng | backend service có CDN, Cloud Armor, session affinity |
| Health check | target pool dùng legacy |
| Khuyến nghị | dùng backend service cho triển khai mới |
| Chẩn đoán load balancer không hoạt động | Bước |
|---|---|
| 1 | Có health check chưa, backend có PASS không |
| 2 | Firewall cho phép 130.211.0.0/22, 35.191.0.0/16 chưa |
| 3 | Ứng dụng có nghe đúng cổng health check không |
| 4 | Đường dẫn health check trả 200 không |
| 5 | Instance có trong pool không |
| 6 | Cloud Logging của load balancer |
| Autohealing cũng dùng health check | Nội dung |
|---|---|
| Khác biệt | autohealing làm VM BỊ TẠO LẠI, LB chỉ ngừng gửi lưu lượng |
initialDelaySec |
phải đủ dài cho ứng dụng khởi động |
| Bẫy | đặt quá ngắn → VM bị tạo lại vô hạn |
| Khuyến nghị | dùng health check riêng, dễ dãi hơn cho autohealing |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Backend khoẻ không | gcloud compute target-pools get-health <ten> --region=<region> | | Firewall đã mở chưa | gcloud compute firewall-rules list --filter="sourceRanges:130.211.0.0/22" | | Ứng dụng trả 200 không | curl tới đường dẫn health check từ trong VPC |
Và một nguyên nhân chiếm phần lớn các ca "mọi backend unhealthy" trên Google Cloud: firewall chưa mở cho hai dải IP của probe. Ứng dụng chạy bình thường, curl từ máy khác trong VPC vẫn trả 200, nhưng probe của Google không tới được — và triệu chứng nhìn từ console giống hệt như ứng dụng đang chết.
- A Create a shared VPC
- B Create a VPN between projects
- C Create firewall rules to load balance traffic between each project's subnets.
- D Create routes between subnets of each project
Xem giải thích
Đáp án
A — Tạo SHARED VPC.
Vì sao đúng
Nhiều project trong cùng một tổ chức muốn dùng chung một mạng — đó chính là bài toán Shared VPC giải.
⚠ Điểm mấu chốt — tách quản trị mạng khỏi tải công việc:
HOST PROJECT
↓
Chứa VPC, subnet, firewall rule,
Cloud Router, Cloud NAT
→ đội hạ tầng quản lý
↓
SERVICE PROJECT (nhiều cái)
↓
Chứa VM, GKE, Cloud SQL của từng tầng
→ từng đội phát triển quản lý
↓
Tài nguyên trong service project
DÙNG TRỰC TIẾP subnet của host project
↓
→ cùng dải IP riêng, giao tiếp nội bộ
→ KHÔNG cần peering
→ chi phí và quyền vẫn tách theo project
⚠ Hai vai trò IAM cần nhớ:
roles/compute.xpnAdmin
↓
Gắn ở cấp TỔ CHỨC hoặc FOLDER
→ chỉ định host project, gắn service project
roles/compute.networkUser
↓
Gắn cho người dùng của SERVICE PROJECT
→ cho phép họ tạo tài nguyên trong subnet
của host project
→ cấp được ở mức TỪNG SUBNET
Xem thêm câu #12467 (CÙNG LÔ): cùng một câu hỏi, cùng đáp án Shared VPC. Chỉ khác chữ cái — ở đó là B, ở đây là A. Và #12470 (cùng lô): nhiều TỔ CHỨC thì khoá là VPC Peering — khoá khác nhau vì phạm vi khác nhau, không mâu thuẫn.
Vì sao các phương án khác sai
-
D (tạo route giữa các subnet của từng project) — đây là phương án gần nhất về ý tưởng, nhưng mỗi project có VPC riêng biệt; không có route nào nối thẳng hai VPC mà không qua peering hoặc VPN. Và vẫn không phải "một VPC chung".
-
B (tạo VPN giữa các project) — chạy được nhưng rất thừa: thêm chi phí gateway, thêm độ trễ, cho các project trong cùng một tổ chức.
-
C (tạo firewall rule để cân bằng tải giữa subnet các project) — firewall không cân bằng tải và không tạo đường đi.
Ghi nhớ
⚠ Ba cách nối mạng của Google Cloud — bảng phải thuộc: | Cách | Dùng khi | |---|---| | Shared VPC | nhiều project CÙNG tổ chức dùng CHUNG một VPC | | VPC Peering | nối hai VPC riêng biệt — kể cả khác tổ chức | | Cloud VPN / Interconnect | nối với mạng TẠI CHỖ | | Network Connectivity Center | trung tâm nối nhiều mạng | | Private Service Connect | gọi dịch vụ bên khác qua IP riêng |
Từ khoá nhận diện:
"nhiều project, một mạng chung, CÙNG tổ chức" → Shared VPC "nhiều TỔ CHỨC" → VPC Peering "nối với trung tâm dữ liệu" → Cloud VPN hoặc Interconnect "quản mạng tập trung" → Shared VPC "nhiều VPC nối chằng chịt" → Network Connectivity Center
| Shared VPC — điều kiện và giới hạn | Nội dung |
|---|---|
| Phạm vi | CHỈ trong MỘT tổ chức |
| Host project | một project được chỉ định |
| Service project | một project chỉ gắn vào MỘT host |
| Ai quản gì | host: mạng và firewall; service: VM và ứng dụng |
| Vai trò | compute.xpnAdmin, compute.networkUser |
| Hạn ngạch | subnet và IP tính vào host project |
| Shared VPC ↔ Peering | Khác nhau |
|---|---|
| Số VPC | MỘT ↔ HAI trở lên |
| Tổ chức | một ↔ nhiều cũng được |
| Quản trị | tập trung ở host ↔ mỗi bên tự quản |
| Firewall | một bộ ↔ mỗi VPC một bộ |
| Bắc cầu | — ↔ peering KHÔNG bắc cầu |
| CIDR chồng lấn | — ↔ peering KHÔNG cho phép |
| Thiết kế Shared VPC điển hình | Nội dung |
|---|---|
| Host project | đội nền tảng — VPC, subnet, firewall, Cloud NAT |
| Service project theo môi trường | prod, staging, dev |
| Service project theo tầng | web, app, data |
| Phân quyền | networkUser ở mức TỪNG SUBNET cho từng đội |
| Lợi ích | một nơi kiểm soát mạng, nhiều nơi triển khai độc lập |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Project có phải host không | gcloud compute shared-vpc get-host-project <project> | | Service project nào đang gắn | gcloud compute shared-vpc list-associated-resources <host> | | Ai được dùng subnet | gcloud compute networks subnets get-iam-policy <subnet> |
Và một cách phân quyền nên áp dụng ngay từ đầu: cấp compute.networkUser ở mức TỪNG SUBNET, không phải cả host project. Khi đó mỗi đội chỉ dựng được máy trong đúng subnet của họ, và bạn giữ được ranh giới mạng rõ ràng mà không cần nhiều VPC.
- A Snapshot
- B Persistent Disk
- C Instance template
- D Load balancer
Xem giải thích
Đáp án
C — INSTANCE TEMPLATE (mẫu instance).
Vì sao đúng
Managed Instance Group bắt buộc dựa trên một instance template — bản thiết kế để tạo ra mọi VM giống hệt nhau.
⚠ Điểm mấu chốt — template là điều kiện tiên quyết:
Instance template
↓
Khai sẵn: loại máy, image, đĩa, mạng,
network tag, service account, startup script
↓
→ BẤT BIẾN, không sửa được sau khi tạo
↓
MIG dùng template đó
↓
→ mọi VM sinh ra GIỐNG HỆT NHAU
→ autoscaler thêm máy = tạo từ template
↓
Không có template → không tạo được MIG
⚠ Autoscaler của MIG:
Gắn autoscaling policy vào MIG
↓
Chỉ số: CPU utilization,
HTTP LB utilization,
Cloud Monitoring metric,
số message Pub/Sub
↓
Khai min, max, coolDownPeriod
↓
→ MIG tự thêm bớt VM
Xem thêm câu #12484 (CÙNG LÔ): cùng một câu hỏi, cùng đáp án instance template. Chỉ khác chữ cái — ở đó là A, ở đây là C. Khoá nhất quán.
Vì sao các phương án khác sai
-
D (Load balancer) — đây là phương án gần nhất vì load balancer thường đi kèm MIG, nhưng nó phân phối lưu lượng, không phải thứ MIG dựa vào để tạo máy. MIG hoạt động được cả khi không có load balancer.
-
A (Snapshot) — bản sao lưu của một đĩa, dùng để khôi phục hoặc tạo image, không phải bản thiết kế của MIG.
-
B (Persistent Disk) — một đĩa lưu trữ, là thành phần của VM.
Ghi nhớ
⚠ Các thành phần của MIG — bảng phải thuộc: | Thành phần | Việc | |---|---| | Instance template | BẢN THIẾT KẾ — bắt buộc, BẤT BIẾN | | Managed Instance Group | quản một nhóm VM giống hệt nhau | | Autoscaling policy | thêm bớt VM theo chỉ số | | Health check | autohealing và cho load balancer | | Update policy | rolling update, canary | | Regional MIG | trải nhiều zone |
Từ khoá nhận diện:
"tự thêm VM khi tải cao" → MIG + autoscaling policy "tự thay VM hỏng" → autohealing với health check "cập nhật không gián đoạn" → rolling update "chịu được mất một zone" → regional MIG "VM khác nhau, không co giãn" → unmanaged instance group
| Managed ↔ Unmanaged instance group | Khác nhau |
|---|---|
| Managed | mọi VM giống hệt, tạo từ template |
| Managed | có autoscaling, autohealing, rolling update |
| Unmanaged | VM khác nhau, bạn tự thêm |
| Unmanaged | KHÔNG co giãn, KHÔNG tự chữa |
| Dùng unmanaged khi | hệ thống cũ, máy không đồng nhất |
| Chỉ số co giãn của MIG | Nội dung |
|---|---|
| CPU utilization | phổ biến nhất |
| HTTP LB utilization | theo mức dùng của backend service |
| Cloud Monitoring metric | chỉ số tuỳ chỉnh |
| Pub/Sub queue | số message chờ — rất hợp cho worker |
| Nhiều chỉ số | MIG dùng chỉ số cho ra số VM LỚN NHẤT |
coolDownPeriod |
chờ máy khởi động xong mới tính chỉ số |
| Rolling update của MIG | Tham số |
|---|---|
--max-surge |
số VM tạo thêm trong lúc cập nhật |
--max-unavailable |
số VM được phép ngừng cùng lúc |
| Canary | --canary-version — thử template mới trên một phần |
| Lùi lại | đổi lại template cũ rồi update tiếp |
| Instance template | BẤT BIẾN — phải tạo template MỚI |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | MIG dùng template nào | gcloud compute instance-groups managed describe <ten> | | Autoscaler có hoạt động không | cùng lệnh, xem trường autoscaler | | VM có bị tạo lại liên tục không | Cloud Logging, tìm sự kiện autohealing |
Và một cấu hình cần đặt cẩn thận khi bật autohealing: initialDelaySec của health check. Nếu ngắn hơn thời gian ứng dụng khởi động, MIG sẽ liên tục đánh dấu VM là hỏng rồi tạo lại — một vòng lặp mà nhìn từ bên ngoài giống hệt một sự cố hạ tầng.
- A Hardened VM
- B Shielded VM
- C Preemptible VM
- D GPU-enabled VM
Xem giải thích
Đáp án
B — SHIELDED VM.
Vì sao đúng
Đề nói rõ mối lo: rootkit và mã độc ở TẦNG NHÂN (kernel). Shielded VM là tính năng của Google Cloud sinh ra đúng cho việc đó.
⚠ Điểm mấu chốt — ba lớp bảo vệ của Shielded VM:
SECURE BOOT
↓
Chỉ cho khởi động phần mềm ĐÃ KÝ
và có chữ ký hợp lệ
↓
→ chặn bootkit và driver nhân không được ký
vTPM (virtual Trusted Platform Module)
↓
Module bảo mật ảo, đo lường trạng thái khởi động
Lưu khoá và bí mật ở nơi cách ly
↓
→ nền tảng cho measured boot
INTEGRITY MONITORING
↓
So SÁNH phép đo khởi động hiện tại
với BASELINE đã biết là tốt
↓
→ thay đổi bất thường ở nhân
→ sinh cảnh báo trong Cloud Monitoring
→ đây chính là cách phát hiện rootkit
⚠ Bật thế nào và điều kiện:
Cần một SHIELDED IMAGE
↓
Hầu hết image công khai của Google
đã hỗ trợ (có hậu tố hoặc gắn nhãn UEFI)
↓
Bật khi tạo VM, hoặc trong instance template:
--shielded-secure-boot
--shielded-vtpm
--shielded-integrity-monitoring
↓
Ép toàn tổ chức:
Organization Policy
constraints/compute.requireShieldedVm
⚠ Phân biệt với Confidential VM:
SHIELDED VM
↓
Bảo vệ TÍNH TOÀN VẸN của quá trình khởi động
→ chống rootkit, bootkit
CONFIDENTIAL VM
↓
MÃ HOÁ BỘ NHỚ khi đang dùng
→ dữ liệu trong RAM cũng được mã hoá
→ chống cả người vận hành hạ tầng
↓
→ hai mục tiêu khác nhau, dùng chung được
Vì sao các phương án khác sai
-
A ("Hardened VM") — đây là phương án gần nhất vì tên nghe rất hợp lý, nhưng Google Cloud không có loại VM nào tên là "Hardened VM". Đây là phương án bịa.
-
C (Preemptible VM) — VM giá rẻ có thể bị thu hồi bất cứ lúc nào, là một mô hình chi phí, không liên quan tới bảo mật.
-
D (GPU-enabled VM) — VM có card đồ hoạ, phục vụ tính toán song song, không liên quan tới bảo vệ nhân.
Ghi nhớ
⚠ Các tính năng bảo mật VM của Google Cloud — bảng phải thuộc: | Tính năng | Bảo vệ gì | |---|---| | Shielded VM | TOÀN VẸN khởi động — chống rootkit, bootkit | | Confidential VM | MÃ HOÁ BỘ NHỚ khi đang dùng | | OS Login | quản lý người dùng SSH bằng IAM | | CMEK | mã hoá đĩa bằng khoá của bạn | | Private IP + Cloud NAT | không lộ VM ra internet | | Binary Authorization | (với GKE) chỉ chạy image đã ký |
Từ khoá nhận diện:
"rootkit, mã độc tầng nhân, toàn vẹn khởi động" → Shielded VM "dữ liệu trong BỘ NHỚ phải được mã hoá" → Confidential VM "VM giá rẻ, chịu được bị thu hồi" → Spot / Preemptible VM "quản lý khoá SSH tập trung" → OS Login "ép mọi VM phải là Shielded" → Organization Policy
compute.requireShieldedVm
| Ba thành phần của Shielded VM | Việc |
|---|---|
| Secure Boot | chỉ khởi động phần mềm đã ký |
| vTPM | module bảo mật ảo, đo lường khởi động, lưu khoá |
| Integrity Monitoring | so với baseline, cảnh báo khi lệch |
| Bật riêng lẻ | ba tính năng bật độc lập được |
| Điều kiện | image hỗ trợ UEFI |
| Xử lý cảnh báo integrity monitoring | Bước |
|---|---|
| 1 | Cảnh báo xuất hiện trong Cloud Monitoring và audit log |
| 2 | Xác định thay đổi có CHỦ ĐÍCH không (nâng cấp nhân, cài driver) |
| 3 | Có chủ đích → cập nhật baseline (update-shielded-vm-integrity-policy) |
| 4 | Không rõ nguồn gốc → cô lập VM, điều tra |
| 5 | Nghi bị xâm nhập → dựng VM mới từ image sạch, không dọn máy cũ |
| Bảo mật Compute Engine nhiều lớp | Lớp |
|---|---|
| Shielded VM | toàn vẹn khởi động |
| OS Login + IAP | truy cập có kiểm soát, không mở cổng 22 |
| Không có IP công cộng | Cloud NAT cho chiều ra |
| Service account riêng, quyền tối thiểu | không dùng tài khoản mặc định |
| CMEK | mã hoá đĩa bằng khoá của bạn |
| OS Config / patch management | vá lỗi định kỳ |
| VPC Service Controls | vành đai chống rò rỉ dữ liệu |
| Organization Policy nên bật cho VM | Constraint |
|---|---|
compute.requireShieldedVm |
ép mọi VM là Shielded |
compute.vmExternalIpAccess |
cấm IP công cộng |
compute.requireOsLogin |
ép dùng OS Login |
compute.disableSerialPortAccess |
chặn truy cập cổng nối tiếp |
compute.disableNestedVirtualization |
chặn ảo hoá lồng nhau |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | VM có phải Shielded không | gcloud compute instances describe <ten> → shieldedInstanceConfig | | Có cảnh báo toàn vẹn nào không | Cloud Logging, lọc integrity monitoring | | Image có hỗ trợ không | gcloud compute images list --filter="guestOsFeatures:UEFI_COMPATIBLE" |
Và một cấu hình rất đáng bật ngay ở cấp tổ chức: constraints/compute.requireShieldedVm. Nó biến việc bật Shielded VM từ một lựa chọn mà mỗi người có thể quên, thành một yêu cầu bắt buộc với mọi máy được tạo ra từ đó về sau — kể cả những máy do tự động hoá dựng lên lúc nửa đêm.
- A Use the Pricing Calculator
- B Use the --estimate-cost option with the bq command
- C Use the --dry-run option with a bq query command
- D Use the --estimate-cost with the gcloud command
Xem giải thích
Đáp án
C — Dùng tuỳ chọn --dry-run với lệnh bq query.
Vì sao đúng
BigQuery tính tiền theo lượng dữ liệu QUÉT, và --dry-run cho biết con số đó mà không chạy truy vấn.
⚠ Điểm mấu chốt:
bq query --dry-run --use_legacy_sql=false \
'SELECT ... FROM ...'
↓
BigQuery PHÂN TÍCH truy vấn
↓
Trả về số BYTE sẽ được quét
↓
→ KHÔNG chạy, KHÔNG tính tiền
→ so sánh được nhiều cách viết truy vấn
⚠ Và những cách giảm dữ liệu quét:
1. ĐỪNG DÙNG SELECT *
↓
BigQuery lưu theo CỘT
→ chỉ quét cột được nêu tên
2. PHÂN VÙNG theo ngày
↓
WHERE ngay BETWEEN ... → chỉ quét phân vùng đó
3. PHÂN CỤM theo cột hay lọc
↓
→ bỏ qua khối dữ liệu không khớp
4. LIMIT KHÔNG giảm chi phí
↓
→ vẫn quét toàn bộ rồi mới cắt
Xem thêm câu #12466 (CÙNG LÔ): cùng một câu hỏi, cùng đáp án
--dry-run. Chỉ khác chữ cái — ở đó là A, ở đây là C. Khoá nhất quán.
Vì sao các phương án khác sai
-
B (
--estimate-costvới lệnhbq) — đây là phương án gần nhất và nghe rất hợp lý, nhưng cờ này không tồn tại. Cờ đúng là--dry-run. -
D (
--estimate-costvớigcloud) — sai cả cờ lẫn công cụ: BigQuery dùngbq. -
A (Pricing Calculator) — ước tính chi phí hạ tầng ở mức tổng quát dựa trên con số bạn tự nhập, không phân tích một truy vấn cụ thể.
Ghi nhớ
⚠ Hai mô hình tính giá BigQuery — bảng phải thuộc: | Mô hình | Cách tính | |---|---| | On-demand | theo TB dữ liệu QUÉT — có mức miễn phí mỗi tháng | | Capacity (slot) | mua slot — chi phí cố định, đoán trước được | | Lưu trữ | active và long-term (không sửa 90 ngày → rẻ hơn) | | Chọn capacity khi | khối lượng truy vấn lớn và ổn định |
Từ khoá nhận diện:
"biết chi phí trước khi chạy" →
bq query --dry-run"giảm chi phí truy vấn" → partition, cluster, bỏSELECT *"chi phí ổn định" → capacity pricing "giới hạn chi tiêu" → custom quota,--maximum_bytes_billed"truy vấn lặp lại" → kết quả được cache 24 giờ, MIỄN PHÍ
| Tối ưu truy vấn BigQuery — theo hiệu quả | Cách |
|---|---|
Bỏ SELECT * |
hiệu quả nhất và dễ nhất |
| Bảng có PARTITION | lọc theo cột phân vùng trong WHERE |
| Bảng có CLUSTER | lọc theo cột phân cụm |
LIMIT KHÔNG giảm chi phí |
vẫn quét toàn bộ |
| Preview bảng | xem dữ liệu MIỄN PHÍ, đừng SELECT * LIMIT 10 |
| Materialized view | cho truy vấn tổng hợp lặp lại |
| Kiểm soát chi phí BigQuery | Cách |
|---|---|
--maximum_bytes_billed |
truy vấn vượt ngưỡng thì THẤT BẠI thay vì tốn tiền |
| Custom quota | trần dữ liệu quét mỗi ngày |
| Budget alert | qua Cloud Billing |
| Cache kết quả | truy vấn giống hệt trong 24 giờ miễn phí |
| Bảng tạm | CREATE TABLE AS SELECT cho kết quả trung gian |
| Partition ↔ Cluster | Nội dung |
|---|---|
| Partition | chia bảng theo NGÀY, số nguyên, hoặc thời điểm nạp |
| Cluster | sắp xếp trong phân vùng theo tối đa 4 cột |
| Partition giảm | lượng quét — thấy rõ trong dry run |
| Cluster giảm | lượng quét, dry run không phản ánh hết |
| Mẫu phổ biến | partition theo ngày + cluster theo cột lọc |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Truy vấn quét bao nhiêu | bq query --dry-run | | Bảng có partition không | bq show <dataset>.<bang> | | Ai tốn nhiều nhất | INFORMATION_SCHEMA.JOBS |
Và một cờ rất đáng đưa vào mọi script chạy truy vấn tự động: --maximum_bytes_billed. Nó biến một truy vấn viết sai — chẳng hạn quên lọc theo phân vùng — thành một lỗi rõ ràng ngay lập tức, thay vì một hoá đơn quét vài trăm terabyte chỉ phát hiện vào cuối tháng.
- A Enable Cloud Trace of each firewall rule
- B Enable firewall rule logging for each of the firewall rules
- C Enable Cloud Monitoring of each firewall rule
- D Use Cloud Debugger to debug the firewall rules
Xem giải thích
Đáp án
B — Bật FIREWALL RULE LOGGING cho từng luật firewall.
Vì sao đúng
Đây là tính năng của Google Cloud sinh ra chính xác cho việc chẩn đoán "luật nào đang chặn hay cho phép lưu lượng nào".
⚠ Điểm mấu chốt — mỗi bản ghi cho biết luật nào đã quyết định:
Bật firewall rule logging trên một luật
↓
Mỗi kết nối KHỚP luật đó sinh một bản ghi
↓
Bản ghi chứa:
- luật nào đã khớp (rule reference)
- ALLOWED hay DENIED
- IP nguồn và đích, cổng, giao thức
- hướng (INGRESS / EGRESS)
- instance liên quan
↓
→ biết CHÍNH XÁC luật nào chặn lưu lượng ra
⚠ Và mẹo chẩn đoán quan trọng:
Lưu lượng ra bị chặn mà KHÔNG có bản ghi nào
↓
→ không luật nào khớp
→ rơi vào luật NGẦM ĐỊNH
↓
Google Cloud có hai luật ngầm định
KHÔNG hiện trong danh sách:
- implied allow egress (ưu tiên 65535)
- implied deny ingress (ưu tiên 65535)
↓
→ nếu bạn đã tạo một luật DENY EGRESS
với ưu tiên thấp hơn, nó sẽ thắng
⚠ Thứ tự xét luật của GCP:
Mọi luật được xét theo ƯU TIÊN
↓
Số NHỎ HƠN = ưu tiên CAO HƠN
Khoảng 0 - 65535, mặc định 1000
↓
Luật khớp có ưu tiên cao nhất THẮNG
↓
Cùng ưu tiên mà một DENY một ALLOW
↓
→ DENY THẮNG
Vì sao các phương án khác sai
-
C (bật Cloud Monitoring cho từng luật firewall) — đây là phương án gần nhất về ý tưởng quan sát, nhưng Cloud Monitoring thu thập CHỈ SỐ, không ghi lại từng kết nối và luật nào đã khớp. Nó cho biết có bao nhiêu, không cho biết cái nào.
-
A (bật Cloud Trace cho từng luật) — Cloud Trace theo dõi độ trễ của request trong ứng dụng phân tán, không liên quan tới firewall.
-
D (dùng Cloud Debugger) — công cụ gỡ lỗi MÃ NGUỒN đang chạy, không dùng cho cấu hình mạng. (Và Cloud Debugger đã ngừng hoạt động.)
Ghi nhớ
⚠ Firewall của Google Cloud — bảng phải thuộc: | Đặc điểm | Nội dung | |---|---| | Mặc định | chặn mọi ingress, cho phép mọi egress | | Phạm vi | áp cho cả VPC | | Nhắm mục tiêu | network tag, service account, hoặc mọi instance | | Ưu tiên | 0-65535, số NHỎ HƠN thắng (mặc định 1000) | | Cùng ưu tiên | DENY thắng ALLOW | | Có trạng thái | CÓ — luật ngược chiều tự động cho gói trả lời | | Hai luật ngầm định | implied allow egress, implied deny ingress |
Từ khoá nhận diện:
"luật nào đang chặn lưu lượng" → firewall rule logging "kết nối bị chặn ở đâu trong VPC" → VPC Flow Logs + firewall logging "đường đi có thông không" → Network Intelligence Center → Connectivity Tests "độ trễ trong ứng dụng" → Cloud Trace "chỉ số tổng hợp" → Cloud Monitoring
| Firewall rule logging — chi tiết | Nội dung |
|---|---|
| Bật ở đâu | trên TỪNG luật — --enable-logging |
| Đích | Cloud Logging |
| Nội dung | rule_details, disposition (ALLOWED/DENIED), connection |
| Chi phí | tính theo lượng log nạp vào Cloud Logging |
| Khuyến nghị | bật tạm để chẩn đoán, rồi tắt bớt |
| Lọc bớt | --logging-metadata=exclude-all-metadata để giảm kích thước |
| Bộ công cụ chẩn đoán mạng của GCP | Việc |
|---|---|
| Firewall rule logging | luật nào khớp, cho phép hay chặn |
| VPC Flow Logs | luồng mạng: IP, cổng, byte |
| Connectivity Tests | phân tích đường đi mà KHÔNG gửi gói tin |
| Network Topology | sơ đồ trực quan lưu lượng |
| Packet Mirroring | sao chép gói tin để phân tích sâu |
| Firewall Insights | phát hiện luật thừa, luật quá rộng, luật không dùng |
| Danh sách kiểm tra khi lưu lượng RA bị chặn | Bước |
|---|---|
| 1 | Có luật DENY EGRESS nào không, ưu tiên bao nhiêu |
| 2 | Luật ALLOW có ưu tiên cao hơn (số nhỏ hơn) không |
| 3 | Luật có nhắm đúng tag hoặc service account của VM không |
| 4 | Route có đường ra không (Cloud NAT, IGW tương đương) |
| 5 | Bật firewall rule logging rồi thử lại |
| 6 | Connectivity Tests để có kết luận nhanh |
| Firewall Insights — công cụ rất đáng dùng | Nội dung |
|---|---|
| Luật không bao giờ khớp | ứng viên để xoá |
| Luật quá rộng | cho phép nhiều hơn mức thực tế cần |
| Luật bị che khuất | bị một luật ưu tiên cao hơn nuốt mất |
| Dựa trên | dữ liệu firewall logging thật |
| Lợi ích | dọn dẹp bộ luật mà không phải đoán |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Luật nào đang áp cho VM | gcloud compute firewall-rules list --filter="targetTags:<tag>" | | Luật nào khớp lưu lượng | Cloud Logging, lọc resource.type="gce_subnetwork" | | Đường đi lý thuyết | Connectivity Tests trong Network Intelligence Center |
Và một công cụ nên dùng trước khi bật logging và ngồi đọc từng dòng: Connectivity Tests. Nó phân tích cấu hình đường đi giữa hai điểm mà không gửi gói tin nào, rồi chỉ thẳng "bị chặn bởi luật firewall tên X" — nhanh hơn nhiều so với việc chờ log tích luỹ đủ để nhìn ra vấn đề.