Xây dựng và triển khai ứng dụng đặt lịch khám bệnh dùng Kubernetes và DevSecOps

Building and Deploying a Medical Appointment Booking Application Using Kubernetes and DevSecOps

TÁC GIẢ

Đặng Chí Thành, Lê Văn Phú

GIẢNG VIÊN HƯỚNG DẪN

NGÀNH

Năm:

TỔNG QUAN

Trong thời đại công nghệ số phát triển mạnh mẽ, nhu cầu xây dựng các ứng dụng hiện đại, linh hoạt, có khả năng mở rộng và đảm bảo an toàn bảo mật ngày càng trở nên cấp thiết. Kubernetes hiện là một trong những nền tảng quản lý container phổ biến nhất, được nhiều doanh nghiệp từ nhỏ đến lớn trên toàn thế giới tin dùng. Với khả năng quản lý và triển khai hiệu quả các ứng dụng container hóa theo kiến trúc Microservices, Kubernetes đóng vai trò quan trọng trong việc tối ưu hóa tài nguyên, hỗ trợ mở rộng trên các nền tảng đám mây khác nhau (multi-cloud, hybrid cloud) và nâng cao độ tin cậy cho hệ thống. 

Song song với đó, DevSecOps – mô hình tích hợp bảo mật vào quy trình phát triển và vận hành phần mềm – ngày càng được quan tâm như một phương pháp tiếp cận hiện đại nhằm đảm bảo chất lượng, độ an toàn và tính liên tục trong triển khai hệ thống. 

Xuất phát từ những xu hướng công nghệ đó, nhóm thực hiện đề tài “Xây dựng và triển khai ứng dụng đặt lịch khám bệnh dùng Kubernetes và DevSecOps”, với mục tiêu thiết kế, xây dựng và triển khai một ứng dụng web đặt lịch khám bệnh theo hướng hiện đại, an toàn và có khả năng mở rộng. 

Hệ thống được triển khai trên nền tảng Kubernetes (thiết lập thủ công bằng kubeadm), tích hợp quy trình CI/CD tự động hóa với các công cụ như Jenkins (tự động hóa build/test/deploy), SonarQube (kiểm tra chất lượng mã nguồn), Trivy (quét lỗ hổng bảo mật), DockerHub (lưu trữ image), và ArgoCD (triển khai GitOps)

Mục tiêu nghiên cứu

  • Thông qua đề tài, nhóm đặt ra các mục tiêu cụ thể như sau: 
  • Xây dựng một hệ thống ứng dụng web hỗ trợ đặt lịch khám bệnh theo kiến trúc hiện đại SERN (SQL, Express, React, Node.js), với khả năng phân quyền người dùng, xác thực đăng nhập và gửi thông báo email. 
  • Triển khai hệ thống trên Kubernetes được thiết lập thủ công bằng kubeadm, giúp rèn luyện kỹ năng vận hành và quản lý hạ tầng container hóa trong môi trường thực tế. 
  • Thiết kế và triển khai pipeline CI/CD chuẩn DevSecOps, tích hợp các công cụ như Jenkins (tự động hóa quy trình), SonarQube (kiểm tra chất lượng mã nguồn), Trivy (quét bảo mật), DockerHub (lưu trữ image), và ArgoCD (triển khai GitOps). 
  • Nâng cao kiến thức và kỹ năng thực hành DevOps/DevSecOps, từ việc viết Jenkinsfile, thiết lập môi trường CI/CD, đến triển khai ứng dụng an toàn, linh hoạt và có thể mở rộng. 
  • Đáp ứng các yêu cầu thực tế của doanh nghiệp, bao gồm triển khai nhanh, kiểm soát chất lượng phần mềm, bảo mật ngay từ sớm, và quản lý hệ thống theo hướng hiện đại hóa. 

Đối tượng nghiên cứu

  • Hệ thống ứng dụng web đặt lịch khám bệnh triển khai trên nền tảng Kubernetes. 
  • Quy trình CI/CD tích hợp DevSecOps sử dụng Jenkins, SonarQube, Trivy và ArgoCD. 
  • Việc áp dụng GitOps trong tự động triển khai ứng dụng. 

Phạm vi nghiên cứu 

  • Thiết kế và phát triển ứng dụng web với các chức năng: đăng ký, đăng nhập, đặt lịch, gửi email xác nhận, phân quyền người dùng (bệnh nhân, admin, bác sĩ). 
  • Triển khai CI/CD pipeline theo hướng DevSecOps tích hợp các công cụ kiểm thử, quét bảo mật, build Docker image, và triển khai ứng dụng lên Kubernetes. 
  • Cài đặt cụm Kubernetes bằng kubeadm trên Google Cloud Platform, sử dụng Kustomize để quản lý manifest đa môi trường (dev & prod). 
  • Tự động hóa quy trình triển khai theo hướng GitOps.

Phương pháp nghiên cứu

Để thực hiện đề tài, nhóm sử dụng các phương pháp nghiên cứu sau: 

  • Nghiên cứu tài liệu, học thuật: Tìm hiểu lý thuyết về Kubernetes, CI/CD, DevOps, DevSecOps, GitOps, cũng như các công cụ cụ thể như Jenkins, SonarQube, Trivy, ArgoCD, Kustomize. Ngoài ra, nhóm cũng tham khảo các mô hình kiến trúc web SERN (SQL – Express – React – Node.js). 
  • Thực nghiệm triển khai: 
    • Thiết lập một cụm Kubernetes thủ công bằng kubeadm trên Google Cloud Platform, bao gồm control-plane node và worker node. 
    • Xây dựng ứng dụng web đặt lịch khám bệnh theo kiến trúc SERN, gồm frontend và backend tách biệt, kết nối với cơ sở dữ liệu MySQL, Redis. 
    • Thiết kế pipeline CI/CD tích hợp kiểm thử, phân tích mã nguồn, quét bảo mật, build Docker image, push image và triển khai bằng GitOps với ArgoCD. 
  • Đánh giá và kiểm thử: 
    • Kiểm tra hiệu quả pipeline qua từng lần commit (push code), đánh giá khả năng tự động hóa, độ tin cậy của hệ thống.
    • Demo kiểm thử đầu cuối: từ đẩy code → kích hoạt pipeline → kiểm thử → triển khai → kiểm tra kết quả ứng dụng trên web. 
    • Ghi nhận kết quả triển khai, các lỗi phát sinh, thời gian xử lý, và so sánh với mục tiêu ban đầu để rút ra đánh giá.

PHƯƠNG PHÁP THỰC HIỆN

Mô hình thiết kế hệ thống CI/CD pipeline tích hợp DevSecOps

image 217

Các Giai Đoạn trong Pipeline CI/CD: 

1. Push code(Đẩy mã): Sau khi hoàn thành hoặc thay đổi mã nguồn, lập trình viên sẽ đẩy (push) các thay đổi này lên kho chứa mã nguồn. 

2. Pull code (Kéo mã): Jenkins phát hiện sự kiện push thông qua webhook và tự động kéo (pull) mã nguồn về. 

3. Build and Test (Xây dựng và Kiểm thử – Biểu tượng Node.js): Jenkins sử dụng các công cụ như Node.js (npm hoặc yarn) để: 

• Build: Biên dịch và cài đặt các phụ thuộc cần thiết để tạo ra phiên bản chạy được của ứng dụng. 

• Test: Thực thi các bài kiểm thử tự động nhằm đảm bảo mã nguồn mới không gây lỗi. 

7. Static Code Analysis: SonarQube thực hiện quét mã nguồn để tìm ra các lỗi, lỗ hổng bảo mật, các đoạn mã tiềm ẩn lỗi (code smells), mức độ bao phủ kiểm thử, và mã trùng lặp. 

8. Static Security Scan (Quét bảo mật mã nguồn): Trivy thực hiện quét bảo mật trên mã nguồn tĩnh để phát hiện các vấn đề bảo mật tiềm ẩn trước khi build.Build & Push Docker Image 

9. Build and Push Docker Image: Jenkins sẽ tạo ra Docker Image chứa ứng dụng hoàn chỉnh và đẩy ảnh này lên kho chứa ảnh Docker (Docker Registry). 

10.Scan Docker Image (Quét Docker image): Docker image được quét để phát hiện lỗ hổng bảo mật bên trong hệ điều hành và các thư viện được sử dụng. Công cụ phổ biến là Trivy. 

11.Update Build Number (Cập nhật số bản dựng): Jenkins tự động cập nhật giá trị newTag trong các file kustomization.yaml (repo manifest GitHub) để phản ánh phiên bản image mới nhất. 

12.Pull K8S Manifest File (Kéo tệp Manifest Kubernetes): ArgoCD lấy các tệp manifest đã được cập nhật từ repo để chuẩn bị triển khai. 

13.Deploy on Kubernetes: Jenkins sử dụng ArgoCD để áp dụng cấu hình và triển khai ứng dụng lên cụm Kubernetes (bao gồm môi trường Development và Production). Kubeadm được sử dụng để quản lý và vận hành cụm Kubernetes này. 

14.Send Gmail (Gửi email thông báo – Biểu tượng Gmail): Cuối cùng, Jenkins gửi email thông báo kết quả quá trình triển khai đến các bên liên quan, giúp cập nhật trạng thái thành công hoặc lỗi trong pipeline. 

Mô hình cho hệ thống ứng dụng web

image 218

HIỆN THỰC HỆ THỐNG

Kết quả sau khi triển khai Kubernetes lên 2 instance

image 219

Backend: hospital-booking-project/backend/Jenkinsfile at main ·Thanh8804/hospital-booking-project
Frontend: hospital-booking-project/frontend/Jenkinsfile at main ·Thanh8804/hospital-booking-project

THỰC NGHIỆM, ĐÁNH GIÁ, VÀ BÀN LUẬN

image 221
image 222
image 223
image 224

Đánh giá hệ thống 

Sau khi triển khai hệ thống và tiến hành các thực nghiệm thực tế, nhóm em tiến hành đánh giá tổng thể dựa trên một số tiêu chí chính như sau: 

1. Tính tự động hóa Hệ thống CI/CD hoạt động hoàn toàn tự động từ khi lập trình viên thực hiện push code cho đến khi ứng dụng được triển khai lên cụm Kubernetes. Việc này giúp giảm thiểu thao tác thủ công, hạn chế sai sót con người, đồng thời rút ngắn thời gian triển khai. 

2. Tính nhất quán và kiểm soát phiên bản Pipeline cập nhật tự động phiên bản (tag) của Docker image vào file manifest được quản lý bằng Git. Điều này đảm bảo rằng môi trường triển khai luôn phản ánh đúng trạng thái mới nhất của mã nguồn, giúp dễ dàng kiểm soát và rollback khi cần thiết. 

3. Kiểm thử và đảm bảo chất lượng mã nguồn 68 SonarQube được tích hợp để phân tích mã nguồn theo thời gian thực, giúp phát hiện các vấn đề về code smell, độ bao phủ kiểm thử và lỗi logic trước khi đưa vào triển khai. Việc kiểm thử sớm giúp giảm chi phí sửa lỗi về sau và nâng cao độ tin cậy của hệ thống. 

4. Bảo mật tích hợp sớm Việc tích hợp Trivy vào cả giai đoạn quét mã nguồn và Docker image giúp phát hiện các lỗ hổng bảo mật ngay trong quá trình phát triển. Điều này đảm bảo ứng dụng an toàn ngay từ giai đoạn đầu. 

5. Triển khai ổn định và mở rộng linh hoạt ArgoCD giúp đồng bộ trạng thái triển khai giữa Git và Kubernetes, đảm bảo việc triển khai diễn ra ổn định và có thể nhân rộng dễ dàng cho nhiều môi trường khác nhau (development, production). Mô hình GitOps cũng góp phần giảm thiểu rủi ro khi triển khai. 

6. Khả năng giám sát và phản hồi Hệ thống đã hỗ trợ gửi email thông báo sau mỗi lần triển khai. Tính năng này giúp nhóm phát hiện nhanh các lỗi phát sinh và đưa ra phản hồi kịp thời.

KẾT LUẬN & HƯỚNG PHÁT TRIỂN

Kết luận 

Sau quá trình nghiên cứu và triển khai, nhóm đã xây dựng thành công một hệ thống CI/CD hoàn chỉnh cho ứng dụng web gồm hai thành phần frontend và backend. Hệ thống tích hợp nhiều công cụ phổ biến như Jenkins, SonarQube, Trivy, Kaniko, ArgoCD…, cho phép tự động hóa toàn bộ quy trình kiểm thử, kiểm tra chất lượng mã nguồn, đóng gói ứng dụng, cập nhật cấu hình và triển khai lên Kubernetes. 

Điểm nổi bật của hệ thống là khả năng triển khai nhanh chóng, nhất quán và có kiểm soát thông qua pipeline, giảm thiểu rủi ro so với phương pháp triển khai thủ công. Việc áp dụng GitOps kết hợp với Kustomize và ArgoCD giúp đảm bảo rằng mọi thay đổi đều được quản lý chặt chẽ trong Git và phản ánh chính xác lên môi trường triển khai. 

Kết quả cuối cùng là hệ thống đã có thể tự động hóa hoàn toàn quá trình triển khai và cập nhật ứng dụng web, với frontend và backend đều hoạt động ổn định trên Kubernetes cluster. 

Dù còn một số tính năng chưa thể tích hợp do giới hạn thời gian và tài nguyên, nhóm đã hoàn thành tốt mục tiêu đề ra: hiểu rõ và áp dụng thành công quy trình triển khai hiện đại, sát với thực tế doanh nghiệp. Đây là kinh nghiệm giá trị, góp phần nâng cao hiểu biết và kỹ năng thực hành triển khai phần mềm theo hướng DevOps. 

Hướng phát triển 

• Ứng dụng trí tuệ nhân tạo (AI): Tích hợp chatbot tư vấn sơ bộ, đề xuất thời gian khám phù hợp dựa trên lịch sử và hành vi người dùng. 

• Mở rộng hệ thống giám sát và cảnh báo: Tích hợp công cụ như Prometheus, Grafana để theo dõi hiệu năng hệ thống, giúp phát hiện và xử lý sự cố nhanh chóng khi triển khai thực tế. 

• Phát triển mobile app: Xây dựng ứng dụng di động để hỗ trợ người dùng đặt lịch khám, nhận thông báo và tra cứu thông tin thuận tiện hơn. 

• Tích hợp thanh toán trực tuyến: Bổ sung các cổng thanh toán như VNPAY, Momo hoặc Stripe, giúp người dùng thanh toán phí khám trực tiếp trong quá trình đặt lịch.