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:

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

Không bắt buộc

  • Nếu bạn chưa có sẵn một Application Load Balancer đã khởi tạo trước đó trên hệ thống vLB. Lúc này, khi tạo một Ingress, bạn hãy để trống thông tin này. Sau khi bạn đã thực hiện triển khai Ingress theo hướng dẫn tại Ingress for an Application Load Balancer. Chúng tôi sẽ tự động tạo 1 ALB trên cluster của bạn. ALB này sẽ hiển thị trên vLB Portal, chi tiết truy cập tại đây

  • 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, khi tạo một Ingress, bạn hãy nhập thông tin Load Balancer ID vào annotation này. Sau khi bạn đã thực hiện tạo Ingress theo hướng dẫn tại Ingress for an Application Load Balancer. Nếu:

    • 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.

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.

Không bắt buộc

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

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.

Không bắt buộc

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

Không bắt buộc

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

Không bắt buộc

  • Mặc định 3

Không bắt buộc

  • Mặc định 3

Không bắt buộc

  • Mặc định 30

Không bắt buộc

  • Mặc định 5

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

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

Không bắt buộc

  • Mặc định /

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

Không bắt buộc

  • Mặc định trống

Không bắt buộc

  • Mặc định traffic port

Không bắt buộc

  • Mặc định 200

Không bắt buộc

  • Mặc định 50

Không bắt buộc

  • Mặc định 50

Không bắt buộc

  • Mặc định 5

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

Không bắt buộc

  • Mặc định false.

Không bắt buộc

  • Mặc định false

Không bắt buộc

  • Mặc định trống

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 typePath(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:

Last updated