Cấu hình cho một Application Load Balancer

Tại trang [Ingress for an Application Load Balancer], chúng tôi đã hướng dẫn bạn cách thực hiện cài đặt Ingress Controller và tạo ingress thông qua Ingress Yaml file. Sau đây là chi tiết các ý nghĩa các thông tin bạn có thể thiết lập cho một Ingress

Annotation

Sử dụng các annotation dưới đây khi thực thiện tạo ingress để tuỳ chỉnh Load Balancer phù hợp với nhu cầu của bạn:

Annotation
Bắt buộc/ Không bắt buộc
Ý nghĩa

vks.vngcloud.vn/load-balancer-id

Không bắt buộc

    • ALB của bạn đang có sẵn 2 listener trong đó:

      • 1 listener có cấu hình protocol HTTP và port 80

      • 1 listener có cấu hình protocol HTTPS và port 443 thì chúng tôi sẽ sử dụng 2 listener này.

    • ALB của bạn chưa có một trong hai hoặc cả 2 listener có cấu hình trên, chúng tôi sẽ tự động khởi tạo chúng.

Chú ý:

Nếu ALB của bạn có:

  • 1 listener có cấu hình protocol HTTP và port 443

  • Hoặc 1 listener có cấu hình protocol HTTPS và portal 80

thì khi tạo Ingress sẽ xảy ra lỗi. Lúc này, bạn cần chỉnh sửa lại thông tin listener hợp lệ trên hệ thống vLB và thực hiện tạo lại ingress.

vks.vngcloud.vn/load-balancer-name

Không bắt buộc

  • Annotation vks.vngcloud.vn/load-balancer-name sẽ được sử dụng nếu bạn không sử dụng annotation load-balancer-id.

  • Annotation vks.vngcloud.vn/load-balancer-name chỉ có ý nghĩa khi bạn tạo mới một Ingress resource. Sau khi Ingress resource được tạo thành công, annotation này sẽ tự động bị xóa. Việc sử dụng annotation này sau khi Ingress resource được tạo sẽ không có tác dụng.

  • Nếu bạn đã có sẵn một Application Load Balancer đã khởi tạo trước đó trên hệ thống vLB và bạn muốn tái sử dụng ALB cho cluster của bạn. Lúc này, bạn hãy nhập thông tin Load Balancer Name vào annotation này.

vks.vngcloud.vn/package-id

Không bắt buộc

  • Nếu bạn không nhập thông tin này thì mặc định chúng tôi sẽ sử dụng cấu hình ALB Small.

  • Nếu bạn đã có sẵn host vLB đang ACTIVE và bạn muốn tích hợp host này vô cụm K8S của bạn, vui lòng bỏ qua trường thông tin này.

vks.vngcloud.vn/tags

Không bắt buộc

  • Tag được gắn thêm cho ALB của bạn.

vks.vngcloud.vn/scheme

Không bắt buộc

  • Mặc định internet-facing, bạn có thể đổi thành internal tùy theo nhu cầu sử dụng.

vks.vngcloud.vn/security-groups

Không bắt buộc

  • Mặc định sẽ tạo một security group default theo Cluster của bạn.

vks.vngcloud.vn/inbound-cidrs

Không bắt buộc

  • Mặc định All CIRD: 0.0.0.0/0

vks.vngcloud.vn/healthy-threshold-count

Không bắt buộc

  • Mặc định 3

vks.vngcloud.vn/unhealthy-threshold-count

Không bắt buộc

  • Mặc định 3

vks.vngcloud.vn/healthcheck-interval-seconds

Không bắt buộc

  • Mặc định 30

vks.vngcloud.vn/healthcheck-timeout-seconds

Không bắt buộc

  • Mặc định 5

vks.vngcloud.vn/healthcheck-protocol

Không bắt buộc

  • Mặc định TCP. Người dùng có thể chọn một trong các giá trị TCP/ HTTP

vks.vngcloud.vn/healthcheck-http-method

Không bắt buộc

  • Mặc định GET. Người dùng có thể chọn một trong các giá trị GET / POST / PUT

vks.vngcloud.vn/healthcheck-path

Không bắt buộc

  • Mặc định /

vks.vngcloud.vn/healthcheck-http-version

Không bắt buộc

  • Mặc định 1.0. Người dùng có thể chọn một trong các giá trị 1.0, 1.1

vks.vngcloud.vn/healthcheck-http-domain-name

Không bắt buộc

  • Mặc định trống

vks.vngcloud.vn/healthcheck-port

Không bắt buộc

  • Mặc định traffic port

vks.vngcloud.vn/success-codes

Không bắt buộc

  • Mặc định 200

vks.vngcloud.vn/idle-timeout-client

Không bắt buộc

  • Mặc định 50

vks.vngcloud.vn/idle-timeout-member

Không bắt buộc

  • Mặc định 50

vks.vngcloud.vn/idle-timeout-connection

Không bắt buộc

  • Mặc định 5

vks.vngcloud.vn/pool-algorithm

Không bắt buộc

  • Mặc định ROUND_ROBIN. Người dùng có thể chọn một trong các giá trị ROUND_ROBIN / LEAST_CONNECTIONS / SOURCE_IP

vks.vngcloud.vn/enable-sticky-session

Không bắt buộc

  • Mặc định false.

vks.vngcloud.vn/enable-tls-encryption

Không bắt buộc

  • Mặc định false

vks.vngcloud.vn/target-node-labels

Không bắt buộc

  • Mặc định trống

vks.vngcloud.vn/certificate-ids

Không bắt buộc

  • Mặc định trống


IngressClassName

Các Ingress được cài đặt bởi các VNGCloud Ingress Controller sẽ có thông tin IngressClassName = "vngcloud". Bạn không được thay đổi thông tin này.


DefaultBackend

  • Một Ingress không có rule nào sẽ gửi tất cả traffic đến 1 service default backend mặc định duy nhất hoặc nếu không có hostpath nào khớp với HTTP request trong Ingress Yaml file thì traffic sẽ được route đến service default backend. Ví dụ như bên dưới, chúng tôi đang cấu hình mặc định nếu request không thỏa mãn rule nào trong Ingress yaml file thì sẽ đi vào service name: example-svc-1 với port number 8080

defaultBackend:
    service:
      name: example-svc-1
      port:
        number: 8080

TLS

Bạn có thể bảo mật Ingress bằng cách chỉ định 1 Secret có chứa TLS key và certificate. Hiện tại Ingress chỉ hỗ trợ duy nhất TLS port 443 và là điểm kết thúc cho TLS (TLS termination). TLS Secret phải chứa các trường với tên key là tls.crt và tls.key, đây chính là certificate và private key để sử dụng cho TLS. Cụ thể, bạn cần chỉ định:

  • Host: các host được chỉ định sẽ dùng cert.

  • SecretName: tên secret chứa cert.


Path types

Mỗi path (đường dẫn) trong Ingress có một pathType (loại đường dẫn) tương ứng. Có ba pathType được hỗ trợ:

  • Exact: Khớp với đường dẫn URL một cách chính xác tuyệt đối và phân biệt chữ hoa chữ thường.

  • Prefix: Khớp dựa trên tiền tố của đường dẫn URL được phân tách bởi dấu /. Việc so khớp (match) là có phân biệt chữ hoa thường và được thực hiện trên từng thành phần của đường dẫn URL. Một thành phần của đường dẫn URL chính là 1 label được phân tách bằng dấu phân cách / trong đường dẫn URL (Nghĩa là đường dẫn URL có thể bao gồm nhiều cấp phân tách nhau bởi dẫu /, mỗi chuỗi đứng giữa 2 dấu / chính là 1 label, mỗi label chính là 1 thành phần của đường dẫn URL). Một request URL được xem như là khớp với 1 trường path (được cấu hình trong đặc tả Ingress) khi toàn bộ giá trị của path (có thể gồm nhiều thành phần phân tách bằng dấu /) khớp với các label đầu tiên (tính từ bên trái của đường dẫn URL). Ví dụ /example1/path1 khớp với /example1/path1/path2, nhưng không khớp với /example1/path1path2

Ví dụ cụ thể:

Path type
Path(s)
Request path(s)
Có match hay không?

Exact

/example1

/example1

Exact

/example1

/host1

Không

Exact

/example1

/example1/

Không

Exact

/example1/

/example1

Không

Prefix

/

(all paths)

Prefix

/example1

/example1, /example1/

Prefix

/example1/

/example1, /example1/

Prefix

/example1/host11

/example1/host1

Không

Prefix

/example1/host1

/example1/host1

Prefix

/example1/host1/

/example1/host1

Prefix

/example1/host1

/example1/host1/

Prefix

/example1/host1

/example1/host1/ccc

Prefix

/example1/host1

/example1/host1xyz

Không

Prefix

/, /example1

/example1/ccc

Prefix

/, /example1, /example1/host1

/example1/host1

Prefix

/, /example1, /example1/host1

/ccc

Prefix

/example1

/ccc

Không

  • Trong một số trường hợp, nhiều path bên trong Ingress sẽ khớp với đường dẫn của request URL. Trong những trường hợp đó, quyền ưu tiên sẽ được trao cho path khớp dài nhất đầu tiên. Nếu hai path vẫn có độ dài khớp bằng nhau thì quyền ưu tiên sẽ theo thứ tự rule được tạo trên Ingress Yaml file.


Ingress rule

Mỗi HTTP rule chứa các thông tin sau:

  • 1 host tùy chọn. Nếu không có host (ta có thể hiểu là 1 tên miền) nào được chỉ định nên rule sẽ được áp dụng cho tất cả HTTP traffic đi vào (inbound) địa chỉ IP đã được chỉ định. Nếu có chỉ định host (ví dụ example1.com) thì rule chỉ áp dụng cho host đó thôi.

  • 1 danh sách các đường dẫn (path) (ví dụ /example1/host1), mỗi path có 1 service backend gắn liền với nó được định nghĩa bởi Service Name và Port Number. Cả host và path phải khớp với nội dung của incoming request trước khi bộ cân bằng tải điều hướng traffic đến Services mong muốn.

  • 1 backend là tổ hợp của tên Services và Port Number. HTTP và HTTPS request đi đến Ingress và có URL khớp với host và path của rule sẽ được gửi đến danh sách các backend.

Ví dụ: Host có khớp với Host header theo bảng:

Host
Host header
Có match hay không?

Không

Không

Last updated