Một cho tất cả

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.

Post a Comment

Mới hơn Cũ hơn