Staging, Production, Dev tụi em để chung repo/kustomize, dễ quản lý hơn… cho đến khi prod sập vì copy nhầm!
Team nhét hết config dev, staging, prod vào một repo, tưởng “tiện” nhưng lại thành bãi mìn. Copy-paste sai một dòng YAML, thế là production “hắt hơi” khi deploy staging.
![]() |
Đấm phát đi cả dev/stg lẫn production |
Thực trạng: Repo hỗn độn
Thực trạng:
- Một repo chứa manifest cho tất cả môi trường, thường dùng Kustomize base chung.
- Không có policy review riêng cho prod, dẫn đến sai sót như copy nhầm config.
- Không có approval gate, merge vào prod dễ như merge dev.
Hệ quả:
- Human error: Deploy staging nhưng nhầm config prod, gây downtime.
- Không audit được: Không biết thay đổi nào ảnh hưởng môi trường nào.
- Rủi ro bảo mật: Secret prod lộ trong folder dev, dễ bị lạm dụng.
Giải pháp: Tách môi trường, thêm policy
Để tránh thảm họa:
- Tách repo/folder: Dùng repo riêng hoặc folder riêng cho dev/staging/prod.
- Policy engine: Dùng OPA (Open Policy Agent) hoặc Kyverno để validate manifest trước sync.
- Approval gate: Yêu cầu PR approval cho prod, dùng GitHub/GitLab environment protection.
Ví dụ: Kustomize tách folder:
manifests/
├── dev/
├── staging/
├── prod/
Kyverno policy để bắt buộc namespace:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: enforce-namespace
spec:
rules:
- name: check-namespace
match:
resources:
kinds: [Pod]
validate:
message: "Namespace must be set"
pattern:
metadata:
namespace: "?*"
🎯 Tóm lại: Một repo cho tất cả môi trường là “cú nổ” chờ sẵn. Tách folder/repo, dùng policy engine, và approval gate để deploy an toàn.
Đăng nhận xét