微服务API网关kong2.5和后台管理konga0.14.9 docker安装部署 weir 2021-08-31 10:25:23.0 kong,konga 455 kong API 优先架构的可靠连接 使用无缝提供 API 管理、入口和服务网格的服务连接平台更快地构建应用程序。 多云和 Kubernetes 原生。 在Java世界里说起网管无非是zuul,springcloud gateway,nacos这些大家熟知和经常使用的。 其实还有一些性能更高的比如Gravitee.io基于vert.x,模式类似kong。 kong底层基于openresty 更底层是nginx所以性能绝对有保障。 其他好处我就不多说了,我想聊聊和springcloud gateway,nacos这些的区别优势。 springcloud gateway,nacos基本属于代码层面的或者jar层面的也就是说使用这些网关是强耦合在每一个微服务代码或者配置上面的。 Gravitee.io和kong不同,他们是脱离了微服务代码做的代理网关,知道nginx就知道他们的运作模式,这样有什么好处,大家今年多少可能有所听闻了解新一代高性能微服务架构比如quarkus,Helidon,Micronaut ,vert.x,microprofile等,看看quarkus怎么定义自己的:为 OpenJDK HotSpot 和 GraalVM 量身定制的 Kubernetes Native Java 堆栈,由同类最佳的 Java 库和标准制作而成。 就这一句话基本是对过去java应用架构质的飞跃,我们都知道spring是ejb质的飞跃,大概是15差不多那时候vert.x出现基本就算是对spring的颠覆了,但是反应式编程对国内来说有很多接受的难点,好在这几年前后端分离的实践奠定了java服务层的变革。 对于服务层我们追求的不单单是开发速度还要有低内存消耗,更高的性能,更快的运行部署,特别是微服务和kubernetes的逐渐成为主流的今天,对于每个微服务的要求就更加苛刻,quarkus代码库里面提到的12-factors 大家可以去了解我认为它的提出正式为微服务而设定的。 我们回到kong为什么会有这样的模式而不是springcloud gateway这样的模式呢?大家思考过这样的问题没有,quarkus这样的架构出现就必须有对应的网关为之服务,kubernetes istio linkerd2这几年都在努力做原生的网关可是成效不大,kong灵活的做到了兼容这一点,springcloud体系很难和新一代架构融合而kong可以做到这一点。 今天是kong基于docker的入门安装部署做到快速上手。 首先:docker network create kong-net 创建一个名叫kong-net的网络 docker run -itd --network=kong-net \ --name kong-database \ -e POSTGRES_DB=kong \ -e POSTGRES_USER=weir \ -e POSTGRES_PASSWORD=336393 \ -p 5432:5432 \ postgres:10 这个是准备kong的基础数据库,数据库名 用户 密码 我想不用多介绍自己根据自己的来配。 docker run --rm \ --network=kong-net \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-database" \ -e "KONG_PG_USER=weir" \ -e "KONG_PG_PASSWORD=336393" \ kong:2.5.0-centos kong migrations bootstrap 这一步是初始化kong的数据库数据 docker run -itd --name kong \ --network=kong-net \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-database" \ -e "KONG_PG_USER=weir" \ -e "KONG_PG_PASSWORD=336393" \ -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 8001:8001 \ -p 8444:8444 \ kong:2.5.0-centos 启动kong 到这里kong就按照部署好了,虽然他自己也有一个比较粗糙的管理界面基本不会用到,我们管理kong还是用konga docker run --rm pantsel/konga:0.14.9 -c prepare -a postgres -u postgresql://weir:336393@192.168.31.112:5432/konga 这个命令是把kong数据库的数据迁移到konga的数据库下,192.168.31.112就是当前机器的IP,上面用docker部署的kong就是在这台虚拟机上面。 docker run -d \ --name konga \ --restart=always \ -p 1337:1337 \ -e "DB_ADAPTER=postgres" \ -e "DB_HOST=192.168.31.112" \ -e "DB_USER=weir" \ -e "DB_PASSWORD=336393" \ -e "DB_DATABASE=konga" \ -e "KONGA_HOOK_TIMEOUT=120000" \ -e "DB_PG_SCHEMA=public" \ -e "NODE_ENV=production" \ --name konga \ pantsel/konga:0.14.9 不出意外:http://192.168.31.112:1337 这样就可以打开管理界面了。 后续的使用请看视频