Lộ trình
Cloud Native Computing FoundationAssociateTuần 3: Kiến trúc & bảo mậtBài 18 / 30

Ngày 18: ConfigMap & Secret nâng cao

Thời lượng: 45 phút
Mục tiêu: 2 nhiệm vụ chính
Tiến độ lộ trình
ckadngày 18
hoàn thành18 / 30 bài
Bối cảnh bài học

Quản lý ConfigMap/Secret nâng cao: env injection vs volume projection, update/reload semantics, checksum rollout, immutable data, RBAC và secret-safe operations.

đọc hiểuthực hànhcheckpoint
Bài giảng hôm nay

Học hiểu, rồi mới thực hành

Quản lý ConfigMap/Secret nâng cao: env injection vs volume projection, update/reload semantics, checksum rollout, immutable data, RBAC và secret-safe operations.

Bắt đầu đọc bài giảng

Nhiệm vụ bài học hôm nay

  • Thực hành cập nhật ConfigMap và quan sát ứng dụng reload
  • Học giới hạn và best practice khi dùng Secret
Instructor walkthrough

Bài giảng chi tiết: từ bài toán đến bằng chứng

Scenario xuyên suốt

ConfigMap đổi nhưng app dùng env không đổi; volume projection có delay hoặc subPath không update; Secret bị in vào log/repository. Bài học làm rõ config lifecycle và buộc chọn reload strategy có chủ đích.

01Đọc bài toán

Xác định actor, workload, constraint và trạng thái cuối cần đạt.

02Vẽ luồng / boundary

Chỉ ra request, dependency, identity và failure domain trước khi chọn công cụ.

03Chọn và thực hành

Thay đổi nhỏ nhất trong lab cô lập; command nào cũng phải nói rõ nó kiểm tra điều gì.

04Kiểm chứng / recovery

Đối chiếu trạng thái thực tế, tạo một failure variant và ghi cách hoàn tác.

Cách nối lý thuyết với thực tế
  • ConfigMap/Secret có thể inject qua env hoặc volume; env thường cố định trong process tới khi Pod recreate, volume projection có propagation nhưng app phải reload.
  • subPath mount không nhận update projection như mount directory; checksum annotation/rollout hoặc controller reload là design option, không phải magic behavior.
  • Secret được base64 encode không đồng nghĩa encrypted; hạn chế RBAC, namespace, encryption-at-rest/External Secret policy và redact output.
  • Immutable ConfigMap/Secret ngăn thay đổi in-place, phù hợp config versioning nhưng cần tạo object mới và rollout consumer.

Config lifecycle, không chỉ object data

Env được copy vào process khi container start; đổi ConfigMap/Secret không tự đổi env. Volume directory có projection/update delay, nhưng app phải reload; subPath có caveat. Nếu cần deterministic rollout, dùng versioned object/checksum annotation/controller reload và verify Pod mới.

Secret safety

Base64 không phải encryption. Giới hạn RBAC/namespace, dùng encryption-at-rest/external secret policy khi phù hợp, redact logs/output và không commit plaintext. Immutable object giúp versioning nhưng yêu cầu tạo object mới/rollout. Validate schema, compatibility và rollback trước thay đổi.

Bài tập

So sánh env/volume/subPath, cập nhật config và đo reload, mô phỏng immutable/key/schema/permission failure, chọn rollout strategy và tạo variant. Cleanup secret-safe, lưu hash/metadata thay vì value.

Terminal reference

Command list và cách dùng

Chạy từng lệnh theo đúng thứ tự. Trước các lệnh có thể tạo hoặc thay đổi tài nguyên, hãy kiểm tra profile, account và region.

Commands · read-only checkpoints
kubectl get configmap,secret -n ckad-day18
kubectl describe configmap CONFIG_NAME -n ckad-day18
kubectl get pod POD_NAME -n ckad-day18 -o jsonpath="{.spec.containers[*].env} {.spec.volumes}{"\n"}"
kubectl exec POD_NAME -n ckad-day18 -- sh -c "ls -la /etc/app-config; sha256sum /etc/app-config/* 2>/dev/null"
kubectl rollout restart deployment/APP_NAME -n ckad-day18
kubectl rollout status deployment/APP_NAME -n ckad-day18
kubectl get events -n ckad-day18 --sort-by=.lastTimestamp
Hands-on lab

Thực hành theo scenario

  1. Tạo namespace `ckad-day18`, ConfigMap/Secret lab với non-sensitive marker, Deployment có env và volume consumer; ghi expected value/path, restart/reload contract và owner.
  2. Cập nhật ConfigMap/Secret: so sánh env process, mounted file (không subPath), subPath và app reload; dùng `exec`/logs/hash để chứng minh propagation, không in real secret.
  3. Mô phỏng bad key/schema/permission và immutable object; đọc Pod events/logs, sửa bằng versioned object/checksum annotation hoặc controlled rollout, verify new Pod uses expected config.
  4. Lập matrix env vs volume vs external secret/controller: reload latency, restart need, security, audit, rollback và size/format constraints. Test variant đổi key/namespace/ServiceAccount/RBAC.
  5. Cleanup Deployment/ConfigMap/Secret/versioned artifacts/namespace; redact values, không commit plaintext hoặc dùng `kubectl get secret -o yaml` vào log.
Evidence checkpoint

Kiểm chứng kết quả

Không coi lệnh chạy thành công là đủ. Hãy đối chiếu output với trạng thái mong đợi:

  • Env/volume/subPath update semantics có evidence.
  • Reload/rollout/versioning strategy có rationale.
  • Immutable/schema/permission failure được debug.
  • Secret encoding/RBAC/redaction limits đúng.
  • Cleanup không lộ hoặc xóa nhầm sensitive/shared data.
Transfer to exam / production

Bẫy thường gặp và trade-off

CKAD ConfigMap/Secret task: xác nhận key, namespace, volumeMount/envFrom và rollout behavior. Đừng kỳ vọng env tự đổi; kiểm tra Pod mới hoặc file mount đúng semantics, giữ Secret khỏi output.

Checkpoint · 3 phút

Kiểm tra nhanh

Câu hỏi: ConfigMap được inject qua env và đã update, nhưng app process vẫn thấy giá trị cũ. Cách xử lý đúng là gì?

Kết thúc bài

Checklist trước khi sang Ngày 2