乐趣区

关于负载均衡:Kong和konga-入门教程

前沿

最近有在学习和理解 kong,明天就和大家来分享下kongkonga

介绍

kong 是一款基于 Nginx_lua 模块写的高可用网关 API,在客户端和服务间转发 API 通信的网关,能够通过插件扩大性能。

简略一句话:kong 是动静增强版的 nginx

看看几个名词

  • Nginx 是模块化设计的反向代理软件,C 语言开发
  • OpenResty 是以Nginx 为外围的 web 开发平台,能够解析执行 Lua 脚本
  • kong 是一个 openResty 利用,一个 api gateway

kong 装置

次要以 docker 形式来部署。以后kong 版本2.3.0

1 . 创立 docker 虚构网络

docker network create kong-net

2 . 运行 postgresql 的数据库

docker run -d --name kong-database \
               --network=kong-net \
               -p 5432:5432 \
               -e "POSTGRES_USER=kong" \
               -e "POSTGRES_DB=kong" \
               -e "POSTGRES_PASSWORD=kong" \
               postgres:9.6

3 . 初始化数据库(迁徙数据)

docker run --rm \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     -e "KONG_PG_USER=kong" \
     -e "KONG_PG_PASSWORD=kong" \
     -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
     kong:latest kong migrations bootstrap

4 . 运行 kong

docker run -d --name kong \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     -e "KONG_PG_USER=kong" \
     -e "KONG_PG_PASSWORD=kong" \
     -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 127.0.0.1:8001:8001 \
     -p 127.0.0.1:8444:8444 \
     kong:latest

5 . 验证是否装置胜利

// 在宿主机上运行
curl -i http://localhost:8001/

返回上面内容

HTTP/1.1 200 OK
Date: Mon, 05 Apr 2021 08:37:24 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
Content-Length: 10452
X-Kong-Admin-Latency: 20215
Server: kong/2.3.0

............

示意装置正确,能够失常应用 kong

kong 的使用

kong 能够动静的生成 nginx的配置文件,上面咱们来演示一下

一个典型的 nginx 配置文件

upstream demoupstream {server localhost:3000 weight=100;}
server {
        listen 8000;
        server_name  demo.com;
        location /demo {proxy_pass http://demoupstream;}
}

下面的简略 Nginx 配置,能够转为如下kong 配置

1 . 配置 Upstream

curl -X POST http://localhost:8001/upstreams --data "name=demoupstream"

2 . 配置 target

curl -X POST http://localhost:8001/upstreams/demoupstream/targets --data "target=localhost:3000" --data "weight=100"

3 . 配置 service

curl -X POST http://localhost:8001/services --data "name=demo" --data "host=demoupstream" --data "url=http://demo.com/"

4 . 配置 route

curl -X POST http://localhost:8001/services/demo/routes --data "paths[]=/demo" --data "hosts[]=demo.com"

当然啦,你能够吧 8000 端口改为相熟的 80 端口,只有在启动 kong 的时候 将映射端口批改下就能够了。

5 . 验证

curl -i http://localhost:8000/demo --header host:demo.com

⚠️留神:下面的 target 端口要本地可拜访的,域名 hosts 记得配置

概念术语介绍

  • upstream : 是对上游服务器的形象
  • target:代表了一个物理服务,是 IP + port 的形象
  • service:是形象层面的服务,他能够间接映射到一个物理服务(host 指向 ip + port), 也能够指向一个 upstream 来做到负载平衡
  • route:是路由的形象,他负责将理论的 request 映射到 service

Kong 默认监听的端口

  • 8000:监听来自客户端的HTTP 流量,转发到你的 upstream 服务上
  • 8443:监听 HTTPS 的流量,性能跟 8000一样,能够通过配置文件禁止。
  • 8001kongHTTP 监听的 admin api 治理接口
  • 8444kongHTTPS 监听的 admin api 治理接口

konga

下面都是命令行的,有没有什么直观的图形界面呢?

有的,比拟火的就是 konga 了,官网是免费,咱们能够用社区贡献者的

konga 地址

咱们以 docker 来装置

1 . Konga 也须要创立数据库,这里咱们创立和迁徙数据一起实现

docker run --rm pantsel/konga:latest -c prepare -a postgres -u postgresql://kong:kong@192.168.1.102:5432/konga

解释下参数 kong:kong@192.168.1.102:5432/konga 用户名:明码 @数据库 ip: 端口 / 数据库名称

2 . 启动 konga

docker run -p 1337:1337 \
        --network kong-net \
        --name konga \
        -e "NODE_ENV=production"  \
        -e "DB_ADAPTER=postgres" \
        -e "DB_URI=postgresql://kong:kong@192.168.1.102:5432/konga" \
        pantsel/konga

这边的参数就比较简单了,具体能够看下面官网链接

3 . 验证

浏览器拜访 http://localhost:1337/

注册进入就能够看到如下界面了

图中的 Name 能够随便起,kong Admin URl 就是拜访 kong 的 admin api 外面填 http://kong:8001

激活之后就能够看到你后面创立的 上游,服务,路由这些啦。

大家游玩起来吧,还心愿看更多的能够拜访 kong 官方网站接着学习

致谢

感激你看完这篇文章,有什么不对的中央欢送指出,谢谢🙏

退出移动版