What does kong do?
Kong is a API gateway component base on OpenResty, privider high availability and extendable architecture. Kong support Apache Cassandra and Postgresql for persistence.
Kong簡介
Kong是基於OpenResty開發的高可用、易擴展的API Gateway。OpenResty是基於Nginx和Lua的高性能平台。狀態持久化可選Apache Cassandra或Postgresql,使用Restful API管理kong系統。
Components
- Kong server: Manage API and proxy requests
- Data Store: Apache Cassandra、Postgresql or yaml configuration file
- Kong Dashboard: Visualization for managenment, monitoring etc.
主要組成
- Kong Server:Kong服務,用來進行API網關的代理和管理
- 持久化管理數據:Apache Cassandra、Postgresql或配置文件,配置文件支持功能有限。
- 可視化管理工具:Kong Dashboard
Feature:
- Scalable: Easy to add more server, and you can custom features with plugin anytime
- Management: If you have plenty stateless APIs, you'll need to management them
- Plugin: Authentication, ACL, Rate limit, Monitor, Logging plugins, AOP features easy to use
特性
- 可擴展:可以輕鬆擴展服務器,通過可視化工具/Admin API隨時擴展API。自定義需求可以按照需求加載對應的插件,還可以開發自己的插件。
- 易管理:通過一個組件管理微服務,對大量無狀態的Restful API管理十分有效,通過路由配置實現API管理
- 模塊功能支持:身份認證插件、安全控制插件、流量插件插件、分析監控插件、日誌插件、協議轉換插件
Plugins:
插件:
- Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication
- ACL, CORS, Dynamic SSL, IP Restrict
- Rate Limit
- Protocol translate
- Logging
- 身份認證:Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication
- 安全控制插件:ACL,CORS,動態SSL,IP restrict
- 流量控制:基於請求數量,upstream相應數量,請求大小限制等提供限流支持
- 分析監控插件:分析請求數量,延遲,調用鍊等
- 協議轉換:請求轉換、響應轉換
- 日誌:支持多種日誌記錄方式
Architecture of Kong
Kong的組成架構
- Route: The api path to access, kong also allow http header route
- Plugin:
- Service: The abstract api service
- Upstream: Nginx Upstream, LB/HA
- Target: The resource owner to be a server with ports
- Route:Restful API 路徑配置,對應到一個服務上去
- Plugin:插件
- Service:對訪問目標的抽象,一個Service可以是一個API/微服務
- Upstream:Nginx的Upstream,提供負載均衡、高可用等支持
- Target:訪問目標,一般指具體的虛擬機或服務器
Service-Routes: 1-*
Service-Upstream:1-1
Upstream-target:1-*
一個服務對應多個路由,服務對應一個Upstream,一個Upstream可以包含多個Target。
- Tag:對Entity/Object進行分組,易於管理,上述組成已經抽象為Object
- Certificate:公鑰和密鑰對應的安全策略
- CA Certificate:權威認證的SSL證書
- SNI:一個通配證書對應多個服務器綁定的關係描述
Tag: It's category for objects, like namespace in other system
Certificate: public key/private key, use for security like Https/SSL
CA Certificate: Https client access
SNI: Relationship information of cert to servers
服務配置CA證書可以實現加密訪問(SSL)Https,Certificate可以保持服務器內部調用的SSL支持。
- Consumer: Indicate who will comsume requests
- Consumer:指定一組Object服務於特性的消費(特定的業務使用特定的Object),實現業務流程的可配置
If you want advance features, you may want to see enterprise edition or develop plugins.
基於以上特性,可以構建靈活的服務體系,當然,Kong開源版提供了較少的基礎支持,例如:容器服務發現、聚合微服務等需要配合其它的組件才能完成。由於存在企業版,開源可能不徹底。