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


相关推荐
金刚猿1 小时前
openfeign 拦截器实现微服务上下文打通
微服务·云原生·架构
lcw_lance1 小时前
技术中台-核心技术介绍(微服务、云原生、DevOps等)
微服务·云原生·devops
lcw_lance2 小时前
业务中台-典型技术栈选型(微服务、容器编排、分布式数据库、消息队列、服务监控、低代码等)
数据库·分布式·微服务
秋野酱2 小时前
基于javaweb的SpringBoot自习室预约系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
Naylor2 小时前
微服务概述
微服务·架构·springcloud
weloveut2 小时前
西门子WinCC Unified PC的GraphQL使用手册
后端·python·graphql
蒂法就是我3 小时前
详细说说Spring的IOC机制
java·后端·spring
秋野酱4 小时前
基于javaweb的SpringBoot高校图书馆座位预约系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
HWL56795 小时前
Express项目解决跨域问题
前端·后端·中间件·node.js·express
-曾牛5 小时前
Spring AI 集成 Mistral AI:构建高效多语言对话助手的实战指南
java·人工智能·后端·spring·microsoft·spring ai