在1.x版本中,kong的集羣其實是通過運行多個實例,訪問同一個數據庫來實現的。具體表現爲
- 定時輪詢數據庫,獲取最新的 Services,Routes,Consumers,Plugins等信息,並緩存它們,直到下一次請求數據庫時再更新數據
- 如果某個節點通過admin api對數據庫中保存的代理配置進行更改,這個節點本身會立即生效,但其他節點需要等到下一次輪詢時纔會獲取最新的數據
到了2.0版本,kong提供了 混合模式 來部署kong集羣
在這種模式下,kong的節點被分爲兩種角色,分別是控制節點CP
和數據節點DP
控制節點 CP
用於提供admin api,負責直接連接數據庫並管理各種代理配置。它監聽兩個端口
- admin_listen (默認8001): 原來的admin api
- cluster_listen (默認8005): 用於與數據節點DP連接,提供最新的配置
數據節點 DP
提供代理的服務,但是代理配置不再從數據庫直接獲取,而是通過連接 CP 進行獲取
監聽端口
- proxy_listen (默認8000) :提供代理服務
混合模式的優點
相較於1.x版本的集羣,現在的混合模式有以下優點
- 減少數據庫訪問量:現在只有CP節點直接連接數據庫
- 提高安全性:一個DP節點的服務器遭受入侵不會影響到其他的DP節點
- 易於管理:只需要通過CP節點就可以獲取集羣狀態信息
安裝步驟
1. 生成證書/祕鑰對
首先生成證書/祕鑰對保證CP與DP之間的通信安全
- 執行命令
kong hybrid gen_cert
在當前目錄下生成cluster.crt
和cluster.key
這兩個文件
將這兩個文件傳輸到所有需要部署CP和DP節點的服務器上
2. 部署CP節點
- 複製默認配置
cd /etc/kong
cp kong.conf.default cp.conf
vim cp.conf
- 修改配置文件
role = control_plane #指定爲CP節點
#上一步生成的文件路徑
cluster_cert = cluster.crt
cluster_cert_key = cluster.key
# 還需要指定數據庫配置
# database = postgres
# pg_host =
# pg_password =
- 啓動
kong start -c /etc/kong/cp.conf
- -c 後面填自己改的配置文件名
3. 部署多個DP節點
- 修改配置文件
role = data_plane #指定爲DP節點
cluster_control_plane = CP的ip:8005
database = off
#第一步生成的文件路徑
cluster_cert = cluster.crt
cluster_cert_key = cluster.key
lua_ssl_trusted_certificate = cluster.crt
- 啓動
kong start -c /etc/kong/dp.conf
- -c 後面填自己改的配置文件名
備註: CP節點不能夠再作爲代理服務,如果需要在CP節點所在的服務器再部署一個DP節點的話,需要更改配置 prefix
來區分它們的工作目錄(它們的端口號不衝突,無需修改)
4. 檢查集羣狀態
- 訪問
http://{{cp節點ip}}:8001/clustering/status
就可以查看當前集羣中有幾個數據節點加入了
混合模式部署的官方文檔地址 https://docs.konghq.com/2.0.x/hybrid-mode/