Kong的简单了解

前言

在团队现在架构体系中,没有一个能够统一管理和控制 API 的实体。集团虽然提供了负载均衡等最基础的网关能力,但是 API 鉴权等进阶功能,集团并未提供,因此需要考虑是否要自行维护一个网关。Kong是一个著名的开源网关实现,对它进行一些了解。

正文

Kong是什么

  • API 网关
  • 一个在 Nginx 中运行的 Lua 应用
    • Kong的组件
  • Route:是请求的转发规则,按照Hostname和PATH,将请求转发给Service。
  • Services:是多个Upstream的集合,是Route的转发目标。
  • Consumer:是API的用户,里面记录用户的一些信息。
  • Plugin:是插件,plugin可以是全局的,绑定到Service,绑定到Router,绑定到Consumer。

    安装

    安装先决条件 PostgreSQL
    1
    docker run -d --name kong-database -p 5432:5432 -e "POSTGRES_USER=kong" -e "POSTGRES_DB=kong" postgres:9.6

建库

1
docker run --rm --link kong-database:kong-database -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" kong kong migrations bootstrap

安装Kong

1
2
# 如果按下面配置启动成功后Kong会跑几个端口:8000 和 8443 是 Proxy 的端口,也就是对外提供的访问 API 用的端口, 8001 和 8444 是管理端口,也就是用来创建路由、Service 等用的。
docker run -d --name kong --link kong-database:kong-database -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" -e "KONG_PROXY_ERROR_LOG=/dev/stderr" -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" -p 8000:8000 -p 8443:8443 -p 8001:8001 -p 8444:8444 kong

使用

创建 service

创建routes

测试proxy

附录

基本的 docker 操作命令

# 查看所有容器
docker ps -a

# 启动某一容器
docker start <容器ID>

# 停止某一容器
docker stop <容器ID>

# 删除某一容器
docker rm <容器ID>