Kong - The Microservice API Gateway

由於眾所周知的原因,架設在 HK 服務沒法使用 https 訪問了,故搭建一套私有API 網關。

1 . Kong

The open-source API Gateway and Microservices Management Layer, delivering high performance and reliability.

Backed by the battle-tested NGINX with a focus on high performance, Kong was made available as an open-source platform in 2015. Under active development, Kong is used in production at thousands of organizations from startups, Global 5000 and Government organizations.

技術層面的東西,想了解童鞋可以自行搜索或點擊文末的鏈接,這裡不再廢話了~

簡單說下使用場景:

  1. Nginx 反向代理的替代品(手動配 Proxy 數量多了真蛋疼啊)
  2. 微服務場景下的動態路由實現
  3. 因為資料庫的存在以及 Nginx+LUA 的存在,認證可以放在nginx層面來處理;日誌也可以動態配置;其次,限流限速自然不在話下;更甚者,對請求/返回數據做做處理也不在話下嘍~

總的來說,就是讓 nginx 擁有了編程能力,做什麼,看需求吧~

2 . Install

version: 2nservices:n pg: n image: postgres:9.4n ports: n - 5432:5432 n environment:n - POSTGRES_USER=kongn - POSTGRES_DB=kong n - POSTGRES_PASSWORD=suyin volumes:n - kong-pg:/var/lib/postgresql/datan networks:n - docker_kongnn kong:n image: kong:latestn # command: kong migrations upn ports: n - 9000:8000n ## - 9001:8001n - 9443:8443n # - 9444:8444n environment:n - KONG_DATABASE=postgresn - KONG_PG_HOST=pgn - KONG_PG_USER=kongn - KONG_PG_PASSWORD=suyin - KONG_PG_DATABASE=kongn depends_on:n - pgn networks:n - docker_kongn dashboard: n image: pgbi/kong-dashboard:v2n ports: n - 9080:8080 n networks:n - docker_kongn nnetworks:n docker_kong:n driver: bridge nnvolumes:n kong-pg: n

其實官方的文檔寫的已經很完整了,我這裡只是貼一下自己的配置~

3. Setup

瀏覽器打開 Dashboard,填寫下面的地址即可使用了

http://kong:8001n

3.1 安全配置

3.1.1 添加一條新的API

- name: kong-adminn- uris: /admin-apin- upstream url: http://kong:8001n

3.1.2 給這個 API 配置一個 plugin , 簡單起見,我們就只配 basic-auth 即可

3.1.3 Consumers 下添加一個用戶

3.1.4 點右下角編輯,重新地址如下即可

http://kong:8000/admin-apin

3.1.5 重新配置一下docker,隱藏 8001/8444 的埠吧,如果有空閑的埠,在物理機上應該配置成 80:8000/443:8443(當然,有lb在前面的話,只對外保留:8000 就夠了)

4 . More

集群啊,負載均衡,高可用什麼的,看文檔吧~

Kong 插件很多,按需使用吧,不滿足需求的,用LUA開擼唄~


推薦閱讀:

varnish / squid / nginx cache 有什麼不同?
Nginx反向代理為什麼可以提高網站性能?
nginx配置https
如何解讀Nginx源碼?
假如有一張100W左右數據的表,根據查詢條件進行分頁。如何分頁?

TAG:微服务架构 | 后端技术 | Nginx |