linux

kong 开源微服务 API 网关 - open source microservice API gateway

转战微服务1年多了,前不久老觉得少了点什么,没错,我需要一个 api gateway,说白了,我需要统一管理我的api,比如我对外开放 沙沙野 的api,这些api需要集中管理,另外我们开发了好几个产品,而用户登陆用户信息也需要统一管理,用户身份需要验证,另外,接口修改后其他产品也得修改,而且无法缓存,比如 沙沙野 首页数据可以缓存下,减少查询,另外还有监控、日志等。今天的主题是 介绍 kong 以及我为什么需要 api 网关。

我为什么需要 API Gateway?

首先,我希望我的产品只有一套用户系统,这套系统用于用户注册、登陆,以及用户资料的存储(不同app可以不同资料)仅此而已。接着,我需要统一管理我对外的api、比如 沙沙野 可能会开放API,而API地址不应该直接暴露给用户,因为这些可能会更改,那么就需要一个代理,用户访问它,而它访问我们。类似于中间件,也可以叫作路由,而这个路由上又可以做缓存、监控、日志、访问控制、负载均衡。而这些正是微服务网关做的事。

我为什么选择 kong ?

其实,api 网关的选择可能有很多,但是像我这样的情况,没力气再去自己开发,只能用个开源的, kong 是基于 nginx + lua 差不多和 openresty 类似。维护和使用这样一个系统对于我没啥压力,毕竟 Linux 很熟了。最重要的是 kong 可以实现:身份验证、访问控制、监控、日志、缓存等,具体可以看它的 插件 页面。

kong 默认端口及其作用

8000 和 8443 是 Kong用来监听来自客户端的HTTP/HTTPS 请求的,并将此请求转发到您的上游服务,不过 8443 只监听 HTTPS 请求并不会为你转发。比如你把 HTTP 请求发到 8443 那么 Kong 并不会为你将其转发到 8000

8001 和 8444 是管理员用来配置 Kong的 HTTP/HTTPS 端口,配置 Kong,可将请求发至这里。

kong 怎么安装?

首先,既然我们玩微服务,那么 docker 是必备的了。我这次用的系统是 Manjaro Linux + docker,安装分两大部分,前面部分是安装 kong 后面是安装 dashboard,现在我们继续。

首先,我们把数据库跑起来,用于存储数据,命令如下:

docker run -d --name kong-database \
              --network=host \
              -e "POSTGRES_USER=kong" \
              -e "POSTGRES_DB=kong" \
              postgres:9.6

接着,迁移数据库:

docker run --rm \
    --network=host \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=localhost" \
    -e "KONG_CASSANDRA_CONTACT_POINTS=localhost" \
    kong:latest kong migrations bootstrap
docker run --rm \
    --network=host \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=localhost" \
    -e "KONG_CASSANDRA_CONTACT_POINTS=localhost" \
    kong:latest kong migrations up

 

最后,我们启动 kong:

docker run -d --name kong \
    --network=host \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=localhost" \
    -e "KONG_CASSANDRA_CONTACT_POINTS=localhost" \
    -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" \
    kong:latest

现在,你可以用浏览器访问 http://localhost:8001了,会看到一堆 json 数据,现在安装 dashboard,不过你也可以选择用 konga 来作为gui 管理,具体请看  konga – More than just another GUI to Kong Admin API

docker run --network host --name kong-dashboard -itd pgbi/kong-dashboard start --kong-url http://localhost:8001 --basic-auth user1=password1

现在,你可以用浏览器访问 http://localhost:1991 了,用户名  user1  密码  password1  明天,我们来研究 kong 的身份验证,OAuth 2.0  和  jwt

 

full-stack-trip

Share
Published by
full-stack-trip
Tags: kong

Recent Posts

Android 自定义 View 入门

说来惭愧,工作数年,连基本的自…

4 年 ago

retrofit 同时支持 xml 和 json

retrofit 解析 jso…

4 年 ago

mysql - 存储过程 从入门到放弃

最近有个报表的需求,于是乎用了…

4 年 ago

奶嘴战略 - 你不得不知道的扎心真相(一)

一句:英雄枯骨无人问,戏子家事…

4 年 ago

acme.sh 的简单使用

acme.sh 是纯 shel…

4 年 ago

wrk -更现代化的http压测工具

wrk 是一款更现代化的 ht…

4 年 ago