Kiến Trúc GitOps Cho Hạ Tầng: Quản Trị Khai Báo OpenTofu Với Flux
Kiến Trúc GitOps Cho Hạ Tầng: Quản Trị Khai Báo OpenTofu Với Flux
Giới thiệu
Sự chuyển dịch sang Kỹ thuật Nền tảng (Platform Engineering) đòi hỏi việc khởi tạo và quản lý hạ tầng phải mang tính khai báo (declarative), có khả năng giám sát (observable) và tự động hóa cao tương tự như việc triển khai ứng dụng. Quy trình Infrastructure-as-Code (IaC) truyền thống thường phụ thuộc vào các pipeline CI/CD chạy các bản phác thảo giả định (speculative plans). Mô hình này bộc lộ nhiều hạn chế bao gồm lệch cấu hình (state drift), nghẽn cổ chai do phê duyệt thủ công, và lỗ hổng bảo mật trong quản lý thông tin xác thực đám mây (cloud credentials).
Bằng cách kết hợp OpenTofu — nhánh phát triển mã nguồn mở tiến hóa từ Terraform dưới sự bảo trợ của Linux Foundation — với Flux, các doanh nghiệp có thể hiện thực hóa mô hình GitOps thực thụ cho hạ tầng. Phương pháp này triệt tiêu hoàn toàn sự sai lệch cấu hình bằng cách liên tục đối chiếu tài nguyên đám mây thực tế với nguồn sự thật (source of truth) dựa trên Git, tận dụng Kubernetes làm mặt phẳng điều khiển (control plane).
Lợi ích cốt lõi
-
Khử lệch cấu hình tự động (Drift Detection & Remediation): Liên tục giám sát trạng thái thực tế và tự động điều chỉnh về trạng thái mong muốn được khai báo trong Git.
-
Quản lý tập trung qua Kubernetes: Sử dụng Kubernetes làm Control Plane để lập lịch, thực thi và giám sát các tài nguyên hạ tầng mà không cần duy trì các máy chủ CI/CD cồng kềnh.
-
Tăng cường bảo mật thông tin xác thực: Loại bỏ hoàn toàn việc lưu trữ API Key tĩnh của nhà cung cấp Cloud bằng cách tích hợp Workload Identity hoặc IAM Roles cho Kubernetes Pods.
-
Lưu vết và Kiểm toán toàn diện (Auditability): Mọi thay đổi hạ tầng đều phải thông qua quy trình phê duyệt Pull Request trên Git, tạo ra một lịch sử kiểm toán minh bạch và không thể chối cãi.
Kiến trúc & Thiết kế hệ thống
Kiến trúc hạ tầng vận hành theo cơ chế GitOps sử dụng mặt phẳng điều khiển Kubernetes để điều phối, thực thi và giám sát các module OpenTofu. Thay vì chạy các tiến trình thực thi (runners) trên máy cục bộ hoặc các tác nhân CI ngắn hạn (ephemeral CI agents), vòng lặp đối chiếu (reconciliation loop) được đảm nhận bởi Flux Tofu/Terraform Controller (tf-controller).
[ Git Repository ]
│ (Đẩy commit định nghĩa hạ tầng)
▼
[ Flux Source Controller ]
│ (Đồng bộ các file mã nguồn)
▼
[ Flux Tofu Controller ] ◄───► [ S3 Backend (Lưu trữ State) ]
│ (Tạo plan/apply)
▼
[ Cloud Provider API (AWS/GCP) ]
Kiến trúc này dựa trên ba thành phần cốt lõi:
1. Git Repository (Nguồn sự thật)
Chứa các file cấu hình OpenTofu đã được module hóa và các định nghĩa biến (variables).
2. Flux Source Controller
Liên tục kiểm tra kho mã nguồn để phát hiện thay đổi và đóng gói thư mục cấu hình dưới dạng file nén tarball.
3. Tofu Controller
Theo dõi cập nhật từ các gói tài nguyên (artifacts), khởi tạo các Pod thực thi ngắn hạn (ephemeral runner pods) chạy phiên bản OpenTofu được chỉ định, đồng bộ hóa state backend và áp dụng các thay đổi cấu hình thực tế.
Vòng lặp đối chiếu liên tục này sẽ chạy lệnh tofu plan ngầm định theo các khoảng thời gian được cấu hình sẵn. Nếu tài nguyên đám mây thực tế sai lệch so với cấu hình Git, controller sẽ gắn cờ cảnh báo tình trạng lệch cấu hình (drift), giúp đội ngũ kỹ sư nền tảng nhanh chóng xử lý tự động hoặc gửi cảnh báo tức thì.
Quy trình triển khai kỹ thuật
Để triển khai hạ tầng đám mây vận hành bằng GitOps, chúng ta cần cài đặt Flux Tofu Controller và cấu hình các tệp manifest cho tài nguyên đích.
Bước 1: Định nghĩa GitRepository Source
Cấu hình Flux để theo dõi kho lưu trữ chứa các định nghĩa OpenTofu của bạn. Lưu file cấu hình này với tên source-repository.yaml:
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: opentofu-infra-source
namespace: flux-system
spec:
interval: 1m0s
url: https://github.com/enterprise/opentofu-infrastructure-aws
ref:
branch: main
Bước 2: Cấu hình OpenTofu Custom Resource
Tạo cấu hình tài nguyên Terraform (sử dụng image chạy OpenTofu) để thực thi kế hoạch triển khai. Tạo file tofu-provisioner.yaml:
apiVersion: infra.contrib.fluxcd.io/v1alpha2
kind: Terraform
metadata:
name: aws-network-fabric
namespace: flux-system
spec:
runnerPodTemplate:
spec:
image: ghcr.io/flux-iac/tf-runner:v0.15.0-tofu1.6.2
interval: 30m
approvePlan: auto
path: ./environments/production/vpc
sourceRef:
kind: GitRepository
name: opentofu-infra-source
namespace: flux-system
writeOutputsToSecret:
name: vpc-outputs-secret
outputs:
- vpc_id
- private_subnets
Khi áp dụng các tệp cấu hình này, controller sẽ tự động tải mã nguồn từ Git Repository, khởi chạy một Pod thực thi (runner pod) bảo mật chứa runtime OpenTofu v1.6.2, khởi tạo các state backend, và tự động áp dụng (apply) cấu hình mạng VPC cho hệ thống.
Khuyến nghị bảo mật
Áp dụng GitOps cho hạ tầng thay đổi hoàn toàn cách chúng ta bảo mật thông tin xác thực và kiểm soát quyền truy cập đám mây:
-
Áp dụng Nguyên tắc đặc quyền tối thiểu (PoLP): Tránh việc lưu cứng (hardcode) các API Key tĩnh của nhà cung cấp dịch vụ đám mây bên trong Kubernetes Secret. Thay vào đó, hãy cấu hình IAM Roles for Service Accounts (IRSA) trên AWS hoặc Workload Identity trên GCP. Cơ chế này liên kết trực tiếp Pod chạy OpenTofu của bạn với các thông tin xác thực đám mây tạm thời được xác thực bằng mật mã học mã hóa.
-
Bảo mật hóa File State: Bảo vệ kho lưu trữ state từ xa (ví dụ: AWS S3, HashiCorp Consul) bằng mã hóa phía máy chủ (Server-Side Encryption - SSE) và các chính sách IAM nghiêm ngặt. Giới hạn quyền truy cập file state chỉ dành riêng cho các runner Pod của controller và các vai trò Kỹ sư Nền tảng (Platform Engineer) được chỉ định cụ thể.
-
Quy trình phê duyệt Plan nghiêm ngặt: Đối với các môi trường quan trọng như production, hãy chuyển cấu hình
approvePlansang chế độmanual. Controller khi đó sẽ tạo bản phác thảo thực thi (execution plan), xuất nó ra một Kubernetes Secret và tạm dừng quy trình cho đến khi một kỹ sư có thẩm quyền thực hiện lệnh xác nhận hoặc cập nhật trạng thái Pull Request:
kubectl -n flux-system patch terraform aws-network-fabric \
--type=merge -p '{"spec":{"approvePlan":"plan-xxxx"}}'
Kết luận
Việc tách biệt quy trình khởi tạo hạ tầng ra khỏi các pipeline CI/CD truyền thống và đưa nó vào bên trong pipeline GitOps chạy trực tiếp trên Kubernetes mang lại bước đột phá lớn về khả năng mở rộng hệ thống. Bằng cách thực thi OpenTofu thông qua Flux, các doanh nghiệp thiết lập được một vòng lặp kiểm soát bảo mật, có khả năng tự phục hồi và dễ dàng kiểm toán. Mô hình kiến trúc này giúp giảm thiểu tối đa hiện tượng lệch cấu hình, thực thi các ranh giới bảo mật nghiêm ngặt thông qua danh tính định danh của workload (workload identity), và đảm bảo trạng thái hạ tầng thực tế luôn đồng nhất với nguồn sự thật mang tính khai báo trong Git.
