Quay lại

 

 

Application Load Balancer (v2)

  1. Application Load Balancer (ALB):

    • Application Load Balancer là một phiên bản mới hơn của load balancer trên AWS, được thiết kế để hoạt động ở tầng 7 của mô hình OSI, cụ thể là tầng ứng dụng (Application layer).
    • ALB cung cấp khả năng phân phối lưu lượng truy cập cho các ứng dụng HTTP và WebSocket, cho phép chuyển tiếp các yêu cầu HTTP giữa các máy chủ (target groups) hoặc các ứng dụng trên cùng một máy chủ.
  2. Load balancing to multiple HTTP applications across machines (target groups):

    • ALB cho phép phân phối lưu lượng truy cập HTTP đến nhiều ứng dụng trên nhiều máy chủ khác nhau thông qua các nhóm mục tiêu (target groups).
    • Điều này cho phép bạn cân bằng tải giữa các ứng dụng trên nhiều máy chủ để tối ưu hóa hiệu suất và sẵn sàng của hệ thống.
  3. Load balancing to multiple applications on the same machine (ví dụ: containers):

    • ALB cũng hỗ trợ phân phối lưu lượng truy cập đến nhiều ứng dụng trên cùng một máy chủ, bao gồm các ứng dụng chạy trong các container.
    • Điều này giúp tối ưu hóa việc sử dụng tài nguyên trên một máy chủ bằng cách chia sẻ lưu lượng truy cập giữa các ứng dụng khác nhau.
  4. Support for HTTP/2 and WebSocket:

    • ALB hỗ trợ giao thức HTTP/2, cho phép việc chuyển tiếp lưu lượng truy cập sử dụng phiên bản giao thức hiện đại và tối ưu hóa hiệu suất trang web.
    • Ngoài ra, ALB cũng hỗ trợ WebSocket, cho phép thiết lập kết nối hai chiều giữa máy khách và máy chủ, thích hợp cho các ứng dụng real-time và trò chơi trực tuyến.
  5. Support redirects (from HTTP to HTTPS for example):

    • ALB cung cấp khả năng chuyển hướng lưu lượng từ giao thức HTTP sang HTTPS hoặc các URL khác, giúp tăng cường bảo mật và cải thiện trải nghiệm người dùng.
  6. Routing tables to different target groups (Bảng định tuyến đến các nhóm mục tiêu khác nhau):
    • Routing based on path in URL (Định tuyến dựa trên đường dẫn trong URL):

      • Bằng cách sử dụng ALB, bạn có thể định tuyến lưu lượng truy cập dựa trên đường dẫn trong URL của yêu cầu, cho phép bạn phân phối lưu lượng giữa các ứng dụng hoặc dịch vụ khác nhau trên cùng một máy chủ.
      • VD: example.com/users & example.com/posts
    • Routing based on hostname in URL (Định tuyến dựa trên tên miền trong URL):

      • ALB cũng hỗ trợ định tuyến dựa trên tên miền trong URL, cho phép bạn phân phối lưu lượng truy cập đến các ứng dụng hoặc dịch vụ khác nhau dựa trên tên miền của yêu cầu.
      • VD: one.example.com & other.example.com
    • Routing based on Query String, Headers (Định tuyến dựa trên Query String, Headers):

      • ALB cho phép bạn định tuyến lưu lượng truy cập dựa trên các thông tin trong chuỗi truy vấn (Query String) hoặc các tiêu đề (Headers) của yêu cầu, mở ra khả năng định tuyến linh hoạt dựa trên các thông tin khác nhau của yêu cầu.
      • VD: example.com/users?id=123&order=false
  7. ALB are a great fit for microservices & container-based applications (ALB là lựa chọn tốt cho các ứng dụng dịch vụ nhỏ & dựa trên container):

    • Với khả năng định tuyến linh hoạt và hỗ trợ cho các tính năng như định tuyến dựa trên đường dẫn URL và tên miền, ALB là lựa chọn lý tưởng cho các ứng dụng dịch vụ nhỏ và các ứng dụng dựa trên container như Docker và Amazon ECS.
  8. Has a port mapping feature to redirect to a dynamic port in ECS (Có tính năng ánh xạ cổng để chuyển hướng đến một cổng động trong ECS):

    • ALB cung cấp tính năng ánh xạ cổng, cho phép bạn chuyển hướng lưu lượng truy cập đến các cổng động được định cấu hình trong Amazon ECS, giúp tối ưu hóa việc triển khai và quản lý ứng dụng dựa trên container.
  9. In comparison, we’d need multiple Classic Load Balancers per application (So sánh với Classic Load Balancer, chúng ta sẽ cần nhiều Classic Load Balancer cho mỗi ứng dụng):

    • Trong khi ALB cho phép bạn định tuyến lưu lượng truy cập dựa trên nhiều tiêu chí khác nhau trong một load balancer duy nhất, sử dụng Classic Load Balancer có thể đòi hỏi bạn cần nhiều load balancer cổ điển cho mỗi ứng dụng để đạt được cùng một mức độ linh hoạt và chức năng.

Application Load Balancer (v2) HTTP Based Traffic

Application Load Balancer (v2) Target Groups

Trong hệ thống của Application Load Balancer (ALB) trên Amazon Web Services (AWS), Target Groups là một khái niệm quan trọng đóng vai trò trong việc định tuyến lưu lượng truy cập đến các mục tiêu cụ thể. Một Target Group là một nhóm các đích mục tiêu (targets) có thể là các EC2 instances, ECS tasks, Lambda functions hoặc các địa chỉ IP. ALB sử dụng Target Groups để quyết định cách định tuyến lưu lượng truy cập, dựa trên các nguyên tắc cấu hình được xác định cho từng Target Group.

Cụ thể, mỗi Target Group định nghĩa một tập hợp các mục tiêu mà ALB sẽ chuyển tiếp lưu lượng truy cập đến. Khi một yêu cầu đến, ALB sẽ kiểm tra các quy tắc định tuyến được cấu hình và chuyển hướng yêu cầu đó đến một trong các mục tiêu trong Target Group tương ứng.

  1. EC2 instances (có thể được quản lý bởi một Auto Scaling Group) – HTTP:

    • Đây là một loại Target Group cho phép ALB chuyển tiếp lưu lượng truy cập HTTP đến các máy ảo EC2 trên AWS. Các EC2 instances có thể được quản lý tự động bởi một nhóm tự động mở rộng (Auto Scaling Group), giúp tự động điều chỉnh số lượng máy ảo EC2 dựa trên tải công việc.
  2. ECS tasks (được quản lý bởi ECS chính mình) – HTTP:

    • Đây là một loại Target Group cho phép ALB chuyển tiếp lưu lượng truy cập HTTP đến các nhiệm vụ ECS (Elastic Container Service) trên AWS. Các nhiệm vụ ECS được quản lý bởi chính dịch vụ ECS, giúp tự động triển khai và quản lý các container dựa trên Docker.
  3. Lambda functions – yêu cầu HTTP được chuyển đổi thành sự kiện JSON:

    • Đây là một loại Target Group cho phép ALB chuyển tiếp lưu lượng truy cập HTTP đến các hàm Lambda trên AWS. Trong trường hợp này, yêu cầu HTTP được chuyển đổi thành một sự kiện JSON trước khi được chuyển tiếp đến hàm Lambda tương ứng để xử lý.
  4. IP Addresses – phải là địa chỉ IP riêng (private IPs):

    • Đây là một loại Target Group cho phép ALB chuyển tiếp lưu lượng truy cập đến các địa chỉ IP cụ thể. Tuy nhiên, các địa chỉ IP này phải là địa chỉ IP riêng tư, không được phép là địa chỉ IP công cộng.
  5. ALB có thể định tuyến đến nhiều nhóm mục tiêu:

    • ALB cho phép định tuyến lưu lượng truy cập đến nhiều Target Groups khác nhau. Điều này cho phép bạn phân phối lưu lượng truy cập theo các nguồn và mục tiêu khác nhau dựa trên nhu cầu của ứng dụng hoặc hệ thống của bạn.
  6. Check health ở mức nhóm mục tiêu:

    • ALB thực hiện Check health của các mục tiêu trong từng Target Group để đảm bảo rằng chỉ những mục tiêu lành mạnh mới nhận được lưu lượng truy cập. Điều này giúp đảm bảo tính sẵn sàng và hiệu suất của ứng dụng hoặc dịch vụ được chuyển tiếp bởi ALB.
Loại Target Group Mô tả Mục Đích
Instances Định tuyến yêu cầu đến các máy ảo EC2 hoặc máy chủ ảo trong một nhóm EC2 (ví dụ: được quản lý bởi Auto Scaling Group). Sử dụng cho các ứng dụng chạy trên các máy ảo EC2 hoặc máy chủ ảo và cần phản ứng đối với các yêu cầu từ mạng hoặc internet.
IP addresses Địa chỉ IPv4 nội bộ (private IP) của các instance trong mạng nội bộ của VPC Sử dụng khi bạn cần định tuyến yêu cầu đến các máy chủ hoặc dịch vụ cụ thể thông qua địa chỉ IP thay vì máy ảo EC2 hoặc máy chủ ảo.
Lambda functions Định tuyến yêu cầu đến các hàm Lambda trong AWS Lambda. Sử dụng cho các ứng dụng sử dụng các hàm Lambda để xử lý các yêu cầu hoặc sự kiện và cần phản ứng đối với các yêu cầu từ mạng hoặc internet.
Application Load Balancer Định tuyến yêu cầu đến các máy ảo EC2, máy chủ hoặc hàm Lambda dựa trên các quy tắc định tuyến mạnh mẽ như đường dẫn URL, tiêu đề HTTP, phương thức HTTP, v.v. Mục đích: Sử dụng khi bạn muốn chuyển hướng yêu cầu đến một Application Load Balancer khác. Ví dụ: Khi bạn có nhiều cấp độ cân bằng tải hoặc muốn chuyển hướng yêu cầu từ một ứng dụng đến một ứng dụng khác.

VD: Lamda function

export const handler = async (event) => {
    // Lấy thông tin từ yêu cầu HTTP
    const { httpMethod, queryStringParameters } = event;

    
    // Lấy giá trị từ query string
    const name = queryStringParameters && queryStringParameters.name ? queryStringParameters.name : "World";
    
    // Tạo nội dung phản hồi dựa trên giá trị từ query string
    const responseBody = `Hello, ${name}! This message is from Lambda.`;
    
    // Tạo phản hồi HTTP
    const response = {
        statusCode: 200,
        body: JSON.stringify(responseBody), // Chuyển đổi dữ liệu sang chuỗi JSON
        headers: {
            "Content-Type": "application/json",
        },
    };
    
    return response;
};

Dưới đây là các thuộc tính của một User target group trong AWS:

Thuộc tính Mô tả
Target Group ARN Amazon Resource Name (ARN) của target group, là một định danh duy nhất cho target group trong AWS.
Target Group Name Tên của target group, được sử dụng để nhận dạng target group trong quản lý và cấu hình của bạn.
Protocol Giao thức mạng được sử dụng để truyền dữ liệu đến các instance trong target group, ví dụ: HTTP, HTTPS, TCP, v.v.
Port Cổng mạng trên các instance trong target group mà load balancer sẽ sử dụng để gửi dữ liệu đến, ví dụ: 80 cho HTTP, 443 cho HTTPS, hoặc cổng tuỳ chỉnh khác.
Target Type Loại của các mục tiêu trong target group, bao gồm các loại như instances (máy ảo EC2), IP addresses (địa chỉ IP), lambda (hàm Lambda), hoặc các loại khác.
Health Check Protocol Giao thức được sử dụng để thực hiện check health của các mục tiêu, ví dụ: HTTP, HTTPS, TCP, v.v.
Health Check Port Cổng được sử dụng cho check health của các mục tiêu, phải khớp với cổng mà ứng dụng của bạn đang lắng nghe để xác định trạng thái sức khỏe của các mục tiêu.
Health Check Path Đường dẫn URL hoặc endpoint mà health checker sẽ yêu cầu để check health của các mục tiêu, ví dụ: /health.
Protocol Version Phiên bản của giao thức được sử dụng trong target group, ví dụ: HTTP/1.1, HTTP/2.0, v.v.
Deregistration Delay Thời gian trễ trước khi một instance bị loại bỏ khỏi target group sau khi nó được đánh dấu là không hoạt động hoặc không lành mạnh.

Các thuộc tính này cung cấp thông tin cần thiết để cấu hình và quản lý target group trong môi trường AWS của bạn.

Application Load Balancer (v2) Query Strings/Parameters Routing

Add rule condition

Phần condition của Application Load Balancer (ALB) cho phép bạn định rõ các điều kiện để định tuyến lưu lượng truy cập đến các target group tương ứng. Dưới đây là chức năng của từng loại condition và một ví dụ minh họa:

  1. Path (Đường dẫn):

    • Chức năng: Định rõ các đường dẫn URL mà yêu cầu phải khớp để được định tuyến đến target group.
    • Ví dụ: Nếu bạn muốn định tuyến lưu lượng truy cập đến các API của ứng dụng của mình, bạn có thể cấu hình condition với đường dẫn "/api/*".
    • Lưu ý: khi chúng ta sử dụng path mà muốn Forward to new target group thì bất kỳ path được gửi tới ALB cũng phải là một đường dẫn hợp lệ trong ứng dụng của bạn.
  2. Host Header (Tiêu đề Host):

    • Chức năng: Định rõ tên miền hoặc tên máy chủ mà yêu cầu phải chứa trong tiêu đề Host để được định tuyến.
    • Ví dụ: Nếu bạn có nhiều ứng dụng chạy trên cùng một load balancer và mỗi ứng dụng được định tuyến dựa trên tên miền của nó, bạn có thể sử dụng host header để phân biệt chúng.
    • Giả sử bạn có hai ứng dụng web trên cùng một load balancer:

      1. Ứng dụng A: app-a.example.com
      2. Ứng dụng B: app-b.example.com

      Bạn muốn định tuyến các yêu cầu đến ứng dụng A nếu tiêu đề Host chứa app-a.example.com, và định tuyến các yêu cầu đến ứng dụng B nếu tiêu đề Host chứa app-b.example.com.

  3. HTTP Request Method (Phương thức yêu cầu HTTP):

    • Chức năng: Định rõ phương thức HTTP (GET, POST, PUT, DELETE, vv.) mà yêu cầu phải sử dụng để được định tuyến.
    • Ví dụ: Nếu bạn muốn định tuyến các yêu cầu POST đến một target group xử lý các yêu cầu ghi dữ liệu.
  4. Source IP (IP nguồn):

    • Chức năng: Định rõ phạm vi hoặc địa chỉ IP mà yêu cầu phải đến từ để được định tuyến.
    • Ví dụ: Bạn có thể cấu hình một condition để chặn hoặc định tuyến các yêu cầu từ một phạm vi địa chỉ IP cụ thể.
  5. HTTP Header (Tiêu đề HTTP):

    • Chức năng: Định rõ các giá trị của các tiêu đề HTTP cụ thể mà yêu cầu phải chứa để được định tuyến.
    • Ví dụ: Nếu bạn muốn định tuyến lưu lượng truy cập dựa trên giá trị của một tiêu đề HTTP như "User-Agent" để phân biệt giữa các loại trình duyệt hoặc thiết bị.
  6. Query String (Chuỗi truy vấn):

    • Chức năng: Định rõ các tham số trong chuỗi truy vấn của URL mà yêu cầu phải chứa để được định tuyến.
    • Ví dụ: Nếu bạn muốn định tuyến lưu lượng truy cập dựa trên các tham số như "category" hoặc "id" trong URL.

Priority trong Rule

Khi một yêu cầu đến, ELB sẽ kiểm tra từng quy tắc theo thứ tự tăng dần của ưu tiên. Quy tắc đầu tiên mà yêu cầu khớp với sẽ được áp dụng, và các quy tắc có ưu tiên thấp hơn sẽ không được xem xét.

Ví dụ, nếu có ba quy tắc:

  1. Quy tắc A với Priority là 1.
  2. Quy tắc B với Priority là 2.
  3. Quy tắc C với Priority là 3.

Khi một yêu cầu đến, ELB sẽ kiểm tra quy tắc A trước, sau đó là quy tắc B, và sau cùng là quy tắc C. Yêu cầu sẽ được áp dụng theo quy tắc đầu tiên mà nó khớp với.

Sticky Sessions (Session Affinity)

  1. Sticky Sessions (Session Affinity): Đây là khả năng thực hiện tính liên tục (sticky sessions) để đảm bảo rằng cùng một client luôn được chuyển hướng đến cùng một instance ở phía sau một load balancer. Điều này có nghĩa là một client khi truy cập ứng dụng sẽ luôn được định tuyến đến cùng một instance, giúp duy trì trạng thái của phiên làm việc.

  2. Khả năng triển khai Sticky Sessions trên ALB: Sticky sessions có thể triển khai trên cả Classic Load Balancer (CLB) và Application Load Balancer (ALB), cũng như Network Load Balancer (NLB). Trong trường hợp của ALB, cookie được sử dụng để duy trì tính liên tục có thể được cấu hình với một ngày hết hạn mà bạn có thể kiểm soát.

  3. Trường hợp sử dụng Sticky Sessions: Sticky sessions thường được sử dụng khi cần đảm bảo rằng người dùng không mất dữ liệu phiên khi họ tương tác với ứng dụng. Ví dụ, nếu một người dùng đang đăng nhập vào một ứng dụng web và chuyển từ trang này sang trang khác, sticky sessions sẽ đảm bảo rằng họ vẫn giữ phiên làm việc của mình, tránh việc họ phải đăng nhập lại.

  4. Cảnh báo về sự mất cân bằng trong tải khi kích hoạt Sticky Sessions: Mặc dù sticky sessions có thể giải quyết vấn đề mất dữ liệu phiên, nhưng cũng có thể gây ra sự mất cân bằng trong tải trên các instance phía sau load balancer. Điều này có thể xảy ra khi một số instance nhận nhiều yêu cầu hơn so với các instance khác do việc định tuyến sticky sessions. Do đó, cần cân nhắc kỹ lưỡng khi kích hoạt sticky sessions để đảm bảo cân bằng tải cân đối và hiệu suất cao cho ứng dụng.

Sticky Sessions – Cookie Names

  1. Application-based Cookies:
    • Custom cookie: Đây là các cookie được tạo ra bởi ứng dụng và được sử dụng để duy trì tính liên tục (sticky sessions). Các cookie này có thể bao gồm bất kỳ thuộc tính tùy chỉnh nào cần thiết cho ứng dụng. Tên cookie phải được chỉ định riêng cho mỗi nhóm mục tiêu và không nên sử dụng các tên như AWSALB, AWSALBAPP, hoặc AWSALBTG vì chúng đã được dành riêng cho sử dụng bởi ELB.
    • Application cookie: Đây là các cookie được tạo ra bởi load balancer để duy trì tính liên tục. Tên cookie là AWSALBAPP và chúng được tạo ra bởi load balancer.
  2. Duration-based Cookies:
    • Stickiness duration trên ALB: Điều này chỉ định thời gian mà load balancer sẽ duy trì một kết nối stickiness (dựa trên cookie hoặc IP) và tiếp tục chuyển hướng các yêu cầu từ cùng một người dùng đến cùng một máy chủ. Stickiness duration này được cấu hình trên ALB.

Cross-Zone Load Balancing

  • Với Cross-Zone Load Balancing: Mỗi phiên bản của load balancer phân phối đồng đều các requests trên tất cả các instance đăng ký trong tất cả các Availability Zone (AZ).
  • Không có Cross-Zone Load Balancing: Các requests chỉ được phân phối trong các instance của nút của Elastic Load Balancer (ELB) trong cùng một AZ.

Ví dụ: Giả sử bạn có một ứng dụng web chạy trên ba instance EC2 ở ba AZ khác nhau. Nếu bạn kích hoạt tính năng Cross-Zone Load Balancing, thì mỗi phiên bản của load balancer sẽ phân phối yêu cầu đến tất cả các instance trong tất cả các AZ, giúp cân bằng tải một cách hiệu quả trên toàn hệ thống. Ngược lại, nếu bạn không kích hoạt tính năng này, mỗi load balancer chỉ sẽ chuyển tiếp yêu cầu đến các instance trong cùng một AZ của chính nó, dẫn đến sự phân bổ không cân bằng và có thể gây ra tình trạng quá tải trong một AZ nhất định.

Price:

  1. Cross-Zone Load Balancing:

    • Application Load Balancer: Tính năng này được kích hoạt mặc định và có thể được vô hiệu hóa tại cấp độ Target Group.
    • Không tính phí cho dữ liệu qua các AZ: Không có phí cho việc truyền dữ liệu giữa các Availability Zone (AZ).
  2. Network Load Balancer & Gateway Load Balancer:

    • Mặc định không được kích hoạt: Tính năng này bị vô hiệu hóa mặc định trên Network Load Balancer và Gateway Load Balancer.
    • Chi phí cho dữ liệu qua các AZ nếu được kích hoạt: Nếu kích hoạt, bạn sẽ phải trả phí ($) cho dữ liệu đi qua các AZ.
  3. Classic Load Balancer:

    • Mặc định không được kích hoạt: Tính năng này không được kích hoạt mặc định trên Classic Load Balancer.
    • Không tính phí cho dữ liệu qua các AZ nếu được kích hoạt: Nếu được kích hoạt, không có phí cho việc truyền dữ liệu giữa các AZ.

Connection Draining

  • Tên tính năng:
    • Được gọi là "Deregistration Delay" trên ALB và NLB,
    • trong khi trên Classic Load Balancer (CLB) thì được gọi là "Connection Draining".
  • Thời gian để hoàn tất các "yêu cầu đang thực thi" trong khi instance đang bị hủy đăng ký hoặc không lành mạnh: Khi một instance EC2 được đánh dấu để hủy đăng ký hoặc không lành mạnh, thời gian này quy định khoảng thời gian mà load balancer vẫn tiếp tục chấp nhận và hoàn thành các yêu cầu đã được gửi tới instance đó trước khi ngừng gửi yêu cầu mới.
  • Dừng gửi yêu cầu mới đến instance đang bị hủy đăng ký: Sau khi thời gian đợi này kết thúc, load balancer sẽ ngừng gửi yêu cầu mới đến instance đang bị hủy đăng ký hoặc không lành mạnh.
  • Giá trị từ 1 đến 3600 giây: Thời gian đợi có thể được đặt từ 1 đến 3600 giây, với giá trị mặc định là 300 giây.
  • Có thể vô hiệu hóa: Tính năng này có thể được vô hiệu hóa bằng cách đặt giá trị là 0.
  • Đặt giá trị thấp nếu các yêu cầu của bạn ngắn: Nếu yêu cầu của bạn là ngắn, bạn nên đặt thời gian đợi là một giá trị thấp để giảm thiểu thời gian mà instance vẫn đang xử lý yêu cầu sau khi bị hủy đăng ký.

SSL/TLS - Basics

  • Chứng chỉ SSL cho phép dữ liệu giữa khách hàng của bạn và load balancer của bạn được mã hóa khi truyền (mã hóa trong suốt quá trình truyền)
  • SSL (Secure Sockets Layer): Được sử dụng để mã hóa kết nối giữa máy khách và máy chủ.
  • TLS (Transport Layer Security): Là phiên bản mới hơn của SSL, được sử dụng để tăng cường bảo mật trong truyền dữ liệu.
  • Ngày nay, chủ yếu sử dụng các chứng chỉ TLS, nhưng mọi người vẫn thường sử dụng là SSL.
  • Public SSL certificates được cấp bởi các Cơ quan Cấp chứng chỉ (CA) như Comodo, Symantec, GoDaddy, GlobalSign, Digicert, Letsencrypt, vv.
  • SSL certificates có một ngày hết hạn mà bạn tự đặt và phải được gia hạn định kỳ.

Load Balancer - SSL Certificates

  • Load balancer sử dụng một chứng chỉ X.509 (chứng chỉ máy chủ SSL/TLS): Đây là chứng chỉ được sử dụng để bảo mật kết nối giữa máy khách và load balancer.
  • Quản lý chứng chỉ bằng ACM (AWS Certificate Manager): Bạn có thể quản lý các chứng chỉ SSL/TLS của mình bằng cách sử dụng dịch vụ AWS Certificate Manager (ACM).
  • Có thể tải lên chứng chỉ của riêng bạn: Ngoài việc sử dụng ACM, bạn cũng có thể tải lên các chứng chỉ SSL/TLS tự đặt của mình lên load balancer.
  • Listener HTTPS:
    • Phải chỉ định một chứng chỉ mặc định: Khi cấu hình một listener HTTPS, bạn phải chỉ định một chứng chỉ mặc định để sử dụng cho các kết nối đến.
    • Có thể thêm một danh sách tùy chọn của các chứng chỉ để hỗ trợ nhiều tên miền: Bạn có thể thêm một danh sách tùy chọn các chứng chỉ để hỗ trợ nhiều tên miền khác nhau.
    • Khách hàng có thể sử dụng SNI (Server Name Indication) để chỉ định tên máy chủ mà họ muốn truy cập.
    • Có khả năng chỉ định một chính sách bảo mật để hỗ trợ các phiên bản cũ của SSL/TLS (các phiên bản cũ): Bạn có thể chỉ định một chính sách bảo mật để hỗ trợ các phiên bản cũ của SSL/TLS cho các máy khách sử dụng phiên bản cũ.

SSL – Server Name Indication (SNI)

  • Giải quyết vấn đề của việc tải nhiều chứng chỉ SSL lên một máy chủ web (để phục vụ nhiều trang web): SNI giải quyết vấn đề này bằng cách cho phép máy khách chỉ định tên máy chủ mục tiêu trong bản gửi đầu tiên của giao thức SSL.
  • Là một giao thức "mới hơn": SNI là một giao thức mới hơn, yêu cầu máy khách chỉ định tên máy chủ mục tiêu trong bản gửi SSL ban đầu.
  • Máy chủ sau đó sẽ tìm chứng chỉ chính xác hoặc trả về chứng chỉ mặc định: Dựa trên thông tin tên máy chủ được cung cấp bởi máy khách, máy chủ sẽ chọn chứng chỉ SSL phù hợp hoặc trả về chứng chỉ mặc định.

Lưu ý:

  • Chỉ hoạt động cho ALB & NLB (thế hệ mới hơn), CloudFront: SNI chỉ hoạt động cho các loại load balancer và dịch vụ CDN mới hơn của AWS như ALB, NLB và CloudFront.
  • Không hoạt động cho CLB (thế hệ cũ): SNI không hoạt động cho Classic Load Balancer (CLB), mà chỉ được hỗ trợ trên các loại load balancer mới hơn.

Elastic Load Balancers – SSL Certificates

  1. Classic Load Balancer (CLB) (v1):

    • Chỉ hỗ trợ một chứng chỉ SSL: Load Balancer cổ điển chỉ hỗ trợ một chứng chỉ SSL duy nhất trên mỗi listener.
    • Phải sử dụng nhiều CLB cho nhiều tên miền với nhiều chứng chỉ SSL khác nhau: Để hỗ trợ nhiều tên miền với nhiều chứng chỉ SSL khác nhau, bạn phải triển khai nhiều CLB với các cấu hình tương ứng.
  2. Application Load Balancer (ALB) (v2):

    • Hỗ trợ nhiều listeners với nhiều chứng chỉ SSL: ALB hỗ trợ cấu hình nhiều listeners, mỗi listener có thể có một chứng chỉ SSL riêng.
    • Sử dụng Server Name Indication (SNI) để hoạt động: ALB sử dụng SNI để cho phép các listeners xác định chứng chỉ SSL phù hợp dựa trên tên máy chủ được yêu cầu.
  3. Network Load Balancer (NLB) (v2):

    • Hỗ trợ nhiều listeners với nhiều chứng chỉ SSL: NLB cũng hỗ trợ cấu hình nhiều listeners, mỗi listener có thể có một chứng chỉ SSL riêng.
    • Sử dụng Server Name Indication (SNI) để hoạt động: Tương tự như ALB, NLB cũng sử dụng SNI để phân biệt giữa các chứng chỉ SSL dựa trên tên máy chủ được yêu cầu.

Application Load Balancer (v2) Good to Know

  1. Fixed hostname (Tên miền cố định):

    • ALB cung cấp một tên miền cố định (Fixed hostname) cho việc truy cập. Điều này có nghĩa là bạn có thể sử dụng một tên miền cụ thể (XXX.region.elb.amazonaws.com) để truy cập đến ứng dụng hoặc dịch vụ của bạn, giúp đơn giản hóa quản lý và điều hướng lưu lượng truy cập.
  2. The application servers don’t see the IP of the client directly (Các máy chủ ứng dụng không thấy được địa chỉ IP của khách hàng trực tiếp):

    • Khi một yêu cầu đến từ một khách hàng, địa chỉ IP của khách hàng không được trực tiếp chuyển đến các máy chủ ứng dụng. Thay vào đó, địa chỉ IP thực sự của khách hàng được chèn vào tiêu đề "X-Forwarded-For" của yêu cầu. Điều này giúp bảo vệ sự riêng tư của khách hàng và cho phép các máy chủ ứng dụng xác định địa chỉ IP của khách hàng thông qua tiêu đề này.
  3. We can also get Port (X-Forwarded-Port) and proto (X-Forwarded-Proto) (Chúng ta cũng có thể nhận được Port và Protocol):

    • Ngoài địa chỉ IP của khách hàng, ALB cũng chèn các thông tin khác như cổng (Port) và giao thức (Protocol) vào các tiêu đề tương ứng như "X-Forwarded-Port" và "X-Forwarded-Proto". Điều này giúp ứng dụng của bạn có thể biết được thông tin chi tiết về yêu cầu của khách hàng, bao gồm cả cổng và giao thức mà yêu cầu được gửi đến.

Thực Hành Application Load Balancer

Trong video hướng dẫn chi tiết.

Có thể bạn chưa biết?

Optimize with service integrations:

Trong Application Load Balancer (ALB) trên Amazon Web Services (AWS), hai loại dịch vụ sau được tích hợp để cải thiện và tối ưu hiệu suất và bảo mật:

  1. AWS Web Application Firewall (WAF):

    • AWS WAF là một dịch vụ bảo vệ ứng dụng web, cho phép bạn kiểm soát và bảo vệ ứng dụng web của mình khỏi các cuộc tấn công web bằng cách lọc lưu lượng HTTP và HTTPS. Khi kết hợp với ALB, AWS WAF có thể cung cấp một lớp bảo mật bổ sung bằng cách áp dụng các quy tắc bảo mật tùy chỉnh để chặn hoặc giảm thiểu rủi ro từ các cuộc tấn công web như SQL injection, cross-site scripting (XSS), hoặc các cuộc tấn công DDOS.
  2. AWS Global Accelerator:

    • AWS Global Accelerator là một dịch vụ tối ưu hóa mạng toàn cầu, giúp cải thiện hiệu suất và độ trễ cho ứng dụng của bạn bằng cách sử dụng một mạng điểm đến toàn cầu và tối ưu hóa đường dẫn lưu lượng truy cập đến các ứng dụng của bạn trên AWS. Khi tích hợp với ALB, AWS Global Accelerator có thể cung cấp khả năng mở rộng và phân phối lưu lượng truy cập một cách hiệu quả hơn trên phạm vi toàn cầu, giúp cải thiện trải nghiệm người dùng và giảm độ trễ cho các ứng dụng web.

Có ba thuật toán cơ bản được sử dụng trong load balancing:

  1. Round Robin (Vòng tròn): Trong thuật toán này, các yêu cầu được chuyển hướng tuần tự qua các server theo một chu kỳ vòng tròn. Mỗi yêu cầu được gửi đến server tiếp theo trong danh sách, bắt đầu từ đầu danh sách sau khi đã chuyển hướng qua tất cả các server. Round Robin là một cách đơn giản và công bằng để phân phối tải, nhưng không hiệu quả nếu có sự khác biệt đáng kể về khả năng xử lý giữa các server.

  2. Least Connections (Ít kết nối nhất): Thuật toán này chuyển hướng các yêu cầu đến server có số lượng kết nối ít nhất hiện tại. Ý tưởng là để phân phối tải một cách cân đối bằng cách chuyển hướng yêu cầu đến các server ít bận rộn hơn để giảm tải của chúng.

  3. IP Hash (Băm địa chỉ IP): Trong thuật toán này, một hàm băm được sử dụng để chuyển đổi địa chỉ IP của người dùng thành một giá trị duy nhất. Giá trị này được sử dụng để xác định server mà yêu cầu sẽ được chuyển hướng đến. Nhược điểm của phương pháp này là nó có thể gây ra mất cân đối nếu có một số lượng lớn các địa chỉ IP chuyển đến cùng một server và ít hơn đến các server khác.

Slow start duration:

Slow start duration trong cấu hình Traffic của một Load Balancer (LB) đề cập đến khoảng thời gian mà LB sẽ dùng để tăng dần lưu lượng truy cập được chuyển tiếp đến các instance sau khi chúng đã trở lại hoạt động hoặc sau khi đã được thêm vào Target Group mới. Khi một instance mới được thêm vào hoặc một instance trở lại sau thời gian tạm ngừng hoạt động, Slow start duration sẽ đảm bảo rằng lưu lượng truy cập sẽ không được chuyển hướng đến nó ngay lập tức mà sẽ tăng dần trong khoảng thời gian được cấu hình.

Điều này giúp tránh tình trạng quá tải ngay khi các instance mới được triển khai hoặc khi chúng trở lại hoạt động sau một thời gian tạm ngừng. Bằng cách này, Slow start duration giúp giảm thiểu tác động tiêu tốn tài nguyên và giúp LB điều chỉnh một cách dần dần để đảm bảo sự ổn định của hệ thống.

Packet handling

X-Forwarded-For header

  1. X-Forwarded-For header:

    • Append: Thêm địa chỉ IP của client vào header X-Forwarded-For nếu header này đã tồn tại.
    • Preserve: Giữ nguyên giá trị của header X-Forwarded-For nếu đã tồn tại.
    • Remove: Xóa header X-Forwarded-For đi trước khi thêm địa chỉ IP mới của client.
  2. Client port preservation:

    • Preserve: Giữ nguyên port nguồn mà client đã sử dụng để kết nối tới load balancer.
  3. Preserve host header:

    • Preserve: Giữ nguyên giá trị của header Host trong yêu cầu gốc khi chuyển tiếp nó tới các instance đích.

Desync mitigation mode

  1. Defensive (Phòng thủ - được khuyến nghị): Load balancer sẽ xử lý các yêu cầu một cách an toàn và phòng thủ để ngăn chặn các cuộc tấn công desynchronization (desync) giữa các phần của yêu cầu HTTP.
  2. Strictest (Nghiêm ngặt nhất): Các biện pháp phòng thủ sẽ được thực hiện một cách nghiêm ngặt hơn, có thể gây ra ảnh hưởng đến hiệu suất nhưng đảm bảo tính an toàn hơn.
  3. Monitor (Theo dõi): Load balancer sẽ chỉ theo dõi các yêu cầu mà nó nghi ngờ có thể gây ra desynchronization, nhưng không thực hiện các biện pháp phòng thủ cụ thể.

Connection idle timeout

Thuộc tính "Connection idle timeout" xác định khoảng thời gian mà một kết nối có thể ở trạng thái không hoạt động (idle) trước khi bị đóng bởi load balancer. Khi một kết nối không có hoạt động, điều này có thể xảy ra khi một client không gửi yêu cầu mới trong khoảng thời gian quy định.

Ví dụ, nếu bạn đặt "Connection idle timeout" là 60 giây, điều này có nghĩa là nếu không có hoạt động nào trên một kết nối trong vòng 60 giây, kết nối đó sẽ bị đóng bởi load balancer.

Việc đóng các kết nối idle có thể giúp giải phóng tài nguyên và tăng khả năng mở rộng cho hệ thống của bạn. Tuy nhiên, việc chọn khoảng thời gian phù hợp cho "Connection idle timeout" là quan trọng để đảm bảo rằng các kết nối không bị đóng quá sớm và cũng không tiêu tốn quá nhiều tài nguyên cho các kết nối không hoạt động.

TLS version and cipher headers

Thuộc tính "TLS version and cipher headers" cho phép bạn xác định phiên bản TLS và thuật toán mã hóa (cipher) sẽ được load balancer sử dụng khi thiết lập kết nối an toàn với clients. Bằng cách cấu hình các giá trị cho thuộc tính này, bạn có thể kiểm soát cách mà load balancer và client thiết lập kết nối bảo mật.

Một số giá trị phổ biến cho thuộc tính này bao gồm:

  • TLS version: Cho phép bạn chọn phiên bản TLS được hỗ trợ, chẳng hạn như TLS 1.2 hoặc TLS 1.3.
  • Cipher suite: Xác định thuật toán mã hóa và phương thức xác thực sẽ được sử dụng trong quá trình trao đổi mã khóa. Mỗi cipher suite định nghĩa một tập hợp các thuật toán mã hóa và phương pháp xác thực khác nhau.

Bằng cách cấu hình TLS version và cipher headers, bạn có thể cải thiện bảo mật của ứng dụng bằng cách chỉ định các phiên bản TLS và thuật toán mã hóa mạnh mẽ nhất mà load balancer sẽ sử dụng khi thiết lập kết nối với clients.

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