微服务系列(一)之网关 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安装结束


相关推荐
java小吕布1 小时前
Java中的排序算法:探索与比较
java·后端·算法·排序算法
Goboy2 小时前
工欲善其事,必先利其器;小白入门Hadoop必备过程
后端·程序员
李少兄2 小时前
解决 Spring Boot 中 `Ambiguous mapping. Cannot map ‘xxxController‘ method` 错误
java·spring boot·后端
代码小鑫2 小时前
A031-基于SpringBoot的健身房管理系统设计与实现
java·开发语言·数据库·spring boot·后端
Json____2 小时前
学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
前端·后端·学习·小程序·uni-app·学法减分·驾考题库
monkey_meng3 小时前
【Rust类型驱动开发 Type Driven Development】
开发语言·后端·rust
落落落sss3 小时前
MQ集群
java·服务器·开发语言·后端·elasticsearch·adb·ruby
Smile丶凉轩3 小时前
微服务即时通讯系统的实现(客户端)----(1)
微服务·云原生·架构
大鲤余3 小时前
Rust,删除cargo安装的可执行文件
开发语言·后端·rust
她说彩礼65万3 小时前
Asp.NET Core Mvc中一个视图怎么设置多个强数据类型
后端·asp.net·mvc