kong優化參考

原文鏈接:https://linuxops.org/blog/kong/config.html,https://blog.csdn.net/luanpeng825485697/article/details/86478837

Kong API Gateway 配置文件詳解

2018-09-24 /  Linuxops

版權說明:本文爲博主原創,如果轉載請註明來源。作爲學習筆記,不能保證所有知識點是完全正確以及表達無誤,用於生產環境配置時請斟酌。如有錯誤或建議請聯繫。侵刪聯繫:[email protected]。感謝各位!

一、前言

Kong配置文件是Kong服務的核心文件,它配置了Kong以怎麼的方式運行,並且依賴於這個配置生成Nginx的配置文件,本文通過解讀Kong配置文件,以瞭解Kong的運行和配置。

在成功安裝Kong以後,會有一個名爲kong.conf.default默認的配置文件示例,如果是通過包管理器安裝的,通常位於/etc/kong/kong.conf.default,我們要將其複製爲kong.conf以便於我們修改使用他。

在Kong的配置文件中,約定了以下的幾條規則:

  • 配置文件中以#開頭的行均爲註釋行,程序不會讀取這些內容。
  • 在官方提供的默認配置文件中,以#開頭的有值的配置項目均爲默認配置。
  • 所有的配置項,均可以在系統環境變量中配置,但是必須要加上KONG_爲前綴。
  • 值爲布爾型的配置,可以使用on/off或者true/false
  • 值爲列表的,必須使用半角逗號分割。

Kong的配置,大概分爲幾種,分別是:

  • 常規配置:配置服務運行目錄,插件加載,日誌等等
  • NGINX配置:配置Nginx注入,例如監聽IP和端口配置等等,用於Kong在啓動的時候生成Nginx配置文件
  • 數據庫存儲配置:配數據庫類型,地址、用戶名密碼等等信息
  • 數據庫緩存配置:配置數據的緩存規則,Kong會緩存諸如API信息、用戶、憑證等信息,以減少訪問數據庫次數提高性能
  • DNS解析器配置:默認情況會使用系統設置,如hostsresolv.conf的配置,你也可以通過DNS的解析器配置來修改
  • 其他雜項配置:繼承自lua-nginx模塊的其他設置允許更多的靈活性和高級用法。

下面我們一個模塊一個模塊解釋一下各項的配置。

二、常規配置

在常規配置中,主要是控制Kong一些運行時的一些配置,主要有如下配置:

配置項 默認值 說明
prefix /usr/local/kong/ 配置Kong的工作目錄,相當於Nginx的工作目錄,這個目錄存放運行時的臨時文件和日誌,包括Kong啓動的時候自動生成的Nginx的配置文件。
每一個Kong經常必須有一個單獨的工作目錄
log_level notice Nginx的日誌級別。日誌存放/logs/error.log
proxy_access_log logs/access.log 代理端口請求的日誌文件,可以設置爲off來關閉日誌的記錄,也可以通過設置絕對路徑也可以設置相對路徑。
如果設置了相對路徑,則日誌文件會保存在的目錄下
proxy_error_log logs/error.log 代理端口請求的錯誤日誌文件,可以設置爲off來關閉日誌的記錄,也可以通過設置絕對路徑也可以設置相對路徑。
如果設置了相對路徑,則日誌文件會保存在的目錄下
admin_access_log logs/admin_access.log Kong管理的API端口請求的日誌文件,可以設置爲off來關閉日誌的記錄,也可以通過設置絕對路徑也可以設置相對路徑。
如果設置了相對路徑,則日誌文件會保存在的目錄下
admin_error_log logs/error.log Kong管理的API端口請求的錯誤日誌文件,可以設置爲off來關閉日誌的記錄,也可以通過設置絕對路徑也可以設置相對路徑。
如果設置了相對路徑,則日誌文件會保存在的目錄下
plugins bundled Kong啓動的時候加載的插件,如果多個必須要使用半角逗號分割。默認情況下,只有捆綁官方發行版本的插件通過 bundled 這個值來加載。
加載插件只是Kong在啓動的時候載入插件的代碼,但是並不會使用它,如果要使用他,還必須要通過管理API來配置
當然,如果你不想加載任何插件,可以使用off來關閉它,值得強調的一點bundled值可以和其他插件名稱一起使用,bundled並不是一個插件名稱,它代表了隨官方發行的所有插件。
anonymous_reports on 如果Kong進程發生了錯誤,會以匿名的方式將錯誤提交給Kong官方, 以幫助改善Kong。

在常規的配置中,主要配置了Kong運行的目錄日誌等信息。

無論如何,配置的文件或者目錄Kong必須要用權限訪問,否則會報錯。

三、Nginx注入配置

Kong基於Nginx,當然需要配置Nginx來滿足Kong的運行要求,Kong提供了Nginx的注入配置,使得我們更輕鬆控制。

在Nginx注入配置中,有如下配置:

配置項 默認值 說明
proxy_listen 0.0.0.0:8000, 0.0.0.0:8443 ssl 配置Kong代理監聽的地址和端口,這個是Kong的入口,API調用都將通過這個端口請求。這個配置和Ngxin中的配置一致,通過SSL可以指定接受https的請求
支持IPv4和IPv6
admin_listen 127.0.0.1:8001, 127.0.0.1:8444 ssl 配置Kong的管理API監聽的端口,和proxy_listen配置一樣,但是這個配置不建議監聽在公網IP上。
nginx_user nobody nobody 配置Nginx的用戶名和用戶組,和Nginx的配置規則一樣
nginx_worker_processes auto 設置Nginx的進程書,通常等於CPU核心數
nginx_daemon on 是否以daemon的方式運行Ngxin
mem_cache_size 128m 內存的緩存大小,可以使用km爲單位
ssl_cipher_suite modern 定義Nginx提供的TLS密碼,可以配置的值有:modern,intermediateoldcustom.
ssl_ciphers   定義Nginx提供的TLS密碼的列表,參考Nginx的配置
ssl_cert   配置SSL證書的crt路徑,必須是要絕對路徑
ssl_cert_key   設置SSL證書的key文件,必須是絕對路徑
client_ssl off .....
client_ssl_cert   .....
client_ssl_cert_key   .....
admin_ssl_cert   .....
admin_ssl_cert_key   .....
headers server_tokens, latency_tokens 設置再相應客戶端時候應該注入的頭部,可以設置的值如下: 
server_tokens: 注入'Via'和'Server'頭部.
latency_tokens: 注入'X-Kong-Proxy-Latency'和'X-Kong-Upstream-Latency' 頭部.
X-Kong-<header-name>: 只有在適當的時候注入特定的頭部
這個配置可以被設置爲off。當然,即便設置了off以後,插件依然可以注入頭部
trusted_ips   定義可信的IP地址段,通常不建議在此處限制請求,應該再插件中過濾
real_ip_header X-Real-IP 獲取客戶端真實的IP,將值通過同步的形式傳遞給後端
real_ip_recursive off 這個值在Nginx配置中設置了同名的ngx_http_realip_module指令
client_max_body_size 0 配置Nginx接受客戶端最大的body長度,如果超過此配置 將返回413。
設置爲0則不檢查長度
client_body_buffer_size 8k 設置讀取緩衝區大小,如果超過內存緩衝區大小,那麼NGINX會緩存在磁盤中,降低性能。
error_default_type text/plain 當請求' Accept '頭丟失,Nginx返回請求錯誤時使用的默認MIME類型。可以配置的值爲:
text/plain,text/htmlapplication/jsonapplication/xml.

在Nginx注入配置中,配置了Nginx的基本的參數,這些參數大部分和NGINX的配置值是一樣的,可以通過Nginx的配置文檔瞭解一下。

四、 數據庫存儲配置

數據庫配置的模塊配置數據庫相關的連接信息等等。主要有如下配置:

配置項 默認值 說明
database postgres 設置數據庫類型,Kong支持兩種數據庫,一種是postgres,一種是cassandra
PostgreSQL配置   如果database設置爲postgres以下配置生效
pg_host 127.0.0.1 設置PostgreSQL的連接地址
pg_port 5432 設置PostgreSQL的端口
pg_user kong 設置PostgreSQL的用戶名
pg_password   設置PostgreSQL的密碼
pg_database kong 設置數據庫名稱
pg_ssl off 是否開啓ssl連接
pg_ssl_verify off 如果啓用了' pg_ssl ',則切換服務器證書驗證。
cassandra配置   如果database設置爲cassandra以下配置生效
cassandra_contact_points 127.0.0.1 .....
cassandra_port 9042 .....
cassandra_keyspace kong .....
cassandra_timeout 5000 .....
cassandra_ssl off .....
cassandra_ssl_verify off .....
cassandra_username kong .....
cassandra_password   .....
cassandra_consistency ONE .....
cassandra_lb_policy RoundRobin .....
cassandra_local_datacenter   .....
cassandra_repl_strategy SimpleStrategy .....
cassandra_repl_factor 1 .....
cassandra_data_centers dc1:2,dc2:3 .....
cassandra_schema_consensus_timeout 10000 .....

推薦使用PostgreSQL數據庫作爲生產環境的存儲,PostgreSQL具有良好的性能和穩定性,是一個非常優秀的開源數據庫。

五、 數據庫緩存配置

在上一節中,配置了Kong持久化存儲,顯然如果每次的請求都需要去查詢數據庫中的相關信息那無疑是非常消耗資源,性能和穩定性也會大大降低,作爲一個API網關肯定是不能忍的,解決這個問題的辦法就是緩存,Kong將數據緩存在內存中,這樣會大大提高性能,本節介紹Kong的緩存配置。

配置項 默認值 說明
db_update_frequency 5 節點更新數據庫的時間,以秒爲單位。
這個配置設置了節點查詢數據庫的時間,假如有3臺Kong服務器節點ABC,如果再A節點增加了一個API網關,那麼B和C節點最多需要等待db_update_frequency時間才能被更新到。
db_update_propagation 0 數據庫節點的更新時間。
如果使用了Cassandra數據庫集羣,那麼如果數據庫有更新,最多需要db_update_propagation時間來同步所有的數據庫副本。
如果使用PostgreSQL或者單數據庫,這個值可以被設置爲0
db_cache_ttl 0 緩存生效時間,單位秒。如果設置爲0表示永不過期
Kong從數據庫中讀取數據並且緩存,在ttl過期後會刪除這個緩存然後再一次讀取數據庫並緩存
db_resurrect_ttl 30 緩存刷新時間,單位秒。當數據存儲中的陳舊實體無法刷新時(例如,數據存儲不可訪問),應該對其進行恢復。當這個TTL過期時,將嘗試刷新陳舊的實體。

六、 DNS解析器配置

默認情況下,DNS解析器將使用標準配置文件/etc/hosts/etc/resolv.conf。如果設置了環境變量LOCALDOMAINRES_OPTIONS,那麼後一個文件中的設置將被覆蓋。

配置項 默認值 說明
dns_resolver   配置DNS服務器列表,用半角逗號分割,每個條目使用ip[:port]的格式,這個配置僅提供給Kong使用,不會覆蓋節點系統的配置,如果沒有配置則使用系統的設置。接受IPv4和IPv6的地址。
dns_hostsfile /etc/hosts 配置Kong的hosts文件,這個配置同樣僅提供給Kong使用,不會覆蓋節點系統的配置。
需要說明的是這個文件僅讀取一次,讀取的內容會緩存再內存中,如果修改了此文件,必須要重啓Kong才能生效。
dns_order LAST,SRV,A,CNAME 解析不同記錄類型的順序。“LAST”類型表示最後一次成功查找的類型(用於指定的名稱)
dns_stale_ttl 4 配置DNS記錄緩存過期時間
dns_not_found_ttl 30 這個配置值不知道該如何理解??
dns_error_ttl 1 .....
dns_no_sync off 如果啓用了該項,那麼在DNS緩存過期之後,每一次請求都會發起DNS查詢。在禁用此項時,那麼相同的域名多次請求會同步到一個查詢中共享返回值。

在DNS配置中,我們基本上不需要更改,官網的配置給出了最優的配置。如果我們需要在host文件中定義後端綁定的域名,一定要在編輯hosts文件後重載Kong的配置,或者重啓Kong,無論hosts的文件是否是/etc/hosts,否則都不會生效的。

七、 其他雜項配置

雜項配置基本上關於LUA的配置,如果不熟悉請不要修改,按照官方默認即可。

配置項 默認值 說明
lua_ssl_trusted_certificate   ....
lua_ssl_verify_depth 1 ....
lua_package_path ./?.lua;./?/init.lua; ....
lua_package_cpath   ....
lua_socket_pool_size 30 ....

 

 

 

 

 

一、前言

Kong配置文件是Kong服務的核心文件,它配置了Kong以怎麼的方式運行,並且依賴於這個配置生成Nginx的配置文件,本文通過解讀Kong配置文件,以瞭解Kong的運行和配置。

在成功安裝Kong以後,會有一個名爲kong.conf.default默認的配置文件示例,如果是通過包管理器安裝的,通常位於/etc/kong/kong.conf.default,我們要將其複製爲kong.conf以便於我們修改使用他。

在Kong的配置文件中,約定了以下的幾條規則:

  • 配置文件中以#開頭的行均爲註釋行,程序不會讀取這些內容。
  • 在官方提供的默認配置文件中,以#開頭的有值的配置項目均爲默認配置。
  • 所有的配置項,均可以在系統環境變量中配置,但是必須要加上KONG_爲前綴。
  • 值爲布爾型的配置,可以使用on/off或者true/false
  • 值爲列表的,必須使用半角逗號分割。

Kong的配置,大概分爲幾種,分別是:

  • 常規配置:配置服務運行目錄,插件加載,日誌等等
  • NGINX配置:配置Nginx注入,例如監聽IP和端口配置等等,用於Kong在啓動的時候生成Nginx配置文件
  • 數據庫存儲配置:配數據庫類型,地址、用戶名密碼等等信息
  • 數據庫緩存配置:配置數據的緩存規則,Kong會緩存諸如API信息、用戶、憑證等信息,以減少訪問數據庫次數提高性能
  • DNS解析器配置:默認情況會使用系統設置,如hostsresolv.conf的配置,你也可以通過DNS的解析器配置來修改
  • 其他雜項配置:繼承自lua-nginx模塊的其他設置允許更多的靈活性和高級用法。

下面我們一個模塊一個模塊解釋一下各項的配置。

二、常規配置

在常規配置中,主要是控制Kong一些運行時的一些配置,主要有如下配置:

配置項 默認值 說明
prefix /usr/local/kong/ 配置Kong的工作目錄,相當於Nginx的工作目錄,這個目錄存放運行時的臨時文件和日誌,包括Kong啓動的時候自動生成的Nginx的配置文件。每一個Kong經常必須有一個單獨的工作目錄
log_level notice Nginx的日誌級別。日誌存放
proxy_access_log logs/access.log 代理端口請求的日誌文件,可以設置爲off來關閉日誌的記錄,也可以通過設置絕對路徑也可以設置相對路徑。如果設置了相對路徑,則日誌文件會保存在
proxy_error_log logs/error.log 代理端口請求的錯誤日誌文件,可以設置爲off來關閉日誌的記錄,也可以通過設置絕對路徑也可以設置相對路徑。如果設置了相對路徑,則日誌文件會保存在
admin_access_log logs/admin_access.log Kong管理的API端口請求的日誌文件,可以設置爲off來關閉日誌的記錄,也可以通過設置絕對路徑也可以設置相對路徑。如果設置了相對路徑,則日誌文件會保存在
admin_error_log logs/error.log Kong管理的API端口請求的錯誤日誌文件,可以設置爲off來關閉日誌的記錄,也可以通過設置絕對路徑也可以設置相對路徑。如果設置了相對路徑,則日誌文件會保存在
plugins bundled Kong啓動的時候加載的插件,如果多個必須要使用半角逗號分割。默認情況下,只有捆綁官方發行版本的插件通過 bundled 這個值來加載。加載插件只是Kong在啓動的時候載入插件的代碼,但是並不會使用它,如果要使用他,還必須要通過管理API來配置.當然,如果你不想加載任何插件,可以使用off來關閉它,值得強調的一點bundled值可以和其他插件名稱一起使用,bundled並不是一個插件名稱,它代表了隨官方發行的所有插件。
anonymous_reports on 如果Kong進程發生了錯誤,會以匿名的方式將錯誤提交給Kong官方, 以幫助改善Kong。

在常規的配置中,主要配置了Kong運行的目錄日誌等信息。

無論如何,配置的文件或者目錄Kong必須要用權限訪問,否則會報錯。

三、Nginx注入配置

Kong基於Nginx,當然需要配置Nginx來滿足Kong的運行要求,Kong提供了Nginx的注入配置,使得我們更輕鬆控制。

在Nginx注入配置中,有如下配置:

配置項 默認值 說明
proxy_listen 0.0.0.0:8000, 0.0.0.0:8443 ssl 配置Kong代理監聽的地址和端口,這個是Kong的入口,API調用都將通過這個端口請求。這個配置和Ngxin中的配置一致,通過SSL可以指定接受https的請求. 支持IPv4和IPv6
admin_listen 127.0.0.1:8001, 127.0.0.1:8444 ssl 配置Kong的管理API監聽的端口,和proxy_listen配置一樣,但是這個配置不建議監聽在公網IP上。
nginx_user nobody nobody 配置Nginx的用戶名和用戶組,和Nginx的配置規則一樣
nginx_worker_processes auto 設置Nginx的進程書,通常等於CPU核心數
nginx_daemon on 是否以daemon的方式運行Ngxin
mem_cache_size 128m 內存的緩存大小,可以使用km爲單位
ssl_cipher_suite modern 定義Nginx提供的TLS密碼,可以配置的值有:modern,intermediateoldcustom.
ssl_ciphers   定義Nginx提供的TLS密碼的列表,參考Nginx的配置
ssl_cert   配置SSL證書的crt路徑,必須是要絕對路徑
ssl_cert_key   設置SSL證書的key文件,必須是絕對路徑
client_ssl off
client_ssl_cert  
client_ssl_cert_key  
admin_ssl_cert  
admin_ssl_cert_key  
headers server_tokens, latency_tokens 設置再相應客戶端時候應該注入的頭部,可以設置的值如下:
server_tokens: 注入’Via’和’Server’頭部.
latency_tokens: 注入’X-Kong-Proxy-Latency’和’X-Kong-Upstream-Latency’ 頭部.
X-Kong-<header-name>: 只有在適當的時候注入特定的頭部
這個配置可以被設置爲off。當然,即便設置了off以後,插件依然可以注入頭部
trusted_ips   定義可信的IP地址段,通常不建議在此處限制請求,應該再插件中過濾
real_ip_header X-Real-IP 獲取客戶端真實的IP,將值通過同步的形式傳遞給後端
real_ip_recursive off 這個值在Nginx配置中設置了同名的ngx_http_realip_module指令
client_max_body_size 0 配置Nginx接受客戶端最大的body長度,如果超過此配置 將返回413。
設置爲0則不檢查長度
client_body_buffer_size 8k 設置讀取緩衝區大小,如果超過內存緩衝區大小,那麼NGINX會緩存在磁盤中,降低性能。
error_default_type text/plain 當請求’ Accept '頭丟失,Nginx返回請求錯誤時使用的默認MIME類型。可以配置的值爲:
text/plain,text/htmlapplication/jsonapplication/xml.

在Nginx注入配置中,配置了Nginx的基本的參數,這些參數大部分和NGINX的配置值是一樣的,可以通過Nginx的配置文檔瞭解一下。

四、 數據庫存儲配置

數據庫配置的模塊配置數據庫相關的連接信息等等。主要有如下配置:

配置項 默認值 說明
database postgres 設置數據庫類型,Kong支持兩種數據庫,一種是postgres,一種是cassandra
PostgreSQL配置   如果database設置爲postgres以下配置生效
pg_host 127.0.0.1 設置PostgreSQL的連接地址
pg_port 5432 設置PostgreSQL的端口
pg_user kong 設置PostgreSQL的用戶名
pg_password   設置PostgreSQL的密碼
pg_database kong 設置數據庫名稱
pg_ssl off 是否開啓ssl連接
pg_ssl_verify off 如果啓用了’ pg_ssl ',則切換服務器證書驗證。
cassandra配置   如果database設置爲cassandra以下配置生效
cassandra_contact_points 127.0.0.1
cassandra_port 9042
cassandra_keyspace kong
cassandra_timeout 5000
cassandra_ssl off
cassandra_ssl_verify off
cassandra_username kong
cassandra_password  
cassandra_consistency ONE
cassandra_lb_policy RoundRobin
cassandra_local_datacenter  
cassandra_repl_strategy SimpleStrategy
cassandra_repl_factor 1
cassandra_data_centers dc1:2,dc2:3
cassandra_schema_consensus_timeout 10000

推薦使用PostgreSQL數據庫作爲生產環境的存儲,PostgreSQL具有良好的性能和穩定性,是一個非常優秀的開源數據庫。

五、 數據庫緩存配置

在上一節中,配置了Kong持久化存儲,顯然如果每次的請求都需要去查詢數據庫中的相關信息那無疑是非常消耗資源,性能和穩定性也會大大降低,作爲一個API網關肯定是不能忍的,解決這個問題的辦法就是緩存,Kong將數據緩存在內存中,這樣會大大提高性能,本節介紹Kong的緩存配置。

配置項 默認值 說明
db_update_frequency 5 節點更新數據庫的時間,以秒爲單位。
這個配置設置了節點查詢數據庫的時間,假如有3臺Kong服務器節點ABC,如果再A節點增加了一個API網關,那麼B和C節點最多需要等待db_update_frequency時間才能被更新到。
db_update_propagation 0 數據庫節點的更新時間。
如果使用了Cassandra數據庫集羣,那麼如果數據庫有更新,最多需要db_update_propagation時間來同步所有的數據庫副本。
如果使用PostgreSQL或者單數據庫,這個值可以被設置爲0
db_cache_ttl 0 緩存生效時間,單位秒。如果設置爲0表示永不過期
Kong從數據庫中讀取數據並且緩存,在ttl過期後會刪除這個緩存然後再一次讀取數據庫並緩存
db_resurrect_ttl 30 緩存刷新時間,單位秒。當數據存儲中的陳舊實體無法刷新時(例如,數據存儲不可訪問),應該對其進行恢復。當這個TTL過期時,將嘗試刷新陳舊的實體。

六、 DNS解析器配置

默認情況下,DNS解析器將使用標準配置文件/etc/hosts/etc/resolv.conf。如果設置了環境變量LOCALDOMAINRES_OPTIONS,那麼後一個文件中的設置將被覆蓋。

配置項 默認值 說明
dns_resolver   配置DNS服務器列表,用半角逗號分割,每個條目使用ip[:port]的格式,這個配置僅提供給Kong使用,不會覆蓋節點系統的配置,如果沒有配置則使用系統的設置。接受IPv4和IPv6的地址。
dns_hostsfile /etc/hosts 配置Kong的hosts文件,這個配置同樣僅提供給Kong使用,不會覆蓋節點系統的配置。
需要說明的是這個文件僅讀取一次,讀取的內容會緩存再內存中,如果修改了此文件,必須要重啓Kong才能生效。
dns_order LAST,SRV,A,CNAME 解析不同記錄類型的順序。“LAST”類型表示最後一次成功查找的類型(用於指定的名稱)
dns_stale_ttl 4 配置DNS記錄緩存過期時間
dns_not_found_ttl 30 這個配置值不知道該如何理解??
dns_error_ttl 1
dns_no_sync off 如果啓用了該項,那麼在DNS緩存過期之後,每一次請求都會發起DNS查詢。在禁用此項時,那麼相同的域名多次請求會同步到一個查詢中共享返回值。

在DNS配置中,我們基本上不需要更改,官網的配置給出了最優的配置。如果我們需要在host文件中定義後端綁定的域名,一定要在編輯hosts文件後重載Kong的配置,或者重啓Kong,無論hosts的文件是否是/etc/hosts,否則都不會生效的。

七、 其他雜項配置

雜項配置基本上關於LUA的配置,如果不熟悉請不要修改,按照官方默認即可。

配置項 默認值 說明
lua_ssl_trusted_certificate  
lua_ssl_verify_depth 1
lua_package_path ./?.lua;./?/init.lua;
lua_package_cpath  
lua_socket_pool_size 30

 

文章參考:

https://linuxops.org/blog/kong/config.html

https://blog.csdn.net/luanpeng825485697/article/details/86478837

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章