Keywords: How to multi files config of Krakend to manager
Hôm nay mình mang đến cho các bạn một bài viết khá là thú vị đây, vì nó liên quan tới Krakend một API Gateway cũng được xem là hàng xịn sò, thật ra trước giờ mình cũng chỉ nghe đến Kong và một số API Gateway khác, đây cũng là lần đầu mình tiếp xúc với nó, vì do công việc tại môi trường mới. Nhưng mà thôi, càng tìm hiểu nhiều thì mình biết nhiều chứ sao, tại sao có bài viết này ? là vì Krakend nó đúng vỏn vẹn 1 file config cho tất cả, vâng cũng vì vấn đề đó về lâu dài, file config này sẻ phình to ra và sẻ rất dài, chính vì cái lý do đó mà hôm nay mình sẻ hướng dẫn cho các bạn cách chia nhỏ những config đó ra, thành nhiều files.
Như lúc đầu mình nói, thằng Krakend này nó chỉ sử dụng đúng 1 file 1 đó là file "krakend.json" vậy tại sao mình nói với các bạn là mình sẻ tách nó ra, thật ra đó là một thủ thuật nhỏ, nghĩa là chúng ta sẻ chia ra thành nhiều thành phần. Sau đó chạy 1 câu lệnh build, để gọp chúng lại thành 1 file "krakend.json" và đưa nó cho Krakend sử dụng, à quên phần giới thiệu Krakend là gì thì các bạn có thể tìm hiểu thêm tại Google nhé, chứ mình không tiện giải thích ở đây, để có thể tách Krakend ra cho dễ quản lý chúng ta cần tạo ra 3 folder và 1 file krakend.json gốc như hình dưới{ "version": 2, "extra_config": {{ include "krakend_extra_config.tmpl" | nindent 2 }}, "timeout": "30000ms", "cache_ttl": "0s", "output_encoding": "no-op", "name": "API Gateway", "host": [ "https://api-gateway.itblognote.com" ], "port": {{ .service.port }}, "disable_rest": {{ .service.disable_rest }}, "endpoints": [{{ include "endpoint_users_login.tmpl" | nindent 4 }}, {{- include "endpoint_users_index.tmpl" | nindent 4 }} ] }Ok bây giờ mình sẻ show từng config cho các bạn xem nhé, mấy cái config này giống y hệt config helm nên thành ra cũng không khó khăn gì mấy, folder settings và templates mình sẻ không đụng chạm đến vì sao ?
- Mình chưa hoàn toàn tối ưu hết khả năng của multi config trong Krakend, cái mình làm cho các bạn chỉ là demo và cơ bản để các bạn hiểu được nó hoạt động thế nào, nó ra làm sao thôi
- Với mình chia nhỏ như vậy là quá đủ với mình rồi, mình không cần thiết phải chia 1 cách chi tiết hơn nữa, nên thành ra mình không sử dụng 2 folder này, vì vậy mình chỉ cần một folder partials là đủ cho tất cả
{ "github_com/devopsfaith/krakend-logstash": { "enabled": true }, "github_com/devopsfaith/krakend-gologging": { "level": "ERROR", "prefix": "[KRAKEND]", "syslog": false, "stdout": true, "format": "logstash" }, "github_com/devopsfaith/krakend-cors": { "allow_origins": [ "*" ], "expose_headers": [ "*" ], "max_age": "300s", "allow_methods": [ "OPTIONS", "HEAD", "GET", "POST", "PUT", "DELETE" ], "allow_headers": [ "*" ], "allow_credentials": true }, "github_com/devopsfaith/krakend-metrics": { "collection_time": "30s", "proxy_disabled": false, "router_disabled": false, "backend_disabled": false, "endpoint_disabled": false, "listen_address": "127.0.0.1:8090" } }2-endpoint_users_login.tmpl
{ "endpoint": "/users/login", "method": "POST", "output_encoding": "no-op", "extra_config": {}, "headers_to_pass": [ "Content-Type", "Content-Length", "Content-Language" ], "backend": [ { "url_pattern": "/users/login", "encoding": "no-op", "sd": "static", "method": "POST", "extra_config": {}, "host": [ "http://user.itblognote.com" ], "disable_host_sanitize": false } ] }3-endpoint_users_index.tmpl
{ "endpoint": "/users/index", "method": "GET", "output_encoding": "no-op", "extra_config": {}, "headers_to_pass": [ "Authorization", "Content-Language" ], "querystring_params": [ "ids", "employee_ids", "ids[]", "employee_ids[]", "search" ], "backend": [ { "url_pattern": "/users/index", "encoding": "no-op", "sd": "static", "method": "GET", "extra_config": {}, "host": [ "http://user.itblognote.com" ], "disable_host_sanitize": false } ] }3 files config, trong đó 1 config có nhiệm vụ add plugin cho krakend và 2 config cuối cùng là endpoint để proxy cho api
FC_ENABLE=1 \ FC_SETTINGS="$PWD/krakend-itblognote/settings" \ FC_PARTIALS="$PWD/krakend-itblognote/partials" \ FC_TEMPLATES="$PWD/krakend-itblognote/templates" \ FC_OUT=output-krakend.json \ /root/krakend check -t -d -c "$PWD/krakend-itblognote/krakend.json"Các bạn đừng chú ý đến các folder khác chẳng qua mình có nhiều môi trường nên vì thế mình có nhiều folder thôi, các bạn chỉ cần quan tâm đến folder gốc có chứa 3 thư mục config ở trên là krakend-itblognote là được, nhớ tải krakend về nhé, không có thì nó không build đâu, mình đã bỏ krakend tại root sau khi tải rồi.
{ "version": 2, "extra_config": { "github_com/devopsfaith/krakend-logstash": { "enabled": true }, "github_com/devopsfaith/krakend-gologging": { "level": "ERROR", "prefix": "[KRAKEND]", "syslog": false, "stdout": true, "format": "logstash" }, "github_com/devopsfaith/krakend-cors": { "allow_origins": [ "*" ], "expose_headers": [ "*" ], "max_age": "300s", "allow_methods": [ "OPTIONS", "HEAD", "GET", "POST", "PUT", "DELETE" ], "allow_headers": [ "*" ], "allow_credentials": true }, "github_com/devopsfaith/krakend-metrics": { "collection_time": "30s", "proxy_disabled": false, "router_disabled": false, "backend_disabled": false, "endpoint_disabled": false, "listen_address": "127.0.0.1:8090" } }, "timeout": "30000ms", "cache_ttl": "0s", "output_encoding": "no-op", "name": "API Gateway", "host": [ "https://api-gateway.itblognote.com" ], "port": 8080, "disable_rest": true, "endpoints": [ { "endpoint": "/users/login", "method": "POST", "output_encoding": "no-op", "extra_config": {}, "headers_to_pass": [ "Content-Type", "Content-Length", "Content-Language" ], "backend": [ { "url_pattern": "/users/login", "encoding": "no-op", "sd": "static", "method": "POST", "extra_config": {}, "host": [ "http://user.itblognote.com" ], "disable_host_sanitize": false } ] }, { "endpoint": "/users/index", "method": "GET", "output_encoding": "no-op", "extra_config": {}, "headers_to_pass": [ "Authorization", "Content-Language" ], "querystring_params": [ "ids", "employee_ids", "ids[]", "employee_ids[]", "search" ], "backend": [ { "url_pattern": "/users/index", "encoding": "no-op", "sd": "static", "method": "GET", "extra_config": {}, "host": [ "http://user.itblognote.com" ], "disable_host_sanitize": false } ] } ] }Trên chính là nội dung của file output, nó đã gọp 3 file config lại thành 1 file krakend.json chính, bây giờ chỉ cần chúng ta thực hiện tạo CI/CD với Dockerfile để đưa file output này vào trong môi trường krakend, cho krakend chạy nữa là ngon lành cành đào, nếu như bình thường khi các bạn viết config, các bạn sẻ viết 1 file dài thật là dài như file output vừa mới xuất ra thì bây giờ các bạn có thể chia thành những đoạn ngắn nhỏ và chạy lệnh build để thành 1 file config gốc, rồi thực hiện lấy files output đó sử dụng là được, nội dung bài viết ngày hôm nay của mình chỉ là hướng dẫn cho các bạn cách để chia cái file krakend khổng lồ này thành những file nhỏ lẻ thôi, giờ là ok rồi đó, chúc các bạn thành công.
0 Comments
Vài lời muốn nói:
* Không được nhận xét thô tục bởi mình biết các bạn là những người văn minh.
* Pass giải nén mặt định là itblognote hoặc itblognote.com nếu có Pass khác thì mình sẽ ghim trong bài viết.
* Click vào quảng cáo và chia sẻ bài viết để mình có thêm động lực viết bài nhé.