1. Xác định yêu cầu phần cứng và phần mềm
Để xây dựng nền tảng AI Governance, môi trường chạy cần đảm bảo khả năng xử lý các yêu cầu validation đồng thời từ AI models và thu thập metrics liên tục.
Yêu cầu tối thiểu cho một cluster Kubernetes (Control Plane + 3 Worker Nodes) để chạy OPA Gatekeeper và Prometheus:
- CPU: Tối thiểu 4 vCPU tổng cộng (1 vCPU cho Control Plane, 1 vCPU cho mỗi Worker Node).
- RAM: Tối thiểu 8GB RAM tổng cộng (2GB cho Control Plane, 2GB cho mỗi Worker Node để chạy OPA và Prometheus).
- Disk: 50GB SSD (cho container images và logs).
- OS: Ubuntu 22.04 LTS hoặc Debian 11 (Khuyên dùng Ubuntu để tương thích tốt với các tool Kubernetes).
Danh sách các công cụ phần mềm bắt buộc phải cài đặt trên máy quản trị (Admin Machine) và các node:
- Kubernetes: Phiên bản 1.28 trở lên (Hỗ trợ đầy đủ cho OPA Gatekeeper v3).
- Docker: Engine version 24.0+ (Sử dụng làm container runtime).
- kubectl: Phiên bản tương ứng với Kubernetes cluster.
- Helm: Version 3.13+ (Để cài đặt OPA Gatekeeper và Prometheus qua chart).
- Git: Để quản lý source code chính sách.
Để verify yêu cầu phần cứng, chạy lệnh kiểm tra tài nguyên:
cat /proc/cpuinfo | grep "processor" | wc -l && free -h
Kết quả mong đợi: Số dòng đầu tiên là số lượng CPU logic, dòng thứ hai hiển thị tổng RAM phải lớn hơn 8GB (hoặc 2GB/node nếu phân tán).
2. Thiết kế kiến trúc luồng dữ liệu
Trước khi cài đặt, cần hiểu rõ luồng dữ liệu để cấu hình networking và policy engine chính xác. Kiến trúc AI Governance bao gồm 3 thành phần chính tương tác qua lại.
Luồng 1: AI Model Deployment (Enforcement)
Khi một AI Model (dưới dạng Kubernetes Deployment/Job) được submit vào cluster, luồng dữ liệu diễn ra như sau: User gửi manifest YAML -> Kubernetes API Server nhận yêu cầu -> Admission Webhook (OPA Gatekeeper) chặn và phân tích manifest -> Policy Engine (Rego) đánh giá dựa trên quy tắc -> Trả về Allow (đưa vào cluster) hoặc Deny (báo lỗi).
Luồng 2: Monitoring & Observability (Visibility)
AI Model khi chạy sẽ phát sinh metrics (số lần inference, latency, GPU usage) -> Prometheus scrape các metrics này qua endpoint /metrics -> Prometheus lưu trữ và gửi cảnh báo nếu vượt ngưỡng -> Dashboard hiển thị trạng thái tuân thủ.
Luồng 3: Policy Configuration (Management)
Git Repository chứa file chính sách (.rego) và cấu hình Helm -> CI/CD Pipeline (tự động hóa trong tương lai) pull code -> Cập nhật OPA Gatekeeper trong cluster.
Để verify kiến trúc mạng, đảm bảo các service có thể communicate:
kubectl run test-net --image=busybox --rm -it --restart=Never -- nslookup kubernetes.default.svc
Kết quả mong đợi: DNS trả về địa chỉ IP của kube-apiserver, chứng tỏ DNS cluster hoạt động.
3. Cài đặt Kubernetes cluster và công cụ phụ trợ
Chúng ta sẽ sử dụng kubeadm để khởi tạo cluster trên 1 node (cho mục đích demo) hoặc multi-node. Ở đây hướng dẫn cấu hình nhanh trên 1 máy Linux (Ubuntu 22.04) với Docker.
Bước 3.1: Cài đặt Docker Engine và Containerd
Trên Ubuntu, ta cần disable swap vì Kubernetes yêu cầu swap bị tắt để đảm bảo hiệu năng và tính ổn định.
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
Kết quả mong đợi: Lệnh chạy thành công, không có lỗi, swap bị vô hiệu hóa.
Cài đặt Docker Engine và Containerd (runtime mặc định của K8s hiện đại):
apt-get update && apt-get install -y docker.io containerd.io
Khởi động service Docker:
systemctl enable docker && systemctl start docker
Cấu hình containerd để sử dụng với Kubernetes:
mkdir -p /etc/containerd && containerd config default > /etc/containerd/config.toml && sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
systemctl restart containerd
Kết quả mong đợi: Containerd restart thành công, log không có lỗi về cgroup.
Bước 3.2: Cài đặt Kubernetes (kubeadm, kubectl, kubelet)
Thêm repository Kubernetes chính thức vào apt sources:
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && add-apt-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main" && apt-get update
Cài đặt các binary cần thiết:
apt-get install -y kubelet kubeadm kubectl && apt-mark hold kubelet kubeadm kubectl
Kết quả mong đợi: Các gói cài đặt xong, version được khóa (hold) để tránh tự động upgrade gây mất ổn định.
Bước 3.3: Khởi tạo Cluster
Sử dụng kubeadm init để tạo Control Plane. Chọn network plugin là Calico (tương thích tốt với OPA Gatekeeper và hỗ trợ NetworkPolicy).
kubeadm init --pod-network-cidr=192.168.0.0/16 --cri-socket=/var/run/containerd/containerd.sock
Kết quả mong đợi: Xuất hiện thông báo "Your Kubernetes control-plane has initialized successfully!" kèm theo lệnh join cho worker node (nếu có).
Cấu hình kubeconfig cho user hiện tại:
mkdir -p $HOME/.kube && cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && chown $(id -u):$(id -g) $HOME/.kube/config
Cài đặt CNI Plugin (Calico):
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/tigera-operator.yaml && kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/custom-resources.yaml
Kiểm tra trạng thái cluster:
kubectl get nodes
Kết quả mong đợi: Node hiện tại có trạng thái Ready.
Bước 3.4: Cài đặt Helm
Cài đặt Helm client để quản lý các chart phức tạp sau này:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Kiểm tra version:
helm version
Kết quả mong đợi: Hiển thị version Client và Server (v3.xx.x).
4. Khởi tạo repository Git cho chính sách
Để tuân thủ nguyên tắc "Policy as Code", mọi chính sách AI Governance phải được lưu trữ trong Git trước khi deploy vào cluster.
Tạo thư mục dự án và khởi tạo git repo:
mkdir -p ~/ai-governance && cd ~/ai-governance && git init
Tạo cấu trúc thư mục chuẩn:
mkdir -p policies/templates && mkdir -p monitoring && mkdir -p manifests
Tạo file README.md để mô tả cấu trúc:
cat > README.md
Thêm file vào git và commit lần đầu:
git add . && git commit -m "Initial commit: AI Governance project structure"
Kết quả mong đợi: Git report "1 file changed, X insertions" và commit hash được tạo.
5. Cấu hình cơ bản cho OPA Gatekeeper
OPA Gatekeeper là Admission Controller giúp enforce chính sách khi resource được tạo. Chúng ta sẽ cài đặt nó qua Helm chart chính thức.
Bước 5.1: Thêm Helm Repository của OPA
Thêm repo gatekeeper-shell hoặc repo chính thức của OPA:
helm repo add gatekeeper https://open-policy-agent.github.io/gatekeeper/charts && helm repo update
Kết quả mong đợi: Thông báo "Executing helm repo add" thành công và update xong các chart.
Bước 5.2: Cài đặt OPA Gatekeeper
Cài đặt Gatekeeper vào namespace gatekeeper-system. Chúng ta sẽ dùng version stable nhất hiện có.
helm install gatekeeper gatekeeper/gatekeeper-crds --namespace gatekeeper-system --create-namespace
Chờ một lúc cho các CRD (Custom Resource Definitions) được tạo xong:
kubectl wait --for=condition=established --timeout=60s crd --all -n gatekeeper-system
Kết quả mong đợi: Hiển thị danh sách các CRD (ConstraintTemplates, Constraints) với trạng thái "Established".
Cài đặt operator (controller) của Gatekeeper:
helm install gatekeeper-operator gatekeeper/gatekeeper --namespace gatekeeper-system --create-namespace --set installCRDs=false
Kiểm tra pod của Gatekeeper:
kubectl get pods -n gatekeeper-system
Kết quả mong đợi: Có 2 pod chạy (gatekeeper-audit, gatekeeper-controller-manager) với trạng thái Running và READY 2/2.
Bước 5.3: Tạo ConstraintTemplate mẫu đầu tiên
Để verify Gatekeeper hoạt động, ta tạo một template đơn giản kiểm tra xem namespace có được phép tạo hay không. Đây là bước chuẩn bị cho việc viết policy AI phức tạp sau.
Tạo file namespace-policy.yaml trong thư mục ~/ai-governance/policies/templates:
cat > ~/ai-governance/policies/templates/namespace-policy.yaml
Deploy template này vào cluster:
kubectl apply -f ~/ai-governance/policies/templates/namespace-policy.yaml
Kết quả mong đợi: Resource ConstraintTemplate được tạo thành công.
Bước 5.4: Tạo Constraint (Chính sách cụ thể)
Dựa trên template ở trên, ta tạo một constraint cụ thể cho phép chỉ namespace default và ai-production.
Tạo file namespace-constraint.yaml trong thư mục ~/ai-governance/manifests:
cat > ~/ai-governance/manifests/namespace-constraint.yaml
Deploy constraint vào cluster:
kubectl apply -f ~/ai-governance/manifests/namespace-constraint.yaml
Kết quả mong đợi: Resource K8sAllowedNamespaces được tạo thành công.
Bước 5.5: Verify hoạt động của OPA Gatekeeper
Thử tạo một namespace nằm trong danh sách được phép:
kubectl create namespace ai-production
Kết quả mong đợi: Namespace được tạo thành công (namespace/ai-production created).
Thử tạo một namespace nằm ngoài danh sách được phép (ví dụ: dev-test):
kubectl create namespace dev-test
Kết quả mong đợi: Lệnh bị từ chối với lỗi: admission webhook "validation.gatekeeper.sh" denied the request: Namespace dev-test is not in the allowed list.
Để xem chi tiết lỗi audit:
kubectl get constraintviolation -A
Kết quả mong đợi: Xuất hiện một dòng ConstraintViolation với loại lỗi tương ứng.
Điều hướng series:
Mục lục: Series: Xây dựng nền tảng AI Governance tự động với OPA, Prometheus và Policy Engine
Phần 2: Triển khai OPA Gatekeeper và viết chính sách đầu tiên cho AI »