Kong - The Microservice API Gateway

1,069 阅读2分钟
原文链接: zhuanlan.zhihu.com

由于众所周知的原因,架设在 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: '2'
services:
  pg: 
    image: postgres:9.4
    ports: 
      - 5432:5432    
    environment:
      - POSTGRES_USER=kong
      - POSTGRES_DB=kong   
      - POSTGRES_PASSWORD=suyi
    volumes:
      - kong-pg:/var/lib/postgresql/data
    networks:
      - docker_kong

  kong:
    image: kong:latest
    # command: kong migrations up
    ports: 
      - 9000:8000
      ## - 9001:8001
      - 9443:8443
      # - 9444:8444
    environment:
      - KONG_DATABASE=postgres
      - KONG_PG_HOST=pg
      - KONG_PG_USER=kong
      - KONG_PG_PASSWORD=suyi
      - KONG_PG_DATABASE=kong
    depends_on:
      - pg
    networks:
      - docker_kong
  dashboard: 
    image: pgbi/kong-dashboard:v2
    ports: 
      - 9080:8080      
    networks:
      - docker_kong
  
networks:
  docker_kong:
    driver: bridge           

volumes:
  kong-pg:     

其实官方的文档写的已经很完整了,我这里只是贴一下自己的配置~

3. Setup

浏览器打开 Dashboard,填写下面的地址即可使用了

http://kong:8001

3.1 安全配置

3.1.1 添加一条新的API

- name: kong-admin
- uris: /admin-api
- upstream url: http://kong:8001

3.1.2 给这个 API 配置一个 plugin , 简单起见,我们就只配 basic-auth 即可

3.1.3 Consumers 下添加一个用户

3.1.4 点右下角编辑,重新地址如下即可

http://kong:8000/admin-api

3.1.5 重新配置一下docker,隐藏 8001/8444 的端口吧,如果有空闲的端口,在物理机上应该配置成 80:8000/443:8443(当然,有lb在前面的话,只对外保留:8000 就够了)

4 . More

集群啊,负载均衡,高可用什么的,看文档吧~

Kong 插件很多,按需使用吧,不满足需求的,用LUA开撸呗~