Ngân hàng đề — Google Cloud Associate Cloud Engineer

Tìm thấy 449 câu.

Câu 31 Networking
You have just created a custom mode network using the command: gcloud compute networks create. You want to eventually deploy instances in multiple regions. What is the next thing you should do?
  1. A Create firewall rules to load balance traffic
  2. B Create a VPN between the custom model network and other networks in the VPC.
  3. C Create subnets in all regions
  4. 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.

Câu 32 Kubernetes
A client of yours wants to deploy a stateless application to Kubernetes cluster. The replication controller is named my-app-rc. The application should scale based on CPU utilization; specifically when CPU utilization exceeds 80%. There should never be fewer than 2 pods or more than 6. What command would you use to implement autoscaling with these parameters?
  1. A gcloud containers autoscale rc my-app-rc --min=2 --max=6 --cpu-percent=80
  2. B kubectl autoscale rc my-app-rc --min=2 --max=6 --cpu-percent=80
  3. C gcloud containers apply rc my-app-rc --min=2 --max=6 --cpu-percent=80
  4. 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 án kubectl 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ưng apply dù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.

Câu 33 IAM
A group of data scientists need access to data stored in Cloud Bigtable. You want to follow Google recommended best practices for security. What role would you assign to the data scientist to allow them to read data from Bigtable?
  1. A roles/bigtable.admin
  2. B roles/bigtable.reader
  3. C roles/bigtable.owner
  4. 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" → reader hoặc viewer "đọ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ì.

Câu 34 Kubernetes
You want to deploy an application to a Kubernetes Engine cluster using a manifest file called my-app.yaml. What command would you use?
  1. A gcloud deployment apply my-app.yaml
  2. B kubectl apply -f my-app.yaml
  3. C gcloud containers deployment apply my-app.yaml
  4. 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: kubectl là 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 ...) — gcloud không triển khai manifest Kubernetes. (Có gcloud deployment-manager như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 (container số í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 đó.

Câu 35 Computing Options
You have created a target pool with instances in two zones which are in the same region. The target pool is not functioning correctly. What could be the cause of the problem?
  1. A The target pool is not sending logs to Cloud Logging.
  2. B The target pool is missing a health check.
  3. C The target pool nodes are configured with different memory specifications
  4. 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.

Câu 36 Networking
A group of developers are creating a multi-tiered application. Each tier is in its own project. The developer would like to work with a common VPC network. What would you use to implement this?
  1. A Create a shared VPC
  2. B Create a VPN between projects
  3. C Create firewall rules to load balance traffic between each project's subnets.
  4. 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.

Câu 37 Computing Options
An application running in Compute Engine sometimes gets spikes in load. You want to add instances automatically when load increases significantly and plan to use managed instance groups. What would you need to create in order to automatically scale the cluster?
  1. A Snapshot
  2. B Persistent Disk
  3. C Instance template
  4. 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.

Câu 38 Computing Options
You will be running an application that requires high levels of security. You want to ensure the application does not run on a server that has been compromised by a rootkit or other kernel-level malware. What kind of virtual machine would you use?
  1. A Hardened VM
  2. B Shielded VM
  3. C Preemptible VM
  4. 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.

Câu 39 BigQuery
The CFO of you company feels you are spending too much on BigQuery. You determine that a few long running queries are costing more than they should. You would like to experiment with different ways of writing these queries. You'd like to know the estimated cost of running each query without actually running them. How could you do this?
  1. A Use the Pricing Calculator
  2. B Use the --estimate-cost option with the bq command
  3. C Use the --dry-run option with a bq query command
  4. 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-cost với lệnh bq) — đâ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-cost với gcloud) — sai cả cờ lẫn công cụ: BigQuery dùng bq.

  • 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.

Câu 40 Networking
You have created a set of firewall rules to control ingress and egress traffic to a network. Traffic that you intended to allow to leave the network appears to be blocked. What could you do to get information to help you diagnose the problem?
  1. A Enable Cloud Trace of each firewall rule
  2. B Enable firewall rule logging for each of the firewall rules
  3. C Enable Cloud Monitoring of each firewall rule
  4. 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 đề.