微服务开发及部署_简简单单基于docker部署微服务网关

本文整理于今年3月,收录在个人开源仓库JavaScriptCollection中,其中很多概念不乏借鉴、摘抄自官网,便于复习相关概念,有兴趣的可以直接去仓库Clone文档学习、参考!

基本概念

Kong 是在客户端和(微)服务间转发API通信的API网关,通过插件扩展功能。Kong 有两个主要组件:

  • Kong Server :基于nginx的服务器,用来接收 API 请求。

  • Apache Cassandra:用来存储操作数据。

可以通过增加更多 Kong Server 机器对 Kong 服务进行水平扩展,通过前置的负载均衡器向这些机器分发请求。根据文档描述,两个Cassandra节点就足以支撑绝大多数情况,但如果网络非常拥挤,可以考虑适当增加更多节点。

对于开源社区来说,Kong 中最诱人的一个特性是可以通过插件扩展已有功能,这些插件在 API 请求响应循环的生命周期中被执行。插件使用 Lua 编写,而且Kong还有如下几个基础功能:HTTP 基本认证、密钥认证、CORS( Cross-origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API 请求限流、请求转发以及 nginx 监控。

Kong可运行在某些 Linux 发行版、Mac OS X 和 Docker 中,无论是本地机还是云端服务器皆可运行。

Kong是一个在Nginx运行的Lua应用程序,由lua-nginx-module实现。Kong和OpenResty一起打包发行,其中已经包含了lua-nginx-module。OpenResty不是Nginx的分支,而是一组扩展其功能的模块。

kong可以在多种环境下进行安装部署,官方对于不同的环境都有说明,支持的环境有:

0899e1fc067216f6ceb7e5b539410412.png

应用场景

简单来说,kong作为API网关,作用无非就是提供API路由服务;当然,kong通过一些组件、插件可以实现路由认证、路由管理,也能完成熔断、限流等操作。因此kong的应用场景非常丰富;功能强大的kong,目前我运用到的功能其实还是鲜少的,强大的功能就有待后续去学习了,先不展开了,可以看看官网...

最后,由于目前自己的网站项目部署都是基于docker的,所以后面会提供相应的docker部署方式.如果是集群不是,也会相应的总结一套docker-compose方式,进行文档说明.

这篇文章将详细讲解docker下部署kong服务的过程,会涉及到一些docker操作,在阅读前默认已熟练docker的基础使用

安装说明

在前面已经有关于kong的简单介绍,kong的实质其实是基于nginx开发的网关,不过相比nginx反锁的配置,kong通过插件甚至可视化的图形界面管理,简化了网关搭建、使用的过程。并通过数据库的形式,对配置进行持久化保存,提高了整体效率。

如果你阅读过官网相关的说明,kong可以在多种环境下进行部署,本文将围绕docker展开

安装过程

创建网络

这里提到的创建网络,实质是docker容器中网关的创建,docker有bridge、host等通信方式,先创建基本的bridge网络,实现docker容器间的数据通信、访问。

## 网络名称为kong-net
docker network create kong-net
## 查看网络
docker nerwork ls

实际效果:

b8ddfee2918a7a4a53dfb582656321d4.png

创建数据库

kong作为网关,需要保留相关的路由配置信息,因此需要用到数据库,目前官方支持Cassandra、PostgreSQL两种作为数据库,以此来构建容器服务,这里采用PostgreSQL构建kong-database容器,方便后续使用

## 构建kong-database
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
## POSTGRES_USER 数据库用户名
## POSTGRES_PASSWORD 数据库密码
## POSTGRES_DB 初始数据库

从上面的docker命令可以看出,构建名为kong-database的数据库容器,暴露端口为5432,同时接入kong-net桥接网络里面(其实还可以指定ip)

实际效果:

1f7d0c15e9185a4f9b36a1cb0546025c.png

迁移数据库

在前面的kong-database中只是简单创建了名为kong的数据库,并没有对数据库里面的表进行很好的结构约束,因此可以用官方提供的docker指令,迁移数据库,定义好表的各种结构

## 数据库迁移
docker run --rm \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     -e "KONG_PG_PASSWORD=kong" \
     -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
     kong:latest kong migrations bootstrap
## KONG_DATABASE 迁移数据库名称
## KONG_PG_HOST 数据库容器名称
## KONG_PG_PASSWORD 数据库用户密码

需要注意的是,KONG_PG_HOST是需要要求kong-database容器和迁移容器在一个docker network网段内,此处可以使用容器名进行访问,完全是依赖docker网关,在相同的一个桥接网络下,实现容器互相访问

部署kong
## 部署kong
docker run -d --name kong \
     --network=kong-net \
     -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" \
     -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
## KONG_PG_HOST 数据库容器名称

上面的指令,需要暴露8000、8001、8443、8444四个端口,其中应用端口为8000和8443 ,分别代表着http和https请求;管理端口为8001和8444,也是分别支持http和https

实际效果:

982cd4db4347db555b67cb5e7f2254ec.png

检验kong

检验kong及对应的数据库是否安装成功,可以执行docker ps指令查看当前正在运行的容器,如果有确实且重启后依然没有效果,那么安装过程一定有问题,需要自己细心检查;

在保证容器正常运行的情况下,可以直接访问8000端口,查看相关效果;

http://you-ip:8000

da1ac241c033e11461eb680e6c36ca83.png

因为目前没有进行路由设置,所以应用端也就没有匹配到路由;

http://you-ip:8001

b02df02360ae2f1f79c9a3d57606deac.png

访问管理端口时,可以看到有关kong的很多配置和插件,这里没有一一列举,自己可以好好尝试。至此,kong的简单部署操作也就告一段落。后续讲解有关konga的部署

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值