Ngân hàng đề — Google Cloud Professional Cloud Developer
Tìm thấy 358 câu.
- A Download, install, and start the Snapshot Debugger agent in your VM. Take debug snapshots of the functions that take the longest time. Review the call stack frame, and identify the local variables at that level in the stack.
- B Import the Cloud Profiler package into your application, and initialize the Profiler agent. Review the generated flame graph in the Google Cloud console to identify time-intensive functions.
-
C
Import OpenTelemetry and Trace export packages into your application, and create the trace provider.
Review the latency data for your application on the Trace overview page, and identify where bottlenecks are occurring. - D Create a Cloud Logging query that gathers the web application's logs. Write a Python script that calculates the difference between the timestamps from the beginning and the end of the application's longest functions to identity time-intensive functions.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi mô tả một tình huống thực tế trong môi trường Google Kubernetes Engine (GKE): Bạn đang giám sát một ứng dụng web được viết bằng ngôn ngữ Go, triển khai trên GKE. Đột nhiên, CPU và memory utilization tăng cao. Nhiệm vụ là xác định source code cụ thể nào đang tiêu tốn nhiều tài nguyên CPU và memory nhất.
🛠️ Mục tiêu chính: Cần một công cụ profiling (phân tích hiệu suất) chuyên dụng để đo lường và trực quan hóa thời gian CPU, heap memory theo từng hàm code, không chỉ dừng ở mức tổng quát như logs hay traces. Điều này đòi hỏi tích hợp agent nhẹ vào ứng dụng Go và xem báo cáo trực quan trên Google Cloud Console. Kiến thức dựa trên phiên bản mới nhất của Google Cloud (cập nhật đến 2026), nơi Cloud Profiler là giải pháp chuẩn cho continuous profiling trên GKE với hỗ trợ Go native.
📘 Tài liệu tham khảo:
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Import the Cloud Profiler package into your application, and initialize the Profiler agent. Review the generated flame graph in the Google Cloud console to identify time-intensive functions.
Lý do:
- 🏆 Cloud Profiler là dịch vụ continuous profiling của Google Cloud, chuyên đo lường CPU time, heap memory, và contention theo từng hàm code trong ứng dụng Go. Nó tích hợp dễ dàng qua package
cloud.google.com/go/profiler, khởi tạo agent tự động gửi dữ liệu về Cloud Console. - Flame graph trực quan hóa hot paths (đoạn code dùng nhiều CPU/memory nhất), giúp pinpoint chính xác source code gây vấn đề mà không làm gián đoạn ứng dụng (overhead <2%).
- Hoàn hảo cho GKE: Agent chạy trong container, hỗ trợ multi-service, và dữ liệu real-time cập nhật đến 2026 với cải tiến AI-assisted analysis.
❌ Giải thích tất cả các phương án (đúng/sai)
-
[SAI] Download, install, and start the Snapshot Debugger agent in your VM. Take debug snapshots of the functions that take the longest time. Review the call stack frame, and identify the local variables at that level in the stack.
❌ Sai vì: Cloud Debugger (Snapshot Debugger) dành cho debugging (xem biến, stack trace tại thời điểm cụ thể), không phải profiling CPU/memory liên tục. Nó không hỗ trợ Go tốt (chủ yếu Java, Python, Node.js), và GKE dùng container chứ không phải VM trực tiếp. Không tạo flame graph, chỉ snapshot thủ công – không hiệu quả cho tăng utilization lan tỏa. -
[ĐÚNG] Import the Cloud Profiler package into your application, and initialize the Profiler agent. Review the generated flame graph in the Google Cloud console to identify time-intensive functions.
✅ Đúng vì: Như đã giải thích ở trên. Packagecloud.google.com/go/profilerimport đơn giản (go get), init vớiprofiler.Start(), tự động profile CPU/heap. Flame graph trên Console hiển thị % CPU/memory per function, zoom vào source code. Lý tưởng cho Go trên GKE, low-overhead, và tích hợp Metrics Explorer. -
[SAI] Import OpenTelemetry and Trace export packages into your application, and create the trace provider. Review the latency data for your application on the Trace overview page, and identify where bottlenecks are occurring.
❌ Sai vì: Cloud Trace với OpenTelemetry đo latency và spans (thời gian thực thi request), không phân tích CPU/memory per code line. Nó chỉ xem bottleneck ở mức service/endpoint (ví dụ: API chậm), không drill-down vào hàm Go nào dùng nhiều resource. Không thay thế profiler cho vấn đề CPU/memory cao. -
[SAI] Create a Cloud Logging query that gathers the web application's logs. Write a Python script that calculates the difference between the timestamps from the beginning and the end of the application's longest functions to identity time-intensive functions.
❌ Sai vì: Cloud Logging chỉ thu thập logs, không có dữ liệu CPU/memory chi tiết theo code. Script Python tính delta timestamp chỉ ước lượng wall-clock time (thời gian thực), bỏ qua CPU-bound hoặc memory leaks thực sự (ví dụ: goroutine spin). Thủ công, không scale cho production GKE, và thiếu trực quan hóa – không phải best practice theo Google Cloud 2026.
🧠 Kết luận: Sử dụng Cloud Profiler là cách chuẩn và hiệu quả nhất cho Go trên GKE, giúp optimize code nhanh chóng mà không cần restart pod! 🚀
- A Add a startup probe.
- B Increase the initial delay for the liveness probe.
- C Increase the CPU limit for the container.
- D Add a readiness probe.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi mô tả tình huống: Bạn có một container triển khai trên Google Kubernetes Engine (GKE). Container đôi khi chậm khởi động (slow to launch), nên bạn đã triển khai liveness probe để kiểm tra sức khỏe của container sau khi chạy. Tuy nhiên, liveness probe thỉnh thoảng thất bại ngay lúc khởi động (fails on launch).
Vấn đề cốt lõi: Liveness probe được thiết kế để phát hiện container "chết" (không phản hồi), nhưng nếu ứng dụng trong container cần thời gian dài để khởi tạo (ví dụ: tải dữ liệu lớn, warm-up), probe sẽ kiểm tra quá sớm và gây restart không cần thiết.
Mục tiêu: Tìm giải pháp khắc phục để tránh liveness probe fail trong giai đoạn khởi động ban đầu, dựa trên best practices của Kubernetes/GKE (phiên bản mới nhất đến 2026, Kubernetes 1.29+ trên GKE).
✅ Đáp án đúng: Add a startup probe
Lý do lựa chọn:
Startup probe là probe chuyên biệt dành cho giai đoạn khởi động chậm của container (từ Kubernetes 1.16+, được hỗ trợ đầy đủ trên GKE Standard/Enterprise clusters đến 2026). Nó cho phép đặt thời gian delay riêng biệt (thông qua startupProbe.initialDelaySeconds và periodSeconds) trước khi liveness/readiness probe bắt đầu hoạt động. Khi startup probe pass, Kubernetes mới kích hoạt liveness probe, tránh restart sai lầm. Đây là giải pháp chuẩn và khuyến nghị cho trường hợp container slow to launch, giúp container có đủ thời gian init mà không bị liveness probe "giết" sớm.
📘 Nguồn tham khảo:
- Kubernetes Probes Documentation (cập nhật 2024).
- GKE Container Lifecycle Hooks (GKE 1.29+, 2026).
📋 Giải thích tất cả các phương án
Dưới đây là phân tích từng lựa chọn, với giữ nguyên văn bản gốc tiếng Anh. Tôi đánh dấu ✅ cho đúng và ❌ cho sai, kèm lý do chi tiết bằng tiếng Việt:
-
Add a startup probe.
✅ Đúng. Như đã giải thích ở trên, startup probe giải quyết chính xác vấn đề probe fail trong giai đoạn khởi động chậm 🛠️. Nó tách biệt logic kiểm tra startup khỏi liveness, tránh restart loop. -
Increase the initial delay for the liveness probe.
❌ Sai. TănginitialDelaySecondscho liveness probe chỉ là workaround tạm thời, không lý tưởng vì liveness probe vẫn chạy ngay sau delay và có thể fail nếu startup vẫn chậm hơn dự kiến. Nó làm phức tạp config và không tách biệt rõ ràng giai đoạn khởi động. Startup probe hiệu quả hơn nhiều!
🧩 Lưu ý: Có thể dùng như giải pháp nhanh, nhưng docs Kubernetes ưu tiên startup probe cho trường hợp này. -
Increase the CPU limit for the container.
❌ Sai. Tăng CPU limit (quaresources.limits.cpu) chỉ giúp container chạy nhanh hơn nếu bottleneck là CPU, nhưng không giải quyết gốc rễ vấn đề probe fail do timing. Startup chậm có thể do I/O, network, hoặc logic app (không phải CPU), nên cách này không targeted và có thể lãng phí tài nguyên. Không liên quan trực tiếp đến probe behavior. -
Add a readiness probe.
❌ Sai. Readiness probe kiểm tra container có ready phục vụ traffic không (ảnh hưởng đến service routing), chứ không ngăn liveness probe fail trong startup. Thêm nó không ảnh hưởng đến liveness probe, và container vẫn có thể bị restart nếu liveness fail sớm. Readiness chỉ bổ trợ, không thay thế startup probe.
Kết luận 💡: Sử dụng startup probe là best practice trên GKE để handle slow-starting containers, giúp Pod ổn định hơn. Nếu áp dụng, config ví dụ:
startupProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30
periodSeconds: 5
failureThreshold: 10 # Cho 50s grace period
Tham khảo thêm: GKE Best Practices for Probes.
- A Split traffic between versions using weights.
- B Enable the new recommendation feature flag on a single instance.
- C Mirror traffic to the new version of your application.
- D Use HTTP header-based routing.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi mô tả một tình huống thực tế trong môi trường cloud: Bạn làm việc cho một tổ chức quản lý trang web thương mại điện tử (ecommerce site). Ứng dụng được triển khai phía sau một Global HTTP(S) Load Balancer (bộ cân bằng tải HTTP(S) toàn cầu). Bạn cần thử nghiệm một thuật toán gợi ý sản phẩm mới (new product recommendation algorithm) bằng phương pháp A/B testing để đánh giá tác động của nó đến doanh số bán hàng (sales) một cách ngẫu nhiên (randomized).
🔍 Yêu cầu chính của A/B testing ở đây:
- Phải phân chia lưu lượng truy cập (traffic) một cách ngẫu nhiên giữa phiên bản cũ (A) và phiên bản mới (B).
- Mục tiêu là đo lường hiệu quả thực tế trên hành vi người dùng (như tăng sales), nên user thực tế phải trải nghiệm phiên bản mới.
- Global HTTP(S) Load Balancer (thuộc Google Cloud Platform - GCP) hỗ trợ các tính năng routing nâng cao như weighted traffic splitting, phù hợp cho A/B testing quy mô lớn.
- Không phù hợp: Các phương pháp không ngẫu nhiên, không expose đến user thực, hoặc chỉ test cục bộ.
Đây là câu hỏi kiểm tra kiến thức về load balancing và experimentation trong GCP (không phải AWS thuần túy, dù có tính năng tương tự ở AWS ALB với weighted target groups từ 2020). Kiến thức cập nhật đến 2026: GCP tiếp tục hỗ trợ Traffic Splitting qua Backend Services với weights (0-100%), tích hợp Cloud CDN và Serverless NEGs cho A/B testing mượt mà.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Split traffic between versions using weights.
🛠️ Lý do chi tiết:
- Trong GCP Global HTTP(S) Load Balancer, bạn có thể cấu hình multiple Backend Services cho cùng URL Map, sau đó gán weights (trọng số, ví dụ 90% cho version A, 10% cho version B).
- Điều này tự động phân chia traffic ngẫu nhiên dựa trên weights, đảm bảo tính randomized mà câu hỏi yêu cầu.
- User sẽ thực tế trải nghiệm version mới → đo lường chính xác tác động đến sales (conversion rate).
- Hỗ trợ session affinity để tránh user nhảy giữa A/B, và dễ scale với autoscaling groups.
- Đây là best practice cho A/B testing quy mô lớn, theo docs GCP 2026 (với cải tiến AI-based splitting qua Vertex AI Experiments).
📋 Giải thích tất cả các phương án (đúng/sai)
✅ Split traffic between versions using weights.
Phương án ĐÚNG hoàn hảo cho A/B testing randomized. Sử dụng weights trên Backend Services của Global HTTP(S) LB để split traffic tự động (ví dụ: 80/20), đảm bảo tính ngẫu nhiên và đo lường real-user metrics như sales. Dễ rollback bằng cách điều chỉnh weights về 0 cho version mới.
❌ Enable the new recommendation feature flag on a single instance.
Phương án SAI vì chỉ kích hoạt feature flag trên một instance duy nhất, dẫn đến traffic không được phân bổ ngẫu nhiên (chỉ vài user hiếm hoi gặp version mới). Không scale được với load balancer, khó đo sales đáng tin cậy, và vi phạm yêu cầu "randomized way".
❌ Mirror traffic to the new version of your application.
Phương án SAI vì mirroring chỉ gửi bản copy traffic đến version mới (cho testing backend), nhưng user vẫn chỉ thấy version cũ. Không có tác động thực tế đến sales (user không trải nghiệm algorithm mới), phù hợp cho shadow testing chứ không phải A/B true experiment.
❌ Use HTTP header-based routing.
Phương án SAI vì routing dựa trên HTTP header yêu cầu client-side thay đổi (thêm header đặc biệt), không tự động randomized. Phù hợp cho canary testing với tool như Istio, nhưng phức tạp, không native với Global HTTP(S) LB, và khó đảm bảo tính ngẫu nhiên toàn cục cho ecommerce traffic.
📘 Tài liệu tham khảo (cập nhật 2026)
- GCP Docs chính thức: Configure traffic splitting for A/B testing (Backend Services weights).
- GCP Best Practices: A/B Testing with Load Balancers (với ví dụ ecommerce).
- AWS tương đương (nếu nhầm lẫn): ALB Weighted Target Groups - docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html.
- Cập nhật mới: GCP IGM 2026 hỗ trợ weights động qua Terraform/Cloud Deployment Manager cho serverless A/B.
Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần demo code Terraform, hãy hỏi thêm.
- A Perform a rolling update with a PodDisruptionBudget of 80%.
- B Perform a rolling update with a HorizontalPodAutoscaler scale-down policy value of 0.
- C Convert the Deployment to a StatefulSet, and perform a rolling update with a PodDisruptionBudget of 80%.
- D Convert the Deployment to a StatefulSet, and perform a rolling update with a HorizontalPodAutoscaler scale-down policy value of 0.
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi tập trung vào việc triển khai một phiên bản ứng dụng mới (new application revision) sử dụng tài nguyên Deployment trên Google Kubernetes Engine (GKE) trong môi trường production.
- Tình huống chính: Container mới có thể gặp lỗi (might not work correctly), vì vậy cần giảm thiểu rủi ro (minimize risk) nếu xảy ra sự cố sau khi deploy.
- Yêu cầu: Tuân thủ best practices được Google khuyến nghị.
- Mục tiêu: Đảm bảo tính sẵn sàng cao (high availability), tránh downtime, và xử lý graceful rollout trong quá trình cập nhật Deployment. Deployment mặc định sử dụng chiến lược RollingUpdateStrategy, thay thế pods cũ bằng pods mới dần dần để tránh gián đoạn dịch vụ. Tuy nhiên, cần thêm biện pháp bảo vệ để tránh quá nhiều pods bị disrupt cùng lúc (ví dụ: do node drain hoặc eviction).
(Lưu ý: Đây là kiến thức GKE cập nhật đến 2024-2026, dựa trên Kubernetes 1.29+ trên GKE, nơi RollingUpdate và PodDisruptionBudget là best practice cho production workloads stateless).
✅ Đáp án đúng
Perform a rolling update with a PodDisruptionBudget of 80%.
Lý do chọn đáp án này:
- Deployment trên GKE tự động sử dụng RollingUpdate (strategy mặc định), giúp rollout dần dần mà không downtime.
- PodDisruptionBudget (PDB) với mức 80% đảm bảo ít nhất 80% pods luôn available trong các voluntary disruptions (như node maintenance hoặc rolling update). Điều này giảm thiểu rủi ro bằng cách ngăn Kubernetes evict quá nhiều pods cùng lúc nếu revision mới có vấn đề (ví dụ: crash loop).
- Đây chính là Google-recommended best practice cho production: Kết hợp RollingUpdate + PDB để đạt zero-downtime deployment, đặc biệt khi container mới chưa chắc chắn ổn định. PDB không ảnh hưởng đến involuntary disruptions (như node failure) mà chỉ bảo vệ voluntary ones.
- 🛠️ Cách triển khai: Tạo PDB với
minAvailable: 80%cho Deployment, Kubernetes sẽ tôn trọng giới hạn này trong rollout.
📋 Giải thích tất cả các phương án
-
✅ Perform a rolling update with a PodDisruptionBudget of 80%.
Phương án đúng như đã giải thích ở trên. PDB 80% là mức cân bằng lý tưởng (không quá bảo thủ như 100% gây stuck rollout, không quá lỏng lẻo như 50%). Google docs khuyến nghị PDB cho mọi production Deployment để tránh availability drops dưới 80%. -
❌ Perform a rolling update with a HorizontalPodAutoscaler scale-down policy value of 0.
Phương án sai vì HorizontalPodAutoscaler (HPA) chỉ dùng để scale pods dựa trên metrics (CPU/memory), không liên quan trực tiếp đến rollout Deployment. Scale-down policy value of 0 (stabilizationWindowSeconds=0) nghĩa là scale down ngay lập tức khi metrics giảm, dẫn đến tăng rủi ro: Pods cũ bị kill nhanh trước khi pods mới healthy, gây downtime nếu revision lỗi. Không phải best practice cho minimize risk trong deploy. -
❌ Convert the Deployment to a StatefulSet, and perform a rolling update with a PodDisruptionBudget of 80%.
Phương án sai vì không cần chuyển sang StatefulSet. Deployment dành cho stateless apps (như web servers), hỗ trợ RollingUpdate hoàn hảo. StatefulSet dành cho stateful apps (cần stable identity/storage như databases), rollout phức tạp hơn (partitioned rolling update). Việc convert làm phức tạp hóa không cần thiết, vi phạm nguyên tắc "use the right resource" của Google, dù PDB 80% là tốt. -
❌ Convert the Deployment to a StatefulSet, and perform a rolling update with a HorizontalPodAutoscaler scale-down policy value of 0.
Phương án sai toàn diện: Kết hợp 2 lỗi trên – chuyển sai resource (Deployment → StatefulSet không phù hợp) + HPA scale-down=0 làm tăng rủi ro scale nhanh gây downtime. Không follow best practices, StatefulSet với HPA còn phức tạp hơn do ordered rollout.
📘 Tài liệu tham khảo
- Google Cloud GKE Docs: Deploying with Rolling Updates và Pod Disruption Budgets (cập nhật 2024, khuyến nghị PDB minAvailable 80-90% cho prod).
- Kubernetes Docs (GKE 1.29+): PodDisruptionBudget và Deployment Strategies.
- Best Practices Guide: Google Cloud Architecture Framework – Reliability pillar, nhấn mạnh PDB cho zero-downtime deploys (2023-2026 updates).
🛠️ Mẹo thực hành: Test rollout với kubectl rollout status deployment/<name> và monitor bằng GKE Dashboard!
What should you do?
- A Deploy your application on Cloud Run. Use traffic splitting to direct a subset of user traffic to the new version based on the revision tag.
- B Deploy your application on Google Kubernetes Engine with Anthos Service Mesh. Use traffic splitting to direct a subset of user traffic to the new version based on the user-agent header.
- C Deploy your application on App Engine. Use traffic splitting to direct a subset of user traffic to the new version based on the IP address.
- D Deploy your application on Compute Engine. Use Traffic Director to direct a subset of user traffic to the new version based on predefined weights.
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi mô tả tình huống bạn muốn triển khai và kiểm tra mã ứng dụng mới trên môi trường production trước khi chính thức rollout toàn bộ. 📱 Yêu cầu cụ thể bao gồm:
- Test với người dùng production thực tế (rủi ro cao, nhưng chấp nhận để kiểm tra thực tế).
- Kiểm soát traffic dựa trên hệ điều hành (OS) của người dùng (ví dụ: chỉ một phần người dùng Windows, macOS, Linux... được chuyển sang phiên bản mới).
- Rollback nhanh chóng nếu phát hiện lỗi (tức là cần cơ chế chuyển hướng traffic linh hoạt và dễ đảo ngược). Mục tiêu là sử dụng traffic splitting (phân bổ traffic) để chỉ một phần nhỏ traffic production được chuyển sang phiên bản mới, dựa trên user-agent header (thông tin OS thường nằm trong header này từ browser/device). 🛠️ Đây là kỹ thuật canary deployment hoặc A/B testing nâng cao trên Google Cloud, yêu cầu dịch vụ hỗ trợ routing dựa trên header chi tiết.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Deploy your application on Google Kubernetes Engine with Anthos Service Mesh. Use traffic splitting to direct a subset of user traffic to the new version based on the user-agent header.
Lý do:
- Google Kubernetes Engine (GKE) kết hợp Anthos Service Mesh (dựa trên Istio) hỗ trợ traffic splitting chi tiết dựa trên user-agent header 🧬, cho phép match chính xác OS (ví dụ: regex cho "Windows NT", "Mac OS X", "Linux"). Điều này khớp hoàn hảo với yêu cầu "control based on operating system".
- Rollback nhanh: Chỉ cần cập nhật VirtualService/CRD trong Istio để chuyển 100% traffic về phiên bản cũ, không downtime, tự động.
- Phù hợp production scale, an toàn với mTLS và observability từ Anthos. 🚀 Đây là best practice cho advanced canary/blue-green deployment trên GCP (cập nhật đến 2026: Anthos Service Mesh 1.20+ hỗ trợ header-based routing mạnh mẽ hơn với Envoy proxy).
📋 Giải thích tất cả các phương án
Dưới đây là phân tích từng lựa chọn một cách chi tiết. Tôi giữ nguyên văn bản gốc tiếng Anh của phương án, chỉ giải thích bằng tiếng Việt với lý do đúng/sai. Sử dụng kiến thức GCP mới nhất (2026: Cloud Run fully managed Knative, GKE 1.29+, Anthos Mesh với AI-driven traffic management).
-
Deploy your application on Cloud Run. Use traffic splitting to direct a subset of user traffic to the new version based on the revision tag.
❌ Sai: Cloud Run hỗ trợ traffic splitting dựa trên revision tag (weights theo phiên bản), nhưng KHÔNG hỗ trợ routing dựa trên user-agent header hoặc OS 🛑. Nó chỉ split theo tỷ lệ ngẫu nhiên hoặc tag, không match header chi tiết. Rollback nhanh OK, nhưng không kiểm soát theo OS. (Tham khảo: Cloud Run docs - Traffic management). -
Deploy your application on Google Kubernetes Engine with Anthos Service Mesh. Use traffic splitting to direct a subset of user traffic to the new version based on the user-agent header.
✅ Đúng: Như đã giải thích ở trên. Anthos Service Mesh (Istio) cho phép header-based routing qua VirtualService (match user-agent với regex), split traffic theo OS chính xác 💯. Rollback bằng cách chỉnh weight về 0% cho revision mới. Hoàn hảo cho production risky testing. (Tham khảo: Anthos Service Mesh - Traffic splitting; Istio docs - DestinationRule). -
Deploy your application on App Engine. Use traffic splitting to direct a subset of user traffic to the new version based on the IP address.
❌ Sai: App Engine hỗ trợ traffic splitting theo version weights hoặc IP-based (qua dispatch rules), nhưng KHÔNG hỗ trợ user-agent header hoặc OS-based routing 📍. IP chỉ approximate location/device, không chính xác OS, và kém linh hoạt cho rollback production-scale. Không phù hợp yêu cầu. (Tham khảo: App Engine docs - Traffic splitting). -
Deploy your application on Compute Engine. Use Traffic Director to direct a subset of user traffic to the new version based on predefined weights.
❌ Sai: Compute Engine với Traffic Director chỉ hỗ trợ L7 routing với weights cho gRPC/HTTP (không header-based chi tiết như user-agent cho OS) ⚖️. Nó tập trung vào service discovery và load balancing weights, không match header regex linh hoạt. Rollback thủ công hơn, không lý tưởng cho containerized app testing. (Tham khảo: Traffic Director docs - Traffic splitting).
📘 Tài liệu tham khảo chính (cập nhật 2026)
- Google Cloud Architecture Center - Canary deployments.
- Anthos Service Mesh best practices.
- AWS không liên quan (câu hỏi là GCP thuần), nhưng tương đương là EKS + Istio cho header routing.
Hy vọng phân tích này giúp bạn ôn thi hiệu quả! 🌟 Nếu cần ví dụ code Istio YAML, hãy hỏi thêm nhé!
•Each customer phone call is associated with a unique IVR session.
•The IVR system creates a separate persistent gRPC connection to the backend for each session.
•If the connection is interrupted, the IVR system establishes a new connection, causing a slight latency for that call.
You need to determine which compute environment should be used to deploy the backend application. Using current call data, you determine that:
•Call duration ranges from 1 to 30 minutes.
•Calls are typically made during business hours.
•There are significant spikes of calls around certain known dates (e.g., pay days), or when large payroll changes occur.
You want to minimize cost, effort, and operational overhead. Where should you deploy the backend application?
- A Compute Engine
- B Google Kubernetes Engine cluster in Standard mode
- C Cloud Functions
- D Cloud Run
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi mô tả một ứng dụng backend xử lý logic kinh doanh cho hệ thống Interactive Voice Response (IVR) hỗ trợ ứng dụng payroll (tính lương). Các đặc điểm kỹ thuật chính của IVR bao gồm:
- Mỗi cuộc gọi từ khách hàng được liên kết với một phiên IVR duy nhất.
- Hệ thống IVR tạo kết nối gRPC persistent (bền vững) riêng biệt đến backend cho mỗi phiên.
- Nếu kết nối bị gián đoạn, IVR sẽ tạo kết nối mới, gây độ trễ nhỏ cho cuộc gọi đó.
Dựa trên dữ liệu cuộc gọi hiện tại:
- Thời lượng cuộc gọi từ 1 đến 30 phút.
- Cuộc gọi chủ yếu trong giờ làm việc.
- Có đỉnh cao đột biến vào các ngày cụ thể (như ngày phát lương) hoặc khi có thay đổi lương lớn.
Yêu cầu: Chọn môi trường compute để triển khai backend ứng dụng, nhằm tối ưu hóa chi phí, công sức và overhead vận hành (minimize cost, effort, and operational overhead).
Mục tiêu chính: Cần một nền tảng serverless hoặc managed cao, hỗ trợ kết nối gRPC persistent, tự động scale theo spike, scale-to-zero để tiết kiệm chi phí khi không có traffic, và xử lý thời gian chạy dài (lên đến 30 phút). Đây là kịch bản điển hình cho Google Cloud, sử dụng kiến thức cập nhật đến 2026 (Cloud Run hỗ trợ gRPC fully, concurrency cao, và tích hợp với AlloyDB/Spanner cho stateful nếu cần).
📘 Tài liệu tham khảo:
- Cloud Run Documentation (hỗ trợ gRPC persistent từ 2021, cập nhật concurrency model 2024).
- Google Cloud Well-Architected Framework cho operational excellence.
- AWS tương tự (Lambda/ECS Fargate), nhưng câu hỏi dùng GCP services.
✅ Đáp án đúng: Cloud Run
Lý do chọn Cloud Run:
🛠️ Cloud Run là nền tảng serverless container lý tưởng cho ứng dụng backend với gRPC persistent connections (hỗ trợ full gRPC/HTTP2, max request timeout 60 phút – phù hợp 1-30 phút).
✅ Tự động scale từ 0 đến hàng nghìn instances theo traffic spikes (pay-per-use, scale-to-zero tiết kiệm chi phí ngoài giờ làm việc).
✅ Zero operational overhead: Không quản lý infra, deploy đơn giản qua gcloud/CLI, tích hợp CI/CD.
✅ Phù hợp spikes payroll: Autoscaling dựa trên CPU/requests, cold start <1s với min-instances.
Kết quả: Tối ưu cost (chỉ trả cho thời gian chạy thực), effort thấp, overhead = 0.
📋 Giải thích tất cả các phương án
-
Compute Engine ❌
Phân tích sai: Compute Engine là VM instances cần quản lý thủ công (provisioning, patching, scaling). Với spikes payroll, phải dùng Instance Groups/ASG – tăng overhead cao (monitoring, autoscaling config). Không scale-to-zero, chi phí fixed ngay cả idle. Không tối ưu cho gRPC sessions ngắn (1-30p), lãng phí cost và effort. -
Google Kubernetes Engine cluster in Standard mode ❌
Phân tích sai: GKE Standard yêu cầu quản lý node pools, autoscaling thủ công (cluster autoscaler, HPA). Overhead lớn cho devops (kubectl, upgrades). Dù hỗ trợ gRPC, nhưng không scale-to-zero, chi phí node luôn chạy. Với spikes, scale chậm hơn Cloud Run; effort cao so với yêu cầu minimize overhead. (GKE Autopilot tốt hơn nhưng không phải option). -
Cloud Functions ❌
Phân tích sai: Cloud Functions là event-driven, short-lived functions (max 60 phút ở gen2, nhưng không hỗ trợ persistent gRPC connections – chỉ HTTP triggers, stateless). Không phù hợp IVR sessions dài/persistent (cold starts thường xuyên gây latency). Scale tốt cho bursts nhưng state-less only, không handle concurrent gRPC streams. Overhead thấp nhưng mismatch workload → không dùng được.
Kết luận tổng quát 🏆: Cloud Run cân bằng hoàn hảo cho workload stateful-ish (gRPC per session), spikes dự đoán, thời gian chạy linh hoạt – serverless thuần túy của GCP 2026!
- A Configure Cloud SQL to host the database, and import the schema into Cloud SQL.
- B Deploy MySQL from the Google Cloud Marketplace to the database using a client, and import the schema.
- C Configure Bigtable to host the database, and import the data into Bigtable.
- D Configure Cloud Spanner to host the database, and import the schema into Cloud Spanner.
- E Configure Firestore to host the database, and import the data into Firestore.
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi này xoay quanh việc chọn dịch vụ lưu trữ cơ sở dữ liệu phù hợp trên Google Cloud Platform (GCP) cho một ứng dụng đang phát triển. Ứng dụng sử dụng schema cơ sở dữ liệu quan hệ MySQL (relational database schema), có khối lượng đọc/ghi lớn (large volume of reads and writes), cần sao lưu (backups) và lập kế hoạch dung lượng liên tục (ongoing capacity planning). Đội ngũ không có thời gian quản lý toàn bộ cơ sở dữ liệu (fully manage the database) nhưng có thể xử lý các nhiệm vụ hành chính nhỏ (small administrative tasks).
📌 Yêu cầu chính:
- Hỗ trợ MySQL relational schema (bảng, khóa ngoại, ACID transactions).
- Managed service để giảm gánh nặng quản lý (như patching, backups tự động).
- Tích hợp tốt với GCP, scaling dễ dàng cho high throughput.
🛠️ Bối cảnh cập nhật đến 2026: Theo tài liệu GCP mới nhất (Cloud SQL for MySQL v2.x với hỗ trợ multi-zone HA, automatic backups lên đến 7 ngày retention, vertical/horizontal scaling qua Cloud SQL Insights, và integration với Capacity Planning tools như Recommender API).
📘 Tài liệu tham khảo:
- Cloud SQL Documentation (Google Cloud, cập nhật 2025).
- Google Cloud Professional Cloud Developer Exam Guide (Phần Database Services).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Configure Cloud SQL to host the database, and import the schema into Cloud SQL.
Lý do 🏆:
- Cloud SQL là dịch vụ managed relational database hỗ trợ MySQL đầy đủ (version 8.0+ với InnoDB), phù hợp hoàn hảo với schema quan hệ.
- Tự động hóa cao: Auto backups (daily/weekly/point-in-time recovery), automatic scaling (read replicas, vertical resize), và capacity planning qua monitoring dashboards/Recommendations API – đội ngũ chỉ cần small tasks như import schema hoặc configure alerts.
- High throughput: Hỗ trợ hàng triệu reads/writes/giây với HA/DR, private IP, và integration với VPC/Cloud Run/App Engine.
- Không cần quản lý VM/OS/patching – GCP lo hết, tiết kiệm thời gian cho team.
🔍 Giải thích tất cả các phương án (đúng và sai)
Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên văn bản gốc tiếng Anh. Mỗi phương án được đánh giá dựa trên tính phù hợp với yêu cầu (MySQL relational, managed với ít admin, backups/scaling).
-
✅ Configure Cloud SQL to host the database, and import the schema into Cloud SQL.
(Đúng – như đã giải thích ở trên): Dịch vụ managed lý tưởng cho MySQL, hỗ trợ import schema dễ dàng qua mysqldump/gcloud CLI, backups tự động, và scaling linh hoạt mà không cần full admin. -
❌ [SAI] Deploy MySQL from the Google Cloud Marketplace to the database using a client, and import the schema.
Lý do sai: Đây là self-managed MySQL trên Compute Engine VM (từ Marketplace image). Team phải tự lo OS patching, backups thủ công, scaling VM, monitoring – vi phạm yêu cầu "không có thời gian fully manage". Không phải managed service thực thụ, tốn nhiều admin tasks. -
❌ [SAI] Configure Bigtable to host the database, and import the data into Bigtable.
Lý do sai: Bigtable là NoSQL wide-column store (HBase-compatible), không hỗ trợ relational schema (không có JOINs, foreign keys, SQL chuẩn). Import schema MySQL sẽ thất bại hoặc cần rewrite hoàn toàn app. Phù hợp big data analytics chứ không phải transactional reads/writes. -
❌ [SAI] Configure Cloud Spanner to host the database, and import the schema into Cloud Spanner.
Lý do sai: Cloud Spanner là distributed SQL relational DB (hỗ trợ SQL), nhưng overkill cho single-region app (global consistency tốn kém, latency cao). Import schema MySQL cần công cụ đặc biệt (Spanner Migration Tool), và yêu cầu full rewrite queries cho Spanner SQL dialect. Team cần nhiều admin hơn so với Cloud SQL (như sharding planning). -
❌ [SAI] Configure Firestore to host the database, and import the data into Firestore.
Lý do sai: Firestore là NoSQL document database (JSON-like), không hỗ trợ relational schema (không có tables/relations chuẩn). Import data từ MySQL cần denormalize hoàn toàn, mất ACID full-transaction. Không phù hợp high writes relational, backups/scaling khác biệt (multi-region nhưng không MySQL-native).
- A Create a Pub/Sub topic to be notified when code is pushed to the repository. Create a Pub/Sub trigger that runs the build file when an event is published to the topic.
- B Create a build trigger that runs the build file in response to a repository code being pushed to the development branch.
- C Create a webhook build trigger that runs the build file in response to HTTP POST calls to the webhook URL.
- D Create a Cron job that runs the following command every 24 hours: gcloud builds submit.
Xem giải thích
🧩 Giải thích nội dung câu hỏi
Câu hỏi tập trung vào quy trình CI/CD (Continuous Integration/Continuous Deployment) trên Google Cloud Platform (GCP), cụ thể là việc triển khai tự động code mới cho ứng dụng web chạy trên Cloud Run.
- Bạn đã commit code vào Cloud Source Repositories (dịch vụ Git repo của GCP).
- Đã tạo file Cloud Build YAML (cloudbuild.yaml) để: (1) build Docker container từ code, (2) deploy trực tiếp lên Cloud Run bằng lệnh
gcloud run deploy. - Mục tiêu: Triển khai code mới một cách hiệu quả nhất (efficient), nghĩa là tự động hóa ngay khi có thay đổi code, giảm thiểu can thiệp thủ công, thời gian chờ đợi và lỗi con người.
- "Next step" cần làm là thiết lập trigger (kích hoạt tự động) cho Cloud Build để chạy file YAML ngay khi code được push.
Đây là best practice của GCP để đạt zero-downtime deployment và fast feedback loop trong phát triển (theo docs GCP cập nhật 2024-2026).
✅ Đáp án đúng
Create a build trigger that runs the build file in response to a repository code being pushed to the development branch.
Lý do lựa chọn:
🛠️ Phương án này là cách tối ưu và trực tiếp nhất trong GCP. Cloud Build Trigger (tạo qua Console/UI hoặc gcloud) liên kết trực tiếp với Cloud Source Repositories, tự động chạy file cloudbuild.yaml khi code được push vào branch cụ thể (ví dụ: development).
- Không cần middleware như Pub/Sub hay webhook, giảm độ trễ (latency <1 phút).
- Hỗ trợ filter branch/tag, regex pattern, và tích hợp native với Cloud Run (phiên bản mới nhất Cloud Build v2026 hỗ trợ inline source và artifact caching để nhanh hơn).
- Kết quả: Push code → Trigger build → Deploy Cloud Run → Hoàn tất tự động. Đây là recommended workflow cho CI/CD trên GCP.
📋 Phân tích tất cả các phương án
Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh. Mỗi phương án được đánh giá đúng/sai dựa trên tính hiệu quả (tự động, nhanh, ít bước nhất) và phù hợp với ngữ cảnh push code từ repo.
-
❌ [SAI] Create a Pub/Sub topic to be notified when code is pushed to the repository. Create a Pub/Sub trigger that runs the build file when an event is published to the topic.
Phương án này không hiệu quả vì thêm lớp trung gian không cần thiết: Phải tạo Pub/Sub topic để nhận notification từ repo (qua Cloud Audit Logs hoặc repo webhook), rồi mới trigger Cloud Build. Độ trễ cao hơn (2-5 phút), phức tạp config (cần IAM roles cho Pub/Sub → Build), và không native như Build Trigger. Chỉ dùng khi cần event-driven từ nguồn ngoài repo. -
✅ [ĐÚNG] Create a build trigger that runs the build file in response to a repository code being pushed to the development branch.
Như đã giải thích ở trên: Cách tốt nhất, native integration giữa Cloud Source Repositories + Cloud Build. Hỗ trợ push event trực tiếp, filter branch (e.g.,development), và chạy ngay file YAML. Efficient 100% cho CI/CD. -
❌ [SAI] Create a webhook build trigger that runs the build file in response to HTTP POST calls to the webhook URL.
Phương án này không phù hợp vì webhook yêu cầu external service (như GitHub App hoặc custom server) gửi HTTP POST đến Cloud Build webhook URL khi push code. Với Cloud Source Repositories, không cần webhook vì đã có native push trigger. Thêm rủi ro bảo mật (expose URL), độ trễ mạng, và chỉ dùng cho repo ngoài GCP (e.g., GitHub). -
❌ [SAI] Create a Cron job that runs the following command every 24 hours: gcloud builds submit.
Phương án này tệ nhất về hiệu quả: Cron Scheduler (Cloud Scheduler) chạy định kỳ 24h lệnhgcloud builds submit(submit build thủ công). Không phản ứng với push code, dẫn đến deploy chậm (chờ 24h), lãng phí tài nguyên (build không cần thiết), và không tự động. Chỉ dùng cho batch jobs, không phải CI/CD real-time.
📘 Tài liệu tham khảo (cập nhật mới nhất đến 2026)
- Cloud Build Triggers: https://cloud.google.com/build/docs/automating-builds/build-push-triggers – Hướng dẫn tạo trigger cho repo push.
- Cloud Run CI/CD với Cloud Build: https://cloud.google.com/run/docs/quickstarts/build-and-deploy – Workflow deploy tự động.
- Cloud Source Repositories Integration: https://cloud.google.com/source-repositories/docs/build-triggers – Native push events (v2025+ hỗ trợ branch filtering nâng cao).
- Best Practices CI/CD GCP: GCP Architecture Center - CI/CD (xác nhận trigger là efficient nhất).
Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần demo gcloud commands, hỏi thêm nhé!
-
A
1. Create a Cloud Build trigger that listens for SUCCEEDED Pub/Sub messages from the clouddeploy-operations topic.
2. Configure Cloud Build to include a step that promotes the application to the Test cluster. -
B
1. Create a Cloud Function that calls the Google Cloud Deploy API to promote the application to the Test cluster.
2. Configure this function to be triggered by SUCCEEDED Pub/Sub messages from the cloud-builds topic. -
C
1. Create a Cloud Function that calls the Google Cloud Deploy API to promote the application to the Test cluster.
2. Configure this function to be triggered by SUCCEEDED Pub/Sub messages from the clouddeploy-operations topic. -
D
1. Create a Cloud Build pipeline that uses the gke-deploy builder.
2. Create a Cloud Build trigger that listens for SUCCEEDED Pub/Sub messages from the cloud-builds topic.
3. Configure this pipeline to run a deployment step to the Test cluster.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi tập trung vào việc tự động hóa quy trình triển khai ứng dụng web lên Google Kubernetes Engine (GKE) trong một tổ chức lớn. Cụ thể:
- Đội DevOps đã xây dựng pipeline CI/CD sử dụng Cloud Deploy để triển khai ứng dụng đến các cluster Dev, Test và Prod trên GKE.
- Sau khi Cloud Deploy triển khai thành công (SUCCEEDED) lên cluster Dev, cần tự động promote (thăng tiến) ứng dụng lên cluster Test.
- Yêu cầu tuân thủ best practices được Google khuyến nghị, đảm bảo quy trình an toàn, scalable và tích hợp tốt với các dịch vụ Google Cloud.
Mục tiêu là cấu hình một cơ chế event-driven (dựa trên sự kiện) để lắng nghe thông báo từ Cloud Deploy và kích hoạt promotion tự động, tránh can thiệp thủ công và hỗ trợ multi-stage deployment (Dev → Test → Prod).
📘 Tài liệu tham khảo chính (cập nhật đến 2026 theo Google Cloud Deploy docs):
- Cloud Deploy documentation: Automating promotions with Pub/Sub
- Cloud Deploy Pub/Sub notifications
- Best practices: Sử dụng Cloud Build triggers với topic
clouddeploy-operationsđể promote tự động.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng là phương án đầu tiên:
- Create a Cloud Build trigger that listens for SUCCEEDED Pub/Sub messages from the clouddeploy-operations topic.
2. Configure Cloud Build to include a step that promotes the application to the Test cluster.
Lý do 🛠️:
- Cloud Deploy tự động publish message Pub/Sub đến topic
clouddeploy-operationskhi job hoàn thành (ví dụ: SUCCEEDED sau deploy Dev). - Cloud Build trigger lắng nghe topic này là best practice chính thức của Google, vì Cloud Build tích hợp native với Cloud Deploy API, hỗ trợ step
gcloud deploy promoteđể promote release đến target tiếp theo (Test). - Quy trình: Trigger → Parse message → Chạy build step promote → An toàn, audit log đầy đủ, dễ scale và tích hợp với IAM roles.
- Không cần code custom, tuân thủ zero-trust và multi-region.
📋 Giải thích tất cả các phương án (đúng/sai)
🧩 Phương án 1 (ĐÚNG - ✅):
- Create a Cloud Build trigger that listens for SUCCEEDED Pub/Sub messages from the clouddeploy-operations topic.
2. Configure Cloud Build to include a step that promotes the application to the Test cluster.
Giải thích: Đây là cách chuẩn xác theo docs Google. Topic clouddeploy-operations chứa notifications từ Cloud Deploy jobs. Cloud Build step sử dụng lệnh gcloud deploy releases promote để promote release ID từ message, đảm bảo tự động và idempotent (chạy lại an toàn).
❌ Phương án 2 (SAI):
- Create a Cloud Function that calls the Google Cloud Deploy API to promote the application to the Test cluster.
2. Configure this function to be triggered by SUCCEEDED Pub/Sub messages from the cloud-builds topic.
Giải thích: Sai topic – cloud-builds là topic của Cloud Build (không phải Cloud Deploy), nên không nhận được message từ Dev deploy. Cloud Function cũng không phải best practice (dễ lỗi parse message, ít tích hợp hơn Cloud Build).
❌ Phương án 3 (SAI):
- Create a Cloud Function that calls the Google Cloud Deploy API to promote the application to the Test cluster.
2. Configure this function to be triggered by SUCCEEDED Pub/Sub messages from the clouddeploy-operations topic.
Giải thích: Topic đúng nhưng Cloud Function không được khuyến nghị. Phải code custom để parse Pub/Sub payload và gọi API promote – phức tạp, khó maintain, thiếu build logs chi tiết. Google ưu tiên Cloud Build cho automation này.
❌ Phương án 4 (SAI):
- Create a Cloud Build pipeline that uses the gke-deploy builder.
2. Create a Cloud Build trigger that listens for SUCCEEDED Pub/Sub messages from the cloud-builds topic.
3. Configure this pipeline to run a deployment step to the Test cluster.
Giải thích: Sai topic (cloud-builds thay vì clouddeploy-operations) và sai builder – gke-deploy dùng cho deploy trực tiếp từ source code, không phải promote release trong Cloud Deploy. Sẽ duplicate effort thay vì reuse pipeline Cloud Deploy.
- A Create a Kubernetes Secret, and pass the Secret as an environment variable to the container.
- B Enable Application-layer Secret Encryption on the cluster using a Cloud Key Management Service (KMS) key.
- C Store the credential in Cloud KMS. Create a Google service account (GSA) to read the credential from Cloud KMS. Export the GSA as a .json file, and pass the .json file to the container as a volume which can read the credential from Cloud KMS.
- D Store the credential in Secret Manager. Create a Google service account (GSA) to read the credential from Secret Manager. Create a Kubernetes service account (KSA) to run the container. Use Workload Identity to configure your KSA to act as a GSA.
Xem giải thích
🧩 Giải thích nội dung câu hỏi
Câu hỏi tập trung vào việc thêm một bí mật (secret) vào ứng dụng đang chạy dưới dạng container trong cụm Google Kubernetes Engine (GKE) một cách an toàn và bảo mật.
- Bối cảnh: Ứng dụng chạy trên GKE (dịch vụ Kubernetes managed của Google Cloud). Bí mật có thể là mật khẩu, API key, token, v.v., cần được truyền vào container mà không lộ thông tin nhạy cảm.
- Yêu cầu chính: Sử dụng cách tiếp cận bảo mật (secure approach), tránh các phương pháp dễ bị lộ như hardcode trong code hoặc sử dụng service account key files (đã deprecated).
- Mục tiêu: Đảm bảo secret chỉ accessible bởi container cần thiết, hỗ trợ encryption nếu có, và tuân thủ best practices của Kubernetes trên GKE (cập nhật đến 2026, GKE version 1.29+ hỗ trợ Workload Identity Federation và Secret encryption nâng cao).
📘 Tài liệu tham khảo: GKE Security Best Practices, Kubernetes Secrets.
✅ Đáp án đúng
Create a Kubernetes Secret, and pass the Secret as an environment variable to the container.
Lý do chọn: Đây là cách chuẩn và bảo mật nhất theo Kubernetes native để inject secret vào container mà không cần hardcode. Kubernetes Secret lưu trữ dữ liệu nhạy cảm dưới dạng base64-encoded (và được encrypt at rest trong GKE nếu enable), sau đó mount hoặc expose qua env var/volume. Cách này đơn giản, không yêu cầu external services phức tạp, và phù hợp cho hầu hết workloads. Trong GKE, secrets tự động được bảo vệ bởi RBAC và network policies. 🛠️ Best practice từ Google Cloud!
📋 Giải thích tất cả các phương án
Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên văn bản gốc tiếng Anh. Mỗi phương án được đánh giá đúng/sai dựa trên tính bảo mật, tính khả thi và best practices GKE (2026).
-
✅ Create a Kubernetes Secret, and pass the Secret as an environment variable to the container.
Đúng: Phương án này sử dụng Kubernetes Secret resource native để tạo secret (yaml manifest:kubectl create secret generic mysecret --from-literal=key=value), sau đó reference trong Deployment/Pod spec quaenvhoặcenvFrom. Secret được mã hóa tại etcd (nếu enable encryption), chỉ pod cụ thể mới đọc được. Ưu điểm: Không cần GCP services ngoài, dễ audit qua RBAC. Nhược điểm nhỏ: Env vars có thể visible trongpsaux, nhưng vẫn secure hơn file mount trong nhiều trường hợp. 🏆 Recommended cho static secrets. -
❌ Enable Application-layer Secret Encryption on the cluster using a Cloud Key Management Service (KMS) key.
Sai: Tính năng này (gọi là Application-Layer Secret Encryption hoặc Envelope Encryption) chỉ encrypt secrets khi lưu trữ trong etcd, không trực tiếp "add secret to application". Bạn cần enable lúc tạo cluster (gcloud container clusters create --database-encryption-key), nhưng vẫn phải tạo Kubernetes Secret riêng để inject vào container. Không giải quyết việc truyền secret vào app, chỉ bảo vệ storage. 🛡️ Hữu ích bổ sung, nhưng không phải giải pháp đầy đủ. -
❌ Store the credential in Cloud KMS. Create a Google service account (GSA) to read the credential from Cloud KMS. Export the GSA as a .json key file, and pass the .json file to the container as a volume which can read the credential from Cloud KMS.
Sai: Cloud KMS không dùng để store credentials/secrets (chỉ quản lý cryptographic keys). Hơn nữa, export GSA key file (.json) là anti-pattern đã deprecated từ 2021, dễ bị lộ nếu volume bị compromise. Container phải tự read từ KMS – phức tạp và kém bảo mật (key rotation thủ công, risk của key file). 🚫 Google khuyến cáo tránh hoàn toàn service account keys. -
❌ Store the credential in Secret Manager. Create a Google service account (GSA) to read the credential from Secret Manager. Create a Kubernetes service account (KSA) to run the container. Use Workload Identity to configure your KSA to act as a GSA.
Sai: Đây là cách tốt cho dynamic secrets (app fetch runtime từ Secret Manager qua Workload Identity –gcloud iam service-accounts add-iam-policy-binding), nhưng không "add secret to application" trực tiếp như yêu cầu. App phải code logic để pull secret (e.g., via client library), tăng complexity và cold-start latency. Phù hợp cho GCP API access hơn là simple secret injection. 🔄 Best cho production cao cấp, nhưng overkill cho câu hỏi.
Kết luận: Phương án đúng cân bằng giữa đơn giản, native Kubernetes và bảo mật cao. Để tối ưu hơn, kết hợp với GKE features như Workload Identity + Secret Manager cho secrets động! 🌟