Provision dịch vụ Load Balancer với Terraform

Cập nhật lần cuối: 2024/08/30 08:48:36

ĐIỀU KIỆN

  • Cài đặt phiên bản Terraform từ v1.8 trở lên.
  • Cài đặt Go phiên bản từ 1.22 trở lên ( để xây dựng plugin )
  • Có thông tin về API key của tài khoản trên CMC Cloud ( cần báo admin của CMC Cloud active API key)

 

 

CÁC BƯỚC THỰC HIỆN

Dưới đây là hướng dẫn khởi tạo dịch vụ Elastic Load Balancer với Terraform

 

Bước 1 : Tạo file elb.tf với các thông tin sau

data "cmccloudv2_flavor_elb" "elb_flavor1" { 

    name = "small-lb" //chọn flavor cho ELB

 

resource "cmccloudv2_elb" "elb_terraform" {    // tạo ELB

    billing_mode = "monthly" # chọn chế độ thanh toán , monthly hoặc hourly 

    zone = "AZ2" # chọn giữa AZ1, AZ2 hoặc AZ3

    flavor_id = "${data.cmccloudv2_flavor_elb.elb_flavor1.id}"

    name = "elb_terraform2" // đặt tên cho elb

    network_type = "public" // chọn loại elb, public hoặc private

    //bandwidth_mbps = 500 

    # network_type = "private"

    # subnet_id = "d32fa7ba-2a02-4327-80d3-9e17274b9fdd"

    tags = ["tag1", "tag2"]

    description = "elb create from terraform" 

}

 

data "cmccloudv2_elb" "elb1" { 

    name = "elb_terraform2"

}  // chọn thông tin ELB đã tạo từ bước trước

 

resource "cmccloudv2_elb_pool" "pool1"{ // tạo pool cho ELB đã tạo từ bước trước

    elb_id = "${data.cmccloudv2_elb.elb1.id}"

    name = "pool1" // 

    description = "create from terraform" 

    protocol = "HTTP" // chọn protocol

    algorithm = "ROUND_ROBIN"// chọn port theo protocol

    session_persistence = "APP_COOKIE" // chọn giữa "NONE" ,"SOURCE_IP". "HTTP_COOKIE" hoặc   "APP_COOKIE"

    cookie_name = "cookie1"

    #tls_enabled = true // chọn true nếu muốn sử enable tls 

    #tls_ciphers = "ciphers text"

    #tls_versions = [ "TLSv1.2", "TLSv1.3" ] // chọn 1 hoặc nhiều trong các lựa chọn :"SSLv3" "TLSv1" "TLSv1.1" "TLSv1.2" "TLSv1.3"

}

 

resource "cmccloudv2_elb_healthmonitor" "healthmonitor1"{ // enable healtcheckcho pool đã tạo từ bước trước

    name = "healthmonitor1"

    pool_id = cmccloudv2_elb_pool.pool1.id

    max_retries_down = 5

    delay = 5

    max_retries = 5

    timeout = 5

    type = "HTTP" // "HTTP", "HTTPS", "PING", "TCP", "TLS-HELLO", "UDP-CONNECT", "SCTP"

    http_method = "GET" //sử dụng khi healthcheck type là HTPP hoặc HTPPS, chọn giữa "GET", "HEAD", "POST", "PUT", "DELETE", "TRACE", "OPTIONS", "PATCH", "CONNECT"

    expected_codes = "200-209"//sử dụng khi healthcheck type là HTPP hoặc HTPPS

    url_path = "/"//sử dụng khi healthcheck type là HTPP hoặc HTPPS

    # domain_name = ""

}

 

resource "cmccloudv2_elb_pool_member" "member1"{ // add VM vào pool đã tạo từ bước trước

    pool_id = cmccloudv2_elb_pool.pool1.id 

    name = "ecs-u6gq" // tên VM

    address = "192.169.1.27" // ip của VM

    protocol_port = 80 // chọn port

    weight = 1 // chọn từ 1-256

    # subnet_id = ""

    # monitor_address = ""

    # monitor_port = 80

    depends_on = [ cmccloudv2_elb_healthmonitor.healthmonitor1 ]

}

 

 

resource "cmccloudv2_elb_listener" "listener"{ // tạo listener và trỏ tới pool đã tạo tại bước trước

    elb_id = "${data.cmccloudv2_elb.elb1.id}"

    name = "listener1" // tên listener

    description = "listener create from terraform"

    protocol = "HTTP" // chọn protocol

    protocol_port = "80" // chọn port cho protocol

    default_pool_id = cmccloudv2_elb_pool.pool1.id

    sni_container_refs = []

    default_tls_container_ref = ""

    timeout_member_connect = 5000

    timeout_member_data = 50000

    connection_limit = -1 

    allowed_cidrs = [] 

    # comment 2 truong sau khi protocol = UDP/SCTP

    # timeout_client_data = 50000 

    # timeout_tcp_inspect = 0 

 

    # cac truong sau chi set khi protocol = HTTP or TERMINATED_HTTPS

    # x_forwarded_for = false

    # x_forwarded_port = true

    # x_forwarded_proto = true

    # depends_on = [ cmccloudv2_elb_healthmonitor.healthmonitor1 ]

}

 

Bước 2 : Kiểm tra lại thông tin file elb.tfterraform plan ( để kiểm tra lại resource muốn tạo ) . Khởi chạy terraform apply để khởi tạo tài nguyên.

 

Bước 3 : Kiểm tra tài nguyên đã tạo 

  • Kiểm tra với tài nguyên đã tạo với Terraform : 

Sử dụng câu lệnh terraform state show “ tên resource” để hiển thị chi tiết thông tin về ELB đã tạo

ex: terraform state show cmccloudv2_elb.elb_terraform

 

  • Kiểm tra với tài nguyên đã tạo trên Portal: 

Truy cập Portalv2 , trên thanh công cụ , chọn dịch vụ Elastic Load Balancer. Tại đây sẽ hiển thị danh sách các ELB của bạn. Click vào ELB đã tạo để hiển thị thông tin chi tiết 

 

  1. Kiểm tra tính sẵn sàng và khả năng hoạt động của ELB khi một hoặc nhiều VM bị down

 

Health Check là một tính năng quan trọng của Elastic Load Balancer , được sử dụng để đảm bảo tính khả dụng và hiệu suất của các máy chủ hoặc các đối tượng trong cụm máy chủ. Health Check cho phép ELB tự động phát hiện máy chủ hoặc dịch vụ nào đang hoạt động cùng với việc tự động loại bỏ các máy chủ hoặc dịch vụ không khả dụng khỏi Load Balancer.

 

Cách hoạt động

  • ELB sẽ định kỳ gửi các yêu cầu kiểm tra sức khỏe đến các máy chủ backend, thông qua các tùy chọn được cấu hình.
  • Nếu máy chủ backend trả lời với mã trạng thái hoặc nội dung không đúng, ELB sẽ coi máy chủ đó là không khỏe và ngừng gửi yêu cầu đến nó.
  • Các yêu cầu từ máy khách sẽ chỉ được chuyển tiếp đến các máy chủ được xem là khỏe mạnh.
  • Các cài đặt Health Check được hỗ trợ với CMC ELB là: PING, HTTP ,HTTPS, TCP, TLS-HELLO, UDP-CONNECT và SCTP

Ví dụ : Server 1 và Server 2 là backend của ELB, thuật toán Round_Robin và được bật Health Check. Trong trường hợp Server 1 được Health Check xác định là Unhealth, traffic sẽ được chuyển sang Server 2

    back to top

    logo

    © 2023, CMC Cloud. All rights reserved.

    Business Registration Certificate

    Giấy ĐKKD: 0102900049. Nơi cấp: Sở Kế hoạch & Đầu tư Thành phố Hà Nội

    Chịu trách nhiệm nội dung: Đặng Tùng Sơn