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

  1. Kong server: Manage API and proxy requests
  2. Data Store: Apache Cassandra、Postgresql or yaml configuration file
  3. Kong Dashboard: Visualization for managenment, monitoring etc.

主要組成

  1. Kong Server:Kong服務,用來進行API網關的代理和管理
  2. 持久化管理數據:Apache Cassandra、Postgresql或配置文件,配置文件支持功能有限。
  3. 可視化管理工具:Kong Dashboard

Feature:

  1. Scalable: Easy to add more server, and you can custom features with plugin anytime
  2. Management: If you have plenty stateless APIs, you'll need to management them
  3. Plugin: Authentication, ACL, Rate limit, Monitor, Logging plugins, AOP features easy to use

特性

  1. 可擴展:可以輕鬆擴展服務器,通過可視化工具/Admin API隨時擴展API。自定義需求可以按照需求加載對應的插件,還可以開發自己的插件。
  2. 易管理:通過一個組件管理微服務,對大量無狀態的Restful API管理十分有效,通過路由配置實現API管理
  3. 模塊功能支持:身份認證插件、安全控制插件、流量插件插件、分析監控插件、日誌插件、協議轉換插件

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的組成架構

Untitled-Diagram

  • 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開源版提供了較少的基礎支持,例如:容器服務發現、聚合微服務等需要配合其它的組件才能完成。由於存在企業版,開源可能不徹底。