微服务系列之网关(一) kong及管理界面konga的安装部署

1.网关概述

  微服务架构系统少则十几,多则成百上千个服务组成,除了少部分内部基础服务之外,大部分都是客户端调用,在没有网关之前,客户端需要把所用到的服务,都配置到一个配置文件里,少的时候还行,多的时候,维护起来相当麻烦,容易出错,尤其服务地址发生迁移变化的时候,这时候网关最实用也最常用的功能就体现出来了,就是请求分发,客户端只需要配置一个网关地址即可,需要什么服务的时候,网关+服务名称+path即可。

  网关当然不只是进行流量分发这么简单,本身也提供负载均衡机制,由于请求过来进行转发,就像api服务中的过滤器,面向切面,所以也就可以统一身份认证、监控、缓存、流量日志、限流熔断、聚合查询等能力。

  目前比较流行的网关,有基于Openresty的kong,基于GO的Tyk,基于java的gateway,从开源社区活跃度上看kong较好,查阅资料对比,性能上kong也是领先的,并且基于定制化插件实现扩展功能,目前已有几个基础功能:HTTP基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及Nginx监控,gateway这种纯java编写的,更偏向于业务,于微服务架构整合更好,毕竟是srping cloud全新提供的网关,但是我们的技术栈是.net core,当然也可以使用gateway做网关(目前在职公司就是),但是此系列文章围绕.net core体系展开,并且所需是高性能分发、限流等一些常用能力,所以选择kong。

 

2.kong网关简介

  Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。

github: https://github.com/Kong/kong

官方文档: https://docs.konghq.com

3.kong安装

  环境:ubuntu2.0系统,基于docker运行

  (1)创建docker网络

docker network create kong-net

  (2)Kong支持PostgreSQL、Cassandra、DB-less(无数据库)3种数据库模式,这里选择PostgreSQL

docker run -d --name kong-database \ 数据库容器名称

--network=kong-net \ 指定刚才创建的docker网络

-p 5432:5432 \ 映射物理IP

-e "POSTGRES_USER=kong" \ 设置数据库用户名

-e "POSTGRES_DB=kong" \ 数据库名称

postgres:9.6

  (3)初始化或迁移数据库

docker run --rm \

--network=kong-net \
-e "KONG_DATABASE=postgres" \ 选择postghres数据库
-e "KONG_PG_HOST=kong-database" \ 指定刚才创建的数据库名称
-e "KONG_PG_PASSWORD=kong" \ 设置密码
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \ 
kong:latest kong migrations bootstrap

  (3)启动kong容器

docker run -d --name kong \ 容器名称
--network=kong-net \ 指定的docker网络
-e "KONG_DATABASE=postgres" \ 指定的数据库类型
-e "KONG_PG_HOST=kong-database" \ 指定刚才的数据库容器名称
-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" \ 后台错误日志目录
-v /var/kong/logs:/usr/local/kong/logs 将kong日志目录映射到我们创建的目录,如果需要的话,开启,,这个方便分布式日志采集
-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:latest kong镜像

  Kong默认端口有
  8000:监听来自客户端的http,并转发给上游服务器
  8443:监听来自客户端的https请求,并转发给上游服务器
  8001:监听来自Admin API的http请求
  8444:监听来自Admin API的https请求

  都完成后使用 docker container ls -a 列出docker列表

  (4) 使用kong自带的restfulApi测试

curl -i -X GET --url http://127.0.0.1:8001/services    //获取所有服务

  

至此kong安装完毕

4.kong管理界面

  kong网关自身的管理界面属于付费的应用,而第三方界面又非常少,konga算是相对比较好的一款了,虽然也有一些问题,但整体的功能还比较全,github仓库为:https://github.com/pantsel/konga,konga支持两种方式部署分别是docker和nodejs原生部署,我们使用docker方式部署。

  (1)同样先运行konga数据库容器

docker run -d --name konga-database \ konga数据库容器名称
--network=kong-net \ 指定之前的网络
-p 5433:5432 \
-v konga-postgresql:/var/lib/postgresql/data \ 数据库卷位置
-e "POSTGRES_USER=konga" \
-e "POSTGRES_DB=konga" \
-e "POSTGRES_PASSWORD=konga" \
postgres:9.6 这里必须是9.6

  (2)初始化konga数据库

docker run --rm --network=kong-net \
pantsel/konga:latest -c prepare -a postgres -u postgres://konga:konga@konga-database:5432/konga

  (3)运行konga容器

docker run -d -p 1337:1337 \ 映射本地IP
--network kong-net \ 指定网路
-e "DB_ADAPTER=postgres" \
-e "DB_URI=postgres://konga:konga@konga-database:5432/konga" \
-e "NODE_ENV=production" \
-e "DB_PASSWORD=konga" \
--name konga \
pantsel/konga

完成后,使用docker container ls -a 列出docker列表

我这里是腾讯云,防火墙规则,增加1337端口,访问公网IP:1337

首次进来,正常注册就行,然后登录进去。

然后新建连接,让konga连接我们部署的kong

这里URL注意一下,kong地址,是不允许被外网访问的,但是可以通过docker容器名称,进行内网连接

  

由此,kong与konga安装结束

 

posted on 2022-09-06 15:23  CL静淡  阅读(3320)  评论(0编辑  收藏  举报

导航