Gateway Management
API Gateway và Quản lý Gateway là gì?
Một API Gateway là điểm quản lý trung tâm cho lưu lượng API. Nó xử lý các yêu cầu của khách hàng bằng cách định tuyến chúng đến các dịch vụ backend thích hợp, chuyển đổi các yêu cầu và phản hồi khi cần thiết, thực thi các chính sách bảo mật, giám sát lưu lượng và đảm bảo độ tin cậy tổng thể của API.
Chức năng chính của API Gateway
- Routing: Chỉ đạo các yêu cầu của khách hàng đến dịch vụ backend thích hợp.
- Transformation: Chuyển đổi định dạng yêu cầu hoặc phản hồi khi cần.
- Authentication & Authorization: Xác thực thông tin xác thực của khách hàng và cấp quyền truy cập.
- Traffic Control: Quản lý và hạn chế lưu lượng API để ngăn ngừa quá tải backend.
- Logging & Monitoring: Ghi lại dữ liệu sử dụng API để theo dõi và phân tích.
- Security & Protection: Chặn các cuộc tấn công độc hại và nâng cao bảo mật API.
Trong APIM, Kong API Gateway được sử dụng và cung cấp dưới dạng một Kubernetes (K8s) Deployment.
Menu Quản lý Gateway
Menu Gateway Management trong APIM cho phép người dùng:
- Xem và quản lý danh sách các gateway.
- Giám sát trạng thái của từng gateway.
- Truy vấn, tạo, cập nhật và xóa gateway theo dự án.
- Quản lý nhiều URL Gateway.
- Cấu hình độ tương thích của nút, sự dung thứ và cài đặt topo.
- Thiết lập chứng chỉ TLS cho bảo mật HTTPS.
- Thêm siêu dữ liệu thông qua chú thích/nhãn (K8s Ingress Annotations/Labels).
Mỗi Gateway URL đại diện cho một điểm cuối được sử dụng cho các yêu cầu API.
Ví dụ, nếu một API được truy cập qua https://api.company.com/path, thì URL Gateway là api.company.com.
Màn hình Danh sách Gateway
Màn hình Gateway List cung cấp cái nhìn tổng quan về tất cả các gateway trong một dự án, cho phép người dùng:
- Xem tất cả các gateway một cách nhanh chóng.
- Kiểm tra cấu hình CPU, Bộ nhớ và Số lượng bản sao.
- Giám sát trạng thái đang chạy hoặc chờ của từng gateway.
- Tìm kiếm các gateway cụ thể hoặc tạo mới.
Tạo một Gateway
Để tạo một gateway mới, hãy làm theo các bước sau:
Điều hướng đến menu Quản lý Gateway.
Nhấp vào "Tạo một Gateway"
Chọn một dự án
Chọn một dự án mà trong đó gateway sẽ được quản lý. Để biết hướng dẫn tạo một Dự án, vui lòng tham khảo Tenant Manager Console/Create a Project.
Cấu hình cài đặt gateway
Phần Gateway Configuration cho phép tùy chỉnh chi tiết một gateway. Dưới đây là các trường chính:
Gateway Type- Purpose: Định nghĩa loại API Gateway.
- Mandatory: Có
- Input Instructions: Phù hợp với loại gateway của dự án. Không thể thay đổi.
- Purpose: Định danh duy nhất cho Gateway.
- Mandatory: Có
- Input Instructions: Chỉ có thể sử dụng chữ cái tiếng Anh, số, spaces, dấu gạch ngang ‘-’, dấu gạch dưới ‘_’, hoặc dấu hai chấm ‘:’. Phải bắt đầu bằng một chữ cái tiếng Anh.
- Purpose: Xác định phiên bản gateway.
- Mandatory: Có
- Input Instructions: Tự động được điền dựa trên Tên Gateway.
- Purpose: Cung cấp thêm thông tin về Gateway.
- Mandatory: Không
- Input Instructions: Nhập một mô tả ngắn gọn.
- Purpose: Giúp lọc và tìm kiếm các Gateway.
- Mandatory: Không
- Input Instructions: Gateway có thể có nhiều thẻ. Nhập các thẻ cách nhau bằng cách nhấn Enter.
- Purpose: Phân bổ tài nguyên cho Gateway.
- Mandatory: Có
- Input Instructions: Điều chỉnh bằng cách sử dụng thanh trượt. Giá trị dao động từ 500 đến 16000 m/mi.
- Purpose: Phân bổ tài nguyên cho cơ sở dữ liệu nội bộ được sử dụng bởi Gateway.
- Mandatory: Có
- Input Instructions: Điều chỉnh bằng cách sử dụng thanh trượt. Giá trị dao động từ 500 đến 16000 m/mi.
- Purpose: Để tự động mở rộng phân bổ tài nguyên gateway khi đã triển khai
- Mandatory: Có
- Instructions: Chuyển đổi để bật tự động mở rộng. Khi đã bật, cấu hình giá trị tự động mở rộng cho Số lượng bản sao Tối thiểu, Số lượng bản sao Tối đa, mức sử dụng CPU, mức sử dụng Bộ nhớ.
- Purpose: Xác định nơi Gateway chạy trong Kubernetes.
- Mandatory: Có
- Input Instructions: Chọn một Namespace từ danh sách thả xuống.
- Purpose: Định nghĩa cách lưu trữ được cung cấp cho Gateway.
- Mandatory: Có
- Input Instructions: Chọn một Lớp Lưu trữ từ danh sách thả xuống.
- Purpose: Chỉ định phân bổ lưu trữ cho Gateway.
- Mandatory: Có
- Input Instructions: Nhập một giá trị giữa 5 và 500 (Gi).
- Purpose: Xác định loại dịch vụ cho proxy Kong
- Mandatory: Có
- Input Instructions: Chọn một trong ClusterIP, NodePort, LoadBalancer. Nếu NodePort hoặc LoadBalancer được chọn, yêu cầu người dùng nhập giá trị NodePort Dịch vụ Proxy Kong (giữa 30000 và 32767)
- Purpose: Độ tương thích được sử dụng để kiểm soát các nút mà các pod gateway sẽ được lập lịch, bằng cách khớp các nhãn nút.
- Mandatory: Có nếu bật ON.
- Input Instructions: Chuyển đổi Độ tương thích sang ON để kích hoạt. Sau đó cung cấp Key và Value cho các nhãn nút. Điều này chuyển đổi thành một quy tắc nodeAffinity trong Kubernetes sử dụng requiredDuringSchedulingIgnoredDuringExecution. Ví dụ:
nodeAffinity:
- Purpose: Sự dung thứ cho phép các pod gateway được lập lịch lên các nút đã được đánh dấu (tainted) cho các khối lượng công việc cụ thể.
- Mandatory: Có nếu bật ON.
- Input Instructions: Sau khi bật ON, nhập các thông tin sau:
- Toán tử: Chọn giữa Equal hoặc Exists. Equal: khóa và giá trị phải khớp chính xác. Exists: chỉ cần khóa tồn tại; giá trị không bắt buộc.
- Khóa và Giá trị: Cung cấp khóa và giá trị taint (giá trị là tùy chọn nếu toán tử là Exists).
tolerations:
- effect: NoSchedule
key: "tolerationKey"
operator: "Equal" hoặc Exists
value: "tolerationValue"
- Purpose: Các Ràng buộc Phân bố Topology đảm bảo rằng các pod gateway được phân phối đều trên các miền lỗi (như vùng hoặc nút), cải thiện khả năng phục hồi và tính sẵn có.
- Mandatory: Có nếu bật ON.
- Input Instructions: Sau khi bật ON, nhập các thông tin sau:
- Max Skew: Sự khác biệt tối đa cho phép trong số lượng pod gateway giữa các miền topology (ví dụ: nếu đặt thành 1, số lượng pod mỗi vùng không được khác nhau quá 1).
- When Unsatisfiable: Chọn một trong các tùy chọn sau: ScheduleAnyway (mặc định): vẫn cho phép lập lịch ngay cả khi ràng buộc phân bố không thể được thỏa mãn hoàn toàn; DoNotSchedule: chặn lập lịch pod nếu ràng buộc thất bại; DoNotScheduleIfNotSatisfied: chiến lược mới hơn chỉ hạn chế lập lịch nếu điều kiện phân bố không được thỏa mãn.
Ví dụ quy tắc Kubernetes mà điều này ánh xạ tới:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/instance: test-kong
- Purpose: Cho phép phiên bản Redis nội bộ để lưu trữ tạm.
- Mandatory: Có nếu bật
- Input Instructions: Bật ON/OFF. Nếu ON, Redis mặc định sẽ được cài đặt khi Gateway được triển khai. Nếu OFF, người dùng sẽ được thông báo rằng APIM Redis không hỗ trợ các chính sách sử dụng Redis (giới hạn tỷ lệ, danh sách đen jwt, OIDC). Người dùng cần xác nhận trên thông báo để tiếp tục chuyển sang OFF.
- Purpose: Fluent Bit là một bộ xử lý log nhẹ thu thập, lọc và chuyển tiếp log từ container gateway.
- Mandatory: Không
- Input Instructions: Khi được bật, bạn có thể chọn thêm một trong các tùy chọn sau cho đích đến:
- OpenTelemetry: Chuyển tiếp log và dữ liệu telemetry bằng cách sử dụng tác nhân OpenTelemetry.
- Elasticsearch: Chuyển tiếp log đến một cụm Elasticsearch để lập chỉ mục và tìm kiếm.
Lưu ý: Chỉ một trong các tùy chọn này có thể hoạt động tại một thời điểm. Nếu bạn bật một tùy chọn trong khi tùy chọn khác đã hoạt động, một thông báo xác nhận sẽ xuất hiện để vô hiệu hóa tùy chọn hiện đang hoạt động.
- Purpose: Trường này cho phép bạn áp dụng các cấu hình nâng cao, cấp thấp trực tiếp vào runtime của Kong Gateway bằng cách cung cấp cấu hình thô ở định dạng JSON, trong trường hợp cần hiệu suất hoặc hành vi tinh chỉnh.
- Mandatory: Có nếu bật
- Input Instructions: Sau khi bật, một trình chỉnh sửa JSON sẽ xuất hiện nơi bạn có thể nhập các cài đặt runtime tùy chỉnh của Kong.
Ví dụ:
"upstream_keepalive_idle_timeout": 60,
"upstream_keepalive_max_requests": 100000,
"nginx_http_keepalive_requests": 100000,
"upstream_keepalive_pool_size": 1024
Lưu ý: Cấu hình sai có thể dẫn đến hành vi không ổn định của gateway. Tham khảo tài liệu của Kong hoặc quản trị viên nền tảng của bạn trước khi áp dụng thay đổi.
Các Cấu hình Gateway được tóm tắt trong bảng dưới đây:
Field Name | Purpose | Input Notes | Mandatory |
---|---|---|---|
Loại Gateway | Xác định loại API Gateway. | Phù hợp với loại gateway của dự án. Không thể thay đổi. | Có. Mặc định là kong. |
Tên Gateway | Định danh duy nhất cho Gateway. | Chỉ có thể sử dụng chữ cái tiếng Anh, số, dấu gạch ngang ‘-’, dấu gạch dưới ‘_’, hoặc dấu hai phẩy ‘:’. Phải bắt đầu bằng một chữ cái tiếng Anh. | Có |
Tên Phiên bản Gateway | Xác định phiên bản gateway. | Tự động được điền dựa trên Tên Gateway. | Có |
Mô tả Gateway | Cung cấp thêm chi tiết về Gateway. | Nhập một mô tả ngắn. | Không |
Thẻ Gateway | Giúp lọc và tìm kiếm các Gateway. | Gateway có thể có nhiều thẻ. Nhập thẻ cách nhau bằng cách nhấn Enter. | Không |
CPU/Memory Gateway | Phân bổ tài nguyên cho Gateway. | Điều chỉnh bằng cách sử dụng thanh trượt. Giá trị dao động từ 500 đến 16000 m/mi. | Có |
CPU/Memory Cơ sở dữ liệu | Phân bổ tài nguyên cho cơ sở dữ liệu nội bộ được sử dụng bởi Gateway. | Điều chỉnh bằng cách sử dụng thanh trượt. Giá trị dao động từ 500 đến 16000 m/mi. | Có |
Tự động mở rộng Gateway | Cho phép tự động mở rộng tài nguyên pod sau khi triển khai. | Bật ON/OFF. Nếu ON, cấu hình: Số bản sao tối thiểu, Số bản sao tối đa, ngưỡng CPU (%), ngưỡng bộ nhớ (%) | Có nếu bật |
Không gian tên Kong | Xác định nơi Gateway chạy trong Kubernetes. | Chọn một Không gian tên từ danh sách thả xuống. | Có |
Lớp lưu trữ Kong | Xác định cách lưu trữ được cấp phát cho Gateway. | Chọn một Lớp lưu trữ từ danh sách thả xuống. | Có |
Dung lượng lưu trữ | Xác định phân bổ lưu trữ cho Gateway. | Nhập một giá trị giữa 5 và 500 (Gi). | Có |
Loại dịch vụ Proxy Kong | Xác định loại dịch vụ của proxy Kong cho truy cập bên ngoài | Chọn từ: ClusterIP, NodePort, hoặc LoadBalancer. Mặc định là ClusterIP. | Có |
Affinity | Lập lịch các pod gateway đến các nút có nhãn khớp. | Bật ON/OFF. Nếu ON, nhập Khóa và Giá trị cho nhãn nút | Có nếu bật |
Toleration | Cho phép các pod gateway chạy trên các nút bị ô nhiễm. | Bật ON/OFF. Nếu ON, chọn toán tử: Equal hoặc Exists. Nhập Khóa, Giá trị tùy chọn. | Có nếu bật |
Phân bố Topology | Phân phối các pod đều trên các vùng để tăng cường tính sẵn có. | Bật ON/OFF. Nếu ON, nhập: Max Skew (ví dụ: 1). Chọn tùy chọn cho Khi không thỏa mãn: chọn từ ScheduleAnyway, DoNotSchedule, DoNotScheduleIfNotSatisfied | Có nếu bật |
Redis nội bộ | Cho phép phiên bản Redis nội bộ để lưu trữ tạm. | Bật ON/OFF. Nếu ON, Redis mặc định sẽ được cài đặt khi Gateway được triển khai. | Có nếu bật |
Fluent Bit | Cho phép tác nhân OpenTelemetry để thu thập số liệu hoặc Elasticsearch để thu thập log. | Chỉ có thể chọn giữa OpenTelemetry hoặc Elasticsearch | Có nếu bật |
Cấu hình Kong | Cho phép ghi đè thủ công các cấu hình của Kong. | Bật ON để kích hoạt trình chỉnh sửa và nhập JSON hợp lệ. | Có nếu bật |
Hoàn thành tạo
Nhấp vào nút TẠO MỘT GATEWAY để hoàn thành việc tạo và lưu cấu hình gateway.
Thêm & Quản lý URL Gateway
Cấu hình URL Gateway cho phép người dùng xác định một hoặc nhiều miền công khai cho API Gateway. Nó cũng hỗ trợ chứng chỉ TLS cho HTTPS, một Global BasePath cho định tuyến API, và thêm metadata thông qua các chú thích. Mỗi gateway có thể có nhiều URL Gateway, xác định cách truy cập API Gateway.
Để bắt đầu thêm URL Gateway, người dùng có thể nhấp vào Gateway đã tạo được liệt kê trong Màn hình Quản lý Gateway để vào Màn hình Chỉnh sửa Gateway.
Từ đó, người dùng có thể tìm thấy phần Cấu hình URL Gateway ở bên dưới.
Dưới đây là các bước để tạo URL Gateway:
Tạo một URL
Nhấp vào THÊM để tạo nhiều URL. Khối mới để cấu hình một URL sẽ được tạo bên dưới.
Cấu hình URL Gateway
Dưới đây là các trường chính cần cấu hình cho một URL Gateway:
Gateway URL- Purpose: Xác định miền công cộng mà Gateway có thể truy cập. Nếu người dùng thay đổi URL Gateway đang được sử dụng, API hiện tại có thể không được gọi đúng cách.
- Mandatory: Có
- Input Instructions: Nhập một miền hợp lệ.
- Example:
your.domain.com
your.domain.com:8443
- Purpose: Đặt một tiền tố chung cho tất cả các API dưới Gateway này. Nếu được xác định, tất cả các API dưới Gateway này sẽ kế thừa tiền tố này. Nếu Basepath bị thay đổi trong khi đang được sử dụng, các API hiện tại có thể không được gọi đúng cách.
- Mandatory: Có
- Input Instructions: Nhập một đường dẫn cơ sở. Nếu để trống /, thì gốc sẽ được sử dụng.
- Example:
/ /apim
- Purpose: bao gồm tls.crt để kích hoạt giao tiếp HTTPS bằng cách cung cấp chứng chỉ SSL và tệp tls.key để xác thực chứng chỉ TLS. Nếu một chính sách mạng được áp dụng chỉ cho phép HTTPS khi giao tiếp với URL Gateway, người dùng cần bật HTTPS. Nếu người dùng đang đăng ký Chứng chỉ TLS với K8s Secret và xử lý xác thực TLS thông qua K8s Ingress, người dùng phải nhập giá trị tls.crt/tls.key.
- Mandatory: Tùy thuộc
- Input Instructions: Dán nội dung chứng chỉ ở định dạng PEM. Bắt buộc cho các kết nối HTTPS an toàn.
- Purpose: Xác định bộ điều khiển ingress nào sẽ sử dụng cho cấu hình URL Gateway này.
- Mandatory: Có
- Input Instructions: Chọn một lớp ingress từ danh sách thả xuống. Các tùy chọn có sẵn có thể bao gồm:
- nginx (mặc định)
- alb
- appsec-kong
Cài đặt này định tuyến URL Gateway qua bộ điều khiển ingress đã chọn.
- Purpose: Thêm nhãn Kubernetes vào tài nguyên ingress được tạo cho URL Gateway này. Hữu ích cho mục đích phân loại hoặc tự động hóa.
- Mandatory: Không
- Input Instructions: Nhập một hoặc nhiều cặp Khóa-Giá trị. Những nhãn này sẽ được áp dụng cho đối tượng ingress được tạo. Sử dụng nút cộng để thêm nhiều mục hoặc nút x để xóa các mục đã thêm.
- Purpose: Thêm chú thích ingress Kubernetes cho cấu hình nâng cao, chẳng hạn như thời gian chờ tùy chỉnh, thao tác tiêu đề hoặc tùy chọn cụ thể cho bộ điều khiển.
- Mandatory: Không
- Input Instructions: Có thể nhập chú thích bằng hai chế độ:
Chế độ Biểu mẫu (chuyển đổi JSON TẮT): Nhập Khóa và Giá trị thủ công cho mỗi chú thích. Một số trường có thể bị khóa không cho chỉnh sửa tùy thuộc vào ràng buộc của hệ thống. Có thể thêm nhiều chú thích bằng cách nhấp vào nút cộng, hoặc xóa các chú thích đã thêm bằng cách nhấp vào nút x. Phải giữ ít nhất một chú thích.
Ví dụ:
Khóa: [nginx.ingress.kubernetes.io/proxy-connect-timeout](http://nginx.ingress.kubernetes.io/proxy-connect-timeout)
Giá trị: more_clear_headers \"server\
Chế độ JSON (chuyển đổi JSON BẬT): Nhập chú thích dưới dạng một mảng các đối tượng JSON khóa-giá trị trong trình soạn thảo.
Ví dụ:
"key": "[nginx.ingress.kubernetes.io/configuration-snippet](http://nginx.ingress.kubernetes.io/configuration-snippet)",
"value": "more_clear_headers \"server\";more_clear_headers \"via\";"
Cấu hình URL Gateway được tóm tắt trong bảng dưới đây:
Field Name | Purpose | Input Notes |
---|---|---|
URL Gateway | Xác định miền công cộng mà Gateway có thể truy cập. Nếu người dùng thay đổi URL Gateway đang được sử dụng, API hiện tại có thể không được gọi đúng cách. | Nhập một miền hợp lệ (ví dụ: api.example.com). Trường bắt buộc. |
Đường dẫn cơ sở toàn cầu | Đặt một tiền tố chung cho tất cả các API dưới Gateway này. Nếu được xác định, tất cả các API dưới Gateway này sẽ kế thừa tiền tố này. | Nhập một đường dẫn cơ sở (ví dụ: /api). Nếu để trống /, thì gốc sẽ được sử dụng. |
Chứng chỉ TLS (tls.crt) | Kích hoạt giao tiếp HTTPS bằng cách cung cấp chứng chỉ SSL. | Dán nội dung chứng chỉ ở định dạng PEM. Bắt buộc cho các kết nối HTTPS an toàn. Nếu người dùng đang đăng ký Chứng chỉ TLS với K8s Secret và xử lý xác thực TLS thông qua K8s Ingress, người dùng phải nhập giá trị tls.crt/tls.key. |
Khóa riêng TLS (tls.key) | Được sử dụng để xác thực chứng chỉ TLS. | Dán nội dung khóa riêng ở định dạng PEM. Phải khớp với chứng chỉ đã cung cấp. |
Lớp Ingress | Xác định bộ điều khiển ingress nào sẽ sử dụng cho cấu hình URL Gateway này. | Chọn một lớp ingress từ nginx (mặc định), alb hoặc appsec-kong |
Nhãn | Thêm nhãn Kubernetes vào tài nguyên ingress được tạo cho URL Gateway này. | Nhập một hoặc nhiều cặp Khóa-Giá trị. Có thể thêm hoặc xóa các cặp. |
Chú thích | Thêm chú thích ingress Kubernetes cho cấu hình nâng cao. | Có thể nhập nhiều chú thích bằng hai chế độ: Cặp Khóa-Giá trị (chế độ JSON TẮT) hoặc kịch bản JSON (chế độ JSON BẬT). |
Nếu hai URL Gateway (api.example.com và service.example.com) được cấu hình với một BasePath /api, thì:
https://api.example.com/api/{API-Path}
https://service.example.com/api/{API-Path}
sẽ là các điểm cuối API hợp lệ.
Chỉnh sửa một Gateway
Người dùng có thể chỉnh sửa các gateway hiện có bằng cách:
-
Chọn một gateway từ danh sách.
-
Chỉnh sửa các trường và đầu vào có thể cấu hình (Mô tả Gateway, Thẻ Gateway, CPU/Bộ nhớ Gateway, CPU/Bộ nhớ Cơ sở dữ liệu, công tắc và giá trị,…).
- Cập nhật Gateway URLs khi cần thiết.
- Lưu thay đổi để áp dụng cập nhật.
Nếu người dùng thực hiện thay đổi đối với URL Gateway, hãy nhớ nhấp vào nút LƯU URL GATEWAY trước khi nhấp vào nút LƯU GATEWAY.
Xóa gateway
Xóa một gateway sẽ permanently remove tất cả dữ liệu liên quan. Hành động này cannot be undone.
- Điều hướng đến Gateway Management.
- Chọn gateway cần xóa.
- Nhấp vào "Deleting A Gateway" và xác nhận hành động.
- Các API phụ thuộc vào gateway này sẽ không còn khả dụng.
- Đảm bảo không có API hoạt động nào phụ thuộc trước khi xóa.