本文整理于今年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可以在多种环境下进行安装部署,官方对于不同的环境都有说明,支持的环境有:

应用场景

简单来说,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-netdocker network create kong-net## 查看网络docker nerwork ls

实际效果:

创建数据库

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

## 构建kong-databasedocker 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)

实际效果:

迁移数据库

在前面的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

## 部署kongdocker 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

实际效果:

检验kong

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

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

http://you-ip:8000

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

http://you-ip:8001

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

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

  1. pg安装部署linux_简简单单基于docker部署微服务网关

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

  2. docker容器 eureka 集成_微服务:基于 Docker 的微服务架构之分布式企业级实践参考...

    编者按:本文分享自CSDN技术博客,作者为 FlyWine,所有权归原著者.若有不妥,联系本头条号以做必要处理. 目录 Microservice 和 Docker 服务发现模式 客户端发现模式 Net ...

  3. 基于 Docker 的微服务架构实践

    http://dockone.io/article/4887 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Do ...

  4. 基于 Docker 的微服务架构

    基于 Docker 的微服务架构-分布式企业级实践 前言 Microservice 和 Docker 服务发现模式 客户端发现模式 Netflix-Eureka 服务端发现模式 Consul Etcd ...

  5. 基于docker部署的微服务架构(九): 分布式服务追踪 Spring Cloud Sleuth

    为什么80%的码农都做不了架构师?>>>    前言 微服务架构中完成一项功能经常会在多个服务之间远程调用(RPC),形成调用链.每个服务节点可能在不同的机器上甚至是不同的集群上,需 ...

  6. JAVA SpringBlade 微服务开发平台框架,企业级的SaaS多租户微服务平台,基于Spring Boot 2.7

    SpringBlade微服务开发平台 完整代码下载地址:JAVA SpringBlade 微服务开发平台框架,企业级的SaaS多租户微服务平台 采用前后端分离的模式,前端开源两个框架:Sword (基 ...

  7. 创建微服务架构的步骤_如何快速搭建一个微服务架构?

    原标题:如何快速搭建一个微服务架构? 微服务火了很久,但网上很少有文章能做到成熟地将技术传播出来,同时完美地照顾"初入微服务领域人员",从 0 开始,采用通俗易懂的语言去讲解微服务 ...

  8. 学霸君基于Docker的微服务架构设计

    以下内容根据演讲PPT以及现场分享整理而成. 今天主要分享的是我们在实践微服务架构或者容器架构过程中踩过的坑,对于致力在容器技术方面进行探索的同学会有很大帮助.本次将站在整体的角度,分享如何去运维整个 ...

  9. 让ERP的服务更开放! ——用微服务架构搭建的一套基于EBS的API服务系统

    1. 源码下载地址 源码链接: https://github.com/samt007/xygerp-api-demo 这是用Spring Cloud微服务架构搭建的一套基于EBS的API服务系统 如对 ...

最新文章

  1. mysql query 查询失败_如何在mysql进行查询缓存及失败的解决方法
  2. 让ASPX和ASMX脱离IIS运行的例子(ASP.NET宿主程序)
  3. Android中WebView加载sdcard中的html显示
  4. php 获取http headers
  5. Java调用百度识别身份证接口
  6. Python中json模块的使用,以及json.loads()和json.dumps()的区别
  7. java接口文件定义类_Java入门笔记(四)类、包和接口
  8. 关于Redis Cluster的几个问题
  9. mysql日志存储类型_msyql 日志分类、存储、慢查询日志
  10. Java查看内存使用情况
  11. 第88章、系统服务之NOTIFICATION_SERVICE服务(从零开始学Android)
  12. vscode 学习(四)如何设置右键使用vscode打开
  13. input 正则控制输入
  14. grid布局浏览器兼容_grid布局适配IE
  15. 神舟八号利用计算机进行飞行状态调整属于,“神舟八号”飞船利用计算机进行飞行状态调整属于____。...
  16. docker中mysql数据库闪退的原因
  17. iPhone越狱后导致无法快充的问题,iPhone X无法18瓦快充
  18. 类似蘑菇街、迷尚的流瀑布图片展示Demo
  19. 2020-08-06词汇
  20. dp和sp的区别 以及字体

热门文章

  1. 微测检测Qi 1.3最新版本预测试服务全面上线
  2. About Google
  3. Table实现表头固定
  4. 新增FacesetEnhancer(脸图增强器) DeepFaceLab更新至2019.12.26
  5. 文献阅读记录(忆阻器篇)
  6. STM32芯片读保护解锁
  7. x86_64 OpenWrt/LEDE 环境下使用mentohust配置锐捷上网共享网络
  8. C语言实现猜数字游戏(通俗易懂)
  9. 【J2ME资料汇总】48个推荐资料+40个经典源码
  10. 判断一个数是否为素数的方法