Quay lại

An Toàn và Hiệu Suất Cao cho Web App với Azure Application Gateway (ALB) và Server Private Chuyên mục Devops    2025-07-06    1 Lượt xem    1 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Chào các bạn,

Ở bài viết trước, chúng ta đã cùng nhau đặt nền móng với Azure Virtual Network (VNet) và các Subnet riêng biệt. Hôm nay, chúng ta sẽ đưa kiến trúc đó lên một tầm cao mới về bảo mật và hiệu suất bằng cách tích hợp Azure Application Gateway (ALB) để định tuyến lưu lượng truy cập web vào các máy chủ (VM) nằm trong Private Subnet của chúng ta.

Đây là một kịch bản rất phổ biến và quan trọng trong môi trường doanh nghiệp, giúp ứng dụng của bạn an toàn hơn bằng cách ẩn các máy chủ backend khỏi Internet công cộng.

Azure Application Gateway (ALB) là gì và Tại sao lại cần?

Azure Application Gateway là một dịch vụ cân bằng tải (load balancer) hoạt động ở lớp ứng dụng (Layer 7), tức là nó hiểu và xử lý lưu lượng HTTP/HTTPS. Khác với các bộ cân bằng tải lớp 4 truyền thống (như Azure Load Balancer tiêu chuẩn) chỉ phân phối lưu lượng dựa trên IP và cổng, Application Gateway có thể định tuyến dựa trên nhiều yếu tố phức tạp hơn như URL, tiêu đề Host, hoặc các thuộc tính phiên (session affinity).

Những lợi ích cốt lõi khi sử dụng Application Gateway:

  1. Tăng cường bảo mật (Web Application Firewall - WAF): Một trong những tính năng mạnh mẽ nhất của Application Gateway là khả năng tích hợp WAF. WAF bảo vệ ứng dụng web của bạn khỏi các lỗ hổng và cuộc tấn công web phổ biến được liệt kê trong danh sách OWASP Top 10 (như SQL Injection, Cross-Site Scripting).

  2. Giấu địa chỉ IP của Backend Servers: Application Gateway đóng vai trò là điểm truy cập công cộng duy nhất. Các máy chủ web thực tế (backend servers) của bạn có thể nằm trong các Subnet Private, không có Public IP, giúp giảm thiểu bề mặt tấn công và tăng cường an ninh.

  3. Cân bằng tải thông minh: Phân phối yêu cầu đến nhiều máy chủ backend để tối ưu hóa hiệu suất, đảm bảo khả năng mở rộng và chịu lỗi cho ứng dụng của bạn.

  4. SSL/TLS Termination: Application Gateway có thể xử lý việc giải mã SSL/TLS, giảm tải CPU cho các máy chủ backend và giúp việc quản lý chứng chỉ trở nên tập trung, dễ dàng hơn.

  5. Định tuyến nâng cao: Hỗ trợ định tuyến dựa trên đường dẫn URL (Path-based routing) hoặc định tuyến nhiều tên miền (Multi-site hosting), cho phép bạn phục vụ nhiều trang web hoặc các thành phần ứng dụng khác nhau từ cùng một Application Gateway.

  6. Health Probes: Liên tục kiểm tra tình trạng của các máy chủ backend để đảm bảo chỉ gửi lưu lượng đến các máy chủ đang hoạt động bình thường.

Kiến Trúc Mạng của Chúng Ta với Application Gateway

Để hiểu rõ hơn, hãy nhìn vào kiến trúc chúng ta sẽ xây dựng:

  • Azure Virtual Network (VNet): Mạng chính của chúng ta.

  • Application Gateway Subnet (Mới): Một Subnet riêng biệt dành riêng cho Application Gateway.

  • Public IP của Application Gateway: Đây sẽ là địa chỉ IP công cộng duy nhất mà người dùng truy cập vào ứng dụng của bạn.

  • Private Subnet: Chứa các máy chủ web (Virtual Machines) của bạn. Quan trọng là các VM này KHÔNG CÓ Public IP.

  • NAT Gateway: Cung cấp kết nối Internet outbound cho Private Subnet, giúp các Private VM có thể tải cập nhật hoặc giao tiếp với các dịch vụ bên ngoài một cách an toàn.

Lưu lượng truy cập sẽ đi từ Internet -> Public IP của Application Gateway -> Application Gateway Subnet -> Application Gateway xử lý và định tuyến -> Private Subnet -> Web Server (Private VM).

Chuẩn Bị Trước Khi Thực Hành

Để quá trình thực hành diễn ra suôn sẻ, hãy đảm bảo bạn đã có các thành phần sau:

  1. Một Azure Virtual Network (VNet) đã được tạo (ví dụ: my-application-vnet).

  2. Một Private Subnet trong VNet đó (ví dụ: PrivateSubnet với dải IP 10.0.2.0/24).

  3. Ít nhất một Virtual Machine (VM) chạy Linux (ví dụ: liveapp-prod-pr) trong PrivateSubnet.

  4. Trên PrivateVM này, bạn đã cài đặt và cấu hình một web server đơn giản (như Apache2 hoặc Nginx) và đảm bảo nó đang lắng nghe trên cổng 80 (hoặc 443 nếu bạn dùng HTTPS).

    • Hướng dẫn cài Apache trên Ubuntu VM:

      sudo apt update
      sudo apt install -y apache2
      sudo systemctl enable apache2
      sudo systemctl start apache2
      echo "<h1>Hello from PrivateVM $(hostname)! Welcome to Azure App Gateway!</h1>" | sudo tee /var/www/html/index.html
    • Nếu bạn có nhiều Private VM, hãy thay đổi nội dung index.html trên mỗi VM để dễ phân biệt khi kiểm tra cân bằng tải.

  5. Một Network Security Group (NSG) đã được liên kết với NIC của PrivateVM (ví dụ: liveapp-prod-pr-nsg).

Các Bước Thực Hành: Triển Khai và Cấu Hình Application Gateway

Bước 1: Tạo Subnet cho Application Gateway

Application Gateway cần một subnet riêng biệt. Nó không nên chứa bất kỳ tài nguyên nào khác ngoài Application Gateway.

  1. Đăng nhập vào Azure Portal.

  2. Tìm kiếm và vào "Virtual networks", chọn VNet của bạn (ví dụ: my-application-vnet).

  3. Trong menu bên trái, dưới phần Settings, chọn Subnets.

  4. Nhấn vào nút + Subnet.

    • Name: Đặt tên là AppGatewaySubnet.

    • Address range (CIDR block): Chọn một dải IP không trùng với các subnet hiện có và đủ lớn (tối thiểu /27 nhưng /24 được khuyến nghị). Ví dụ: nếu VNet của bạn là 10.0.0.0/16, bạn có thể đặt 10.0.5.0/24.

    • Để mặc định các tùy chọn khác.

    • Nhấn Save.

Bước 2: Tạo Azure Application Gateway (ALB)

  1. Trên thanh tìm kiếm ở đầu Portal, gõ "Application Gateways" và chọn kết quả.

  2. Nhấn vào nút + Create.

  3. Tab Basics (Cơ bản):

    • Subscription: Chọn gói đăng ký Azure của bạn.

    • Resource Group: Chọn Resource Group của VNet của bạn (ví dụ: my-application-rg).

    • Application gateway name: Đặt tên (ví dụ: my-web-app-gateway).

    • Region: Chọn cùng Region với VNet của bạn.

    • Tier: Rất quan trọng! Chọn Standard V2 (phiên bản này cung cấp nhiều tính năng hơn, hiệu suất tốt hơn và hỗ trợ các Service Tag cần thiết).

    • Enable autoscaling: Chọn Yes (khuyên dùng cho V2).

    • Minimum scale units: 0 (hoặc 1 để luôn có ít nhất 1 instance).

    • Maximum scale units: Ví dụ 10.

    • HTTP2: Enabled.

  4. Tab Frontends (Giao diện người dùng):

    • Frontend IP address type: Chọn Public.

    • Public IP address: Chọn Add new và đặt tên cho Public IP (ví dụ: my-app-gateway-public-ip).

    • Lưu ý: Nếu bạn gặp lỗi vượt quá quota Public IP Address, hãy tham khảo bài viết trước để tăng quota hoặc giải phóng IP.

  5. Tab Backends (Máy chủ backend):

    • Backend pools: Nhấn Add a backend pool.

      • Name: my-web-servers-pool (tên nhóm máy chủ web của bạn).

      • Add backend pool without targets: Chọn No.

      • Target type: Chọn Virtual machine.

      • Target: Chọn PrivateVM của bạn (ví dụ: liveapp-prod-pr, và bất kỳ Private VM nào khác nếu bạn có).

      • Nhấn Add.

  6. Tab Configuration (Cấu hình): Đây là nơi định nghĩa cách Gateway lắng nghe yêu cầu và chuyển tiếp chúng.

    • Routing rules: Nhấn Add a routing rule.

      • Rule name: http-routing-rule

      • Listener (Người lắng nghe):

        • Listener name: http-listener

        • Frontend IP: Chọn Public.

        • Protocol: HTTP (Nếu bạn có chứng chỉ SSL, bạn có thể chọn HTTPS và tải chứng chỉ lên để kích hoạt SSL/TLS Termination).

        • Port: 80

        • Listener type: Basic

        • Nhấn Add.

      • Backend targets (Mục tiêu backend):

        • Target type: Chọn Backend pool.

        • Backend target: Chọn my-web-servers-pool (pool bạn vừa tạo).

        • HTTP settings: Nhấn Add new.

          • HTTP setting name: http-backend-settings

          • Backend protocol: HTTP

          • Backend port: 80 (Cổng mà web server trên PrivateVM đang lắng nghe).

          • Để mặc định các tùy chọn khác (Health probes).

          • Nhấn Add.

        • Nhấn Add (để tạo Routing rule).

  7. Tab Tags (Thẻ): Thêm các thẻ nếu cần.

  8. Tab Review + create (Xem xét + tạo):

    • Kiểm tra lại tất cả các cấu hình.

    • Nhấn Create.

Quá trình triển khai Application Gateway có thể mất từ 5-15 phút.

Bước 3: Cấu hình Network Security Group (NSG) cho Private Server

Đây là bước cực kỳ quan trọng để cho phép Application Gateway truyền lưu lượng vào các máy chủ private của bạn. Chúng ta sẽ thêm một quy tắc Inbound trong NSG đang liên kết với NIC của Private VM.

  1. Xác định NSG của Private VM:

    • Vào Azure Portal, tìm và chọn Virtual machines.

    • Chọn liveapp-prod-pr (Private VM của bạn).

    • Trong menu bên trái, dưới phần Settings, chọn Networking.

    • Trong phần Network settings, tìm Network security group và tên của nó (ví dụ: liveapp-prod-pr-nsg). Nhấn vào tên NSG này để mở cấu hình của nó.

  2. Thêm quy tắc Inbound:

    • Trong trang cấu hình của NSG (liveapp-prod-pr-nsg), trong menu bên trái, chọn Inbound security rules.

    • Nhấn vào nút + Add.

    • Cấu hình quy tắc như sau:

      • Source: Chọn IP Addresses.

      • Source IP addresses/CIDR ranges: Nhập dải IP CIDR của AppGatewaySubnet của bạn. Ví dụ: 10.0.5.0/24.

      • Source port ranges: *

      • Destination: Any

      • Destination port ranges: 80 (hoặc cổng mà web server trên PrivateVM của bạn đang lắng nghe).

      • Protocol: TCP

      • Action: Allow

      • Priority: Đặt một số ưu tiên cao (số nhỏ hơn 65000 và không bị các quy tắc Deny khác ghi đè), ví dụ: 200.

      • Name: Allow_AppGateway_Subnet_Inbound

    • Nhấn Add.

Bước 4: Kiểm Tra và Xác Nhận

Sau khi Application Gateway được triển khai và NSG đã được cập nhật:

  1. Tìm IP công cộng của Application Gateway:

    • Vào Application Gateways, chọn Application Gateway bạn vừa tạo (my-web-app-gateway).

    • Trong trang tổng quan, bạn sẽ thấy Frontend Public IP address. Sao chép địa chỉ này.

  2. Truy cập bằng trình duyệt:

    • Mở trình duyệt web của bạn và dán địa chỉ IP công cộng của Application Gateway vào thanh địa chỉ.

    • Kết quả mong đợi: Bạn sẽ thấy nội dung của trang web Apache (Hello from PrivateVM <hostname>! Welcome to Azure App Gateway!) từ PrivateVM của bạn.

Nếu bạn có nhiều PrivateVM làm backend:

  • Khi bạn làm mới trình duyệt nhiều lần, bạn sẽ thấy nội dung có thể thay đổi giữa các PrivateVM (nếu bạn đã cấu hình nội dung index.html khác nhau trên mỗi VM), chứng tỏ Application Gateway đang cân bằng tải thành công.

Những Lưu Ý Quan Trọng Trong Quá Trình Thực Hành

  • Đồng bộ Region: Đảm bảo tất cả các tài nguyên (VNet, Subnets, VM, NSG, Application Gateway) đều nằm trong cùng một Region.

  • SKU của Application Gateway: Luôn chọn Standard V2 cho Application Gateway trong môi trường thực tế để tận dụng các tính năng cao cấp và hiệu suất tối ưu.

  • Public IP Quota: Azure có giới hạn mặc định về số lượng Public IP Address. Nếu bạn gặp lỗi về quota, hãy yêu cầu tăng giới hạn qua Support Ticket hoặc giải phóng các Public IP không sử dụng.

  • NSG Chính Xác: Luôn xác định và cấu hình NSG đang thực sự kiểm soát lưu lượng truy cập của VM hoặc subnet mục tiêu. Trong trường hợp của chúng ta là NSG liên kết với NIC của PrivateVM (liveapp-prod-pr-nsg).

  • Cổng lắng nghe (Ports): Đảm bảo Destination port ranges trong quy tắc NSG Inbound khớp với cổng mà web server của bạn trên Private VM đang lắng nghe (thường là 80 cho HTTP, 443 cho HTTPS).

  • Health Probes: Nếu ứng dụng của bạn không hiển thị, hãy kiểm tra phần Backend health trong Application Gateway của bạn. Nếu các backend là Unhealthy, có thể do lỗi cấu hình NSG, lỗi web server trên VM, hoặc cấu hình Health Probe không chính xác.

Lời Kết

Bạn đã thành công trong việc xây dựng một kiến trúc web an toàn và có khả năng mở rộng trên Azure! Bằng cách sử dụng Azure Application Gateway, bạn không chỉ cân bằng tải mà còn bảo vệ các máy chủ backend của mình trong một Private Subnet, giảm thiểu rủi ro bảo mật và tối ưu hóa tài nguyên.

Kiến thức này là nền tảng vững chắc để bạn tiếp tục xây dựng các ứng dụng phức tạp hơn trên nền tảng đám mây của Microsoft.

Hãy tiếp tục khám phá và xây dựng nhé!

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday