Kong 的官方有很多詳細的參考說明,比如配置檔案、指令行、Admin API、代理、負載均衡,接下來我們簡單看一下,都提供什麼内容。
本文主要基于 Kong 1.3 版本進行描述,如有更新,請檢視最新文檔。
配置檔案
通過對配置檔案的 深入了解,可以優化 Kong 叢集、使用的資料庫、配置 Nginx ,
官方的參考資料是
Configuration ReferenceKong 在啟動時,可以通過
-c
或者
--conf
參數來指定配置檔案,比如:
kong start -c /path/to/kong.conf
可以使用 check 指令來校驗配置檔案的文法正确性,
$ kong check <path/to/kong.conf>
configuration at <path/to/kong.conf>
is valid
Kong 的配置在加載的時候也會去找同名的環境變量,所有也可以通過環境變量來配置 Kong,而且環境變量的優先級高于配置檔案。可以通過環境變量來配置 Kong 這樣友善了基于容器的部署和運作。如果要使用環境變量,需要以
KONG_
字段開頭。
指令行參考
所提供的CLI(指令行接口)允許您啟動、停止和管理 Kong 執行個體。CLI 可以管理本地節點(如在目前機器上)。可以參考官網文檔
CLI Reference主要由如下指令
全局标記
所有的指令都可以使用如下參數
- --help : 列印指令的幫助資訊
- --v : 打開詳情模式
- --vv : 打開 debug 模式
可用的指令
- kong check 檢查配置檔案文法等等
- kong config 使用申明式配置檔案。
- kong health 檢查該節點上的 kong 是否在運作
- kong migration 管理 Kong 的資料庫
- kong prepare 此指令準備Kong字首檔案夾及其子檔案夾和檔案。
- kong quit 優雅的退出 Kong 執行個體
- kong reload 重載 kong 執行個體配置
- kong restart 重新開機 kong 執行個體
- kong start 啟動 kong 執行個體
- kong stop 停止 kong 執行個體
- kong version 列印版本資訊
Admin API 參考
Admin API 的說明可以參考官網文檔:
Admin API ReferenceAdmin API 接受 2 兩種連接配接類型在每個終端。
分别是
- application/x-www-from-urlencoded
- application/json
共有 9 個對象,分别是:
- Service Object
- Route Object
- Consumer Object
- Plugin Object-Precedence
- Certificate Object
- CA Certificate Object
- SNI Object
- Upstream Object
- Target Object
Proxy 參考
在本文檔中,我們将通過詳細解釋Kong的路由功能和内部工作原理來介紹它的代理功能。
Kong 公開了幾個接口,可以通過兩個配置屬性進行調整:
- proxy_listen,它定義了一個位址/端口清單,Kong将在這些位址/端口上接受來自客戶機的公共通信,并将其代理到您的上遊服務(預設為8000)。
- admin_listen,它還定義了一個位址和端口清單,但是這些應該被限制為隻能由管理者通路,因為它們公開了Kong的配置功能:Admin API(預設情況下為8001)。 Proxy Reference
Kong 經常用到的術語有:
- client : 指下遊客戶向 Kong 代理端口送出請求。
- upstream service :指自己位于 Kong 後面的 API/Service,用戶端請求被轉發到這些API/Service。
- Service : 顧名思義,服務實體是上遊服務的抽象。服務的示例包括資料轉換微服務、計費API等。
- Route : 這是指 Kong 路由實體。Route 是進入 Kong 的入口點,并為要比對的請求定義規則,然後路由到給定的服務。
- Plugin : 指 Kong 的 “plugins”,它是在代理生命周期中運作的業務邏輯片段。插件可以通過管理 API 進行配置——可以是全局的(所有傳入的流量),也可以是在特定的路由和服務上配置。
負載均衡參考
Kong 為多個後端服務提供了多種負載平衡請求的方法: 一種簡單的基于 DNS 的方法,另一種是更動态的環形平衡器,該平衡器還允許在不需要DNS伺服器的情況下進行服務注冊。
負載均衡可以參考官網文檔
Load Balancing Reference來了解。
基于 DNS 的負載均衡
當使用基于 DNS 的負載平衡時,後端服務的注冊是在 Kong 之外完成的,而 Kong 隻接收來自 DNS 伺服器的更新。
如果主機名沒有解析為上遊名稱或 DNS 主機檔案中的名稱,則使用包含主機名(而不是IP位址)的主機定義的每個服務都将自動使用基于 DNS 的負載平衡。
DNS 記錄 ttl 設定(生存時間)決定資訊重新整理的頻率。當使用 ttl 為 0 時,每個請求都将使用自己的 DNS 查詢進行解析。這将帶來性能損失,但是更新/更改的延遲将非常低。
A 記錄
一個 A 記錄對應一個或者多個 IP 位址,是以,當主機名解析為 A 記錄時,每個後端服務必須有自己的IP位址。
因為沒有權重資訊,是以所有條目在負載平衡器中都将被視為同等權重,并且平衡器将進行直接的循環。
SRV 記錄
SRV記錄包含所有IP位址的權重和端口資訊。後端服務可以通過IP位址和端口号的唯一組合來辨別。是以,一個IP位址可以在不同的端口上承載相同服務的多個執行個體。
因為權重資訊是可用的,是以每個條目将在負載平衡器中獲得自己的權重,并執行權重循環。
DNS 的優先級
1、前面解析的最後一個成功類型
2、SRV 記錄
3、A記錄
4、CNAME 記錄
這些可以在配置檔案的
dns_order
進行配置。
基于 Ring-balancer 的負載均衡
使用 Ring-balancer 時,後端服務的添加和删除将由 Kong 處理,不需要 DNS 更新。Kong 将作為服務注冊處。節點可以通過一個HTTP請求添加/删除,并将立即啟動/停止接收流量。
配置 Ring-balancer 工作需要有 Upstream 和 target 兩個實體。
- target : 帶有後端服務所在端口号的IP位址或主機名,例如。“192.168.100.12:80”。每個目标都獲得一個額外的權重,以訓示它獲得的相對負載。IP位址可以是IPv4和IPv6格式。
- upstream : 一個
,可用于路由的virtual hostname
字段,例如一個 upstream 是 weather.v2 會收到服務 host=weather.v2.service 的所有請求。host
小結
本來大緻講述了 Kong 的配置檔案、指令行、代理、負載均衡等内容。