前言

在项目前期网关的服务不多时,在服务器上直接通过CURL调用KONG管理API还是可行的。但随着业务的发展,网关的上游服务数量增多,有的服务还是部署在集群环境中,如K8S。因此这些服务拥有多个入口,为了提高可用性,需要额外给这些分布式服务配置负载均衡。除此之外,不同的服务还配置有不同的插件。所以,一个KONG网关的dashboard就显得尤为重要了。

值得注意的是,当前KONG的社区版是没有dashboard的,但是付费的企业版是有带的,并且还有一些企业版才能使用的插件以及升级后的企业版插件。所以对于使用社区版的用户而言,排除自己去撸一个dashboard的这种选择,第三方开源的dashboard无疑是首选。当前GitHub上还在更新维护的dashboard有两个,一个是kong-dashboard,另一个为konga,今天介绍的便是KONGA,选择KONGA的主要原因为该开源dashboard支持到了官方最新版的0.13版,并且UI简洁。当前KONGA的最新版本是0.11.2,需要注意的是0.10.x开始的KONGA只支持0.11版本以上的KONG。

准备

KONGA的用户系统和快照数据等功能会产生数据,安装可以选择将数据存到内存,当然更好的选择是将这部分数据持久化到数据库中,便于应用重启后的数据恢复,KONGA支持的数据库有MySQL、MongoDB、PostgresSQL、SQLServer,这里我们选择的是PostgresSQL,原因是KONG连接的数据库也是PGSQL,这样可以减少数据库的部署,而且KONGA对数据库的操作不频繁,对KONG性能影响很小。

连接PGSQL,并新建一个数据库,命名为konga,指定所有者,数据库字符集设置为UTF-8。

为连接的数据库创建表,运行如下的命令:

$ docker run -ti \ // 为了让容器内接收外部命令,便于创建表后退出容器
             -e "DB_ADAPTER=the-name-of-the-adapter" \ // 'mongo','postgres','sqlserver'  or 'mysql'
             -e "DB_HOST=your-db-hostname" \
             -e "DB_PORT=your-db-port" \ // Defaults to the default db port
             -e "DB_USER=your-db-user" \ // Omit if not relevant
             -e "DB_PASSWORD=your-db-password" \ // Omit if not relevant
             -e "DB_DATABASE=your-db-name" \ // Defaults to 'konga_database'
             -e "NODE_ENV=development" \ // or 'development' | defaults to 'development' | 指定为开发模式启动才会创建表
             --name kong_dashboard \
             pantsel/konga

创建表操作无异常日志输出后即代表创建成功,退出当前容器。

注: 使用MongoDB可以跳过上面的创建表步骤。

安装

$ docker run -d \ // 后台启动
             -p 1337:1337
             -e "DB_ADAPTER=the-name-of-the-adapter" \ // 'mongo','postgres','sqlserver'  or 'mysql'
             -e "DB_HOST=your-db-hostname" \
             -e "DB_PORT=your-db-port" \ // Defaults to the default db port
             -e "DB_USER=your-db-user" \ // Omit if not relevant
             -e "DB_PASSWORD=your-db-password" \ // Omit if not relevant
             -e "DB_DATABASE=your-db-name" \ // Defaults to 'konga_database'
             -e "NODE_ENV=production" \ // or 'development' | defaults to 'development' | 这里最好指定为生产环境,因为开发环境启动会狂打Debug日志
             --name kong_dashboard \
             pantsel/konga

效果展示

首页整体的UI界面如下所示:

KONGA-UI-INDEX

首页可以获取到当前KONG网关的一些运行的基本参数。点击左侧的INFO栏可以查看到网关的具体配置信息。

SERVICESROUTESAPISCONSUMERSPLUGINSUPSTEARMSCERTIFICATES栏分别是对各网关API内对象进行配置的操作界面,包括添加、修改及删除操作。假如你安装了0.13版本的KONG,这里建议不要再使用API对上游服务进行配置转发。0.13版本已经将API概念废弃了,原本的API概念现在被分开为服务和路由,即新版的SERVICESROUTES

USERS栏可以管理dashboard的登录用户,包括添加新用户,修改用户信息,删除用户等。

KONGA-UI-USERS-show

KONGA的用户体系比较简单,权限上分为管理员和普通用户,通过编辑页可以调整用户的权限角色。

KONGA-UI-USERS-edit

管理员用户拥有dashboard的全部操作权限,普通用户默认只有查看的权限,没有任何添加及修改的权限,普通用户的权限也是可以调整,操作界面在左侧的SETTINGS栏的USER PERMISSIONS节。

KONGA-UI-SETTINGS-USER-PERMISSIONS

CONNECTIONS栏为管理KONG连接的界面,KONGA作为KONG的dashboard可以同时管理多个KONG的实例或者节点。

SHAPSHOTS栏顾名思义,即提供将KONG内重要的数据快照备份的功能。备份数据有Services, Routes, APIs, Plugins, Consumers, UpstreamsTargets的数据。备份方式可以手动配置也可以设置定时任务执行。这里个人认为备份数据还是少了一部分认证插件产生的认证实体的数据,如OAUTH2产生的oauth2_application表数据,这些数据也属于KONG用户体系的数据。希望KONGA的作者在下一个版本可以加入这部分数据的备份。

最后介绍一下SETTINGS栏的其他功能,Genernal settings节内可以配置dashboard面板数据的刷新间隔(单位为毫秒)以及KONGA的BASE URL(用于用户的激活链接)。Sign up restrictions节内可以控制是否允许用户注册以及是否验证注册邮箱。

KONGA-UI-SETTINGS-GENERAL

Notifications节可以设置告警,当选定节点挂掉之后会发邮件通知管理员。但自0.11以上版本的KONG集群的节点的联系就只剩连接同一个数据库了。通过共享数据来达到对同样的上游服务配置及转发。当通过管理API去修改数据会存在数据同步问题,这里不详细讲。之前版本的KONG节点间会通过一个配置地址和其他节点进行通信,并由一个暴露的接口地址可以获取到节点的状态,但0.11版本以上的KONG已经取消了这个设计,所以0.11版本以上的KONG是使用不了节点的健康检测功能的😔,具体内容可以查看这里的文档。

KONGA-UI-SETTINGS-NOTIFICATONS

总结

KONGA提供了一个开源的KONG Dashboard,方便了我们管理KONG,感谢作者的开发维护,此处是作者的GitHub个人主页及KONGA的项目主页,喜欢这个项目的可以上去给作者点个⭐。