微服务系列(一)之网关 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: github.com/Kong/kong

官方文档: docs.konghq.com

3.kong安装

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

(1)创建docker网络

lua 复制代码
docker network create kong-net

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

css 复制代码
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)初始化或迁移数据库

ini 复制代码
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容器

diff 复制代码
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测试

css 复制代码
curl -i -X GET --url http://127.0.0.1:8001/services    //获取所有服务

至此kong安装完毕

4.kong管理界面

**** kong网关自身的管理界面属于付费的应用,而第三方界面又非常少,konga算是相对比较好的一款了,虽然也有一些问题,但整体的功能还比较全,github仓库为:github.com/pantsel/kon...

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

css 复制代码
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数据库

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

(3)运行konga容器

diff 复制代码
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安装结束


相关推荐
文艺理科生6 分钟前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
前端·后端·架构
千寻girling7 分钟前
主管:”人家 Node 框架都用 Nest.js 了 , 你怎么还在用 Express ?“
前端·后端·面试
南极企鹅9 分钟前
springBoot项目有几个端口
java·spring boot·后端
Luke君6079710 分钟前
Spring Flux方法总结
后端
define952714 分钟前
高版本 MySQL 驱动的 DNS 陷阱
后端
忧郁的Mr.Li1 小时前
SpringBoot中实现多数据源配置
java·spring boot·后端
惊讶的猫1 小时前
OpenFeign(声明式HTTP客户端)
网络·网络协议·http·微服务·openfeign
暮色妖娆丶2 小时前
SpringBoot 启动流程源码分析 ~ 它其实不复杂
spring boot·后端·spring
鹏北海2 小时前
micro-app 微前端项目部署指南
前端·nginx·微服务
Coder_Boy_2 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例中相关概念
java·人工智能·spring boot·后端·spring