由于社区版Kong不提供仪表盘,本文将介绍第三方开源图形化管理工具Konga的部署安装Kong,在Kubernetes集群上。konga是一款非官方的第三方开源kong图形化管理工具。konga需要使用kong的AdminAPI。konga具有以下特点:支持管理来自远程数据源(数据库、文件、api等)的所有KongAdminAPI对象导入Consumer以支持管理多个Kong节点通过快照备份、恢复和迁移Kong节点执行健康检查和监控Kong节点和API为KongAdminAPI安装创建一个k8s服务。在k8s上使用kong作为ingresscontroller时,建议通过配置Ingress和CRD来配置kong,而不是使用Kong的AdminAPI。kong官方的helmchart默认不会安装kong的admin。API已公开。由于konga需要使用AdminAPI,我们先修改之前部署ingress-kong的helmrelase,在k8s中创建KongAdminAPI的服务。kong-values.yml配置文件如下。注意kongAdminAPI会在konga容器内部访问,所以adminapi的k8s服务只需要是ClusterIP类型,服务就可以提供给k8s集群内的konga:admin:enabled:true#启用AdminAPI类型:ClusterIPannotations:konghq.com/protocol:httpsingressController:ingressClass:kongpostgresql:enabled:falseproxy:type:ClusterIPhttp:hostPort:80tls:hostPort:443nodeSelector:node-role.kubernetes.io/edge:''affinity:podAntiAffinity:requiredDuring-SchedulingIgnoredDured:labelSelector:matchExpressions:-key:app.kubernetes.io/instanceoperator:Invalues:-kong-key:app.kubernetes.io/nameoperator:Invalues:-kongtopologyKey:kubernetes.io/hostnametolerations:-key:node-role.kubernetes。io/masteroperator:Existsffect:NoSchedule-key:node-role.kubernetes.io/masteroperator:Existseffect:PreferNoScheduleUpdateingress-kong的helmrelease:helmupgradeingress-kong/kong-ningress-kong-fkong-values.yml上面的facerelease的更新ingress-kong是在k8s中创建服务ingress-kong-kong-admin:getsvcigress-kong-kong-admin-ningress-kongNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEingress-kong-kong-adminClusterIP10.105.100.178444/TCP27mdeploymentkongakonga提供了自己的持久化机制来存储它的用户信息和配置信息,支持的数据库包括MySQL、MongoDB、PostgresSQL,你可以使用DB_ADAPTER等环境变量指定这里使用外部MySQL数据库。接下来在k8s上创建如下kongadeployment、service、ingress。konga.deploy.yml:apiVersion:apps/v1kind:Deploymentmetadata:labels:app:konganame:konganamespace:ingress-kongspec:replicas:1selector:matchLabels:app:kongastrategy:rollingUpdate:maxSurge:1maxUnavailable:1type:RollingUpdatetemplate:metadata:labels:app:kongaspec:initContainers:-name:dbmigrationimage:pantsel/kongacommand:-node-/app/bin/konga.js-prepare---adapter-mysql---uri-mysql://konga:konga147Q=@192.168。100.21:3306/kongadbcontainers:-name:kongaimage:pantsel/kongaenv:-name:DB_ADAPTERvalue:mysql-name:DB_URIvalue:mysql://konga:konga147Q=@192.168.100.21:3306/kongadb-name:NODE_ENVvalue:production-name:NODE_TLS_REJECT_UNAUTHORIZEDvalue:"0"ports:-containerPort:1337protocol:TCPrestartPolicy:Always上面deployment部署文件中,初始化容器用于在pod启动前完成konga所需的mysql数据库schema的迁移,创建于kongadb第一次启动时以下数据库表:+----------------------------+|Tables_in_kongadb|+-----------------------------+|konga_api_health_checks||konga_email_transports||konga_kong_nodes||konga_kong_services||konga_kong_snapshot_schedules||konga_kong_snapshots||konga_kong_upstream_alerts||konga_netdata_connections||konga_passports||konga_settings||konga_users|+-----------------------------+konga.svc.yml:apiVersion:v1kind:Servicemetadata:name:konganamespace:ingress-kongspec:ports:-name:httpprotocol:TCPport:1337targetPort:1337selector:app:kongatype:ClusterIP创建并存储konga.example。comssl证书密码:kubectlcreatesecretlsexample-com-tls-secret\--cert=cert.pem\--key=key.pem\-ningress-kongkonga.ingress.yml:apiVersion:networking.k8s.io/v1kind:Ingressmetadata:注释:kubernetes.io/ingress.class:kongkonghq.com/protocols:"https"name:konganamespace:ingress-kongspec:rules:-host:konga.example.comhttp:paths:-backend:service:name:kongaport:number:1337path:/pathType:Prefixtls:-hosts:-konga.example.comsecretName:example-com-tls-secretkonga的初始配置konga部署成功后,可以使用https://konga.example.com访问首次打开该页面时,需要根据页面引导完成初始化配置首先创建一个konga管理用户,如下图:创建管理员用户后,就可以登录konga,然后出现创建konga和kongadminapi连接的页面,填写显示内容连接创建页面如下图:连接创建完成后,可以进入konga的dashboard页面。此时konga已经连接到k8s中的kong,并显示相关信息:Summary至此,konga在k8s集群中的部署已经完成。需要注意的是,之前的kong部署是dbless模式,即kong不使用数据(postgresql或apachecassandra),这里使用kong作为k8s的ingresscontroller。在这种情况下,不建议通过kongAdminAPI(或使用kongaweb界面)来管理服务,并且因为kong是dbless的,如果使用kongaweb界面更新和删除服务和kong的配置当不使用数据库时,它会报告类似can'tdosomething的信息。也就是说,如果以dbless模式部署Kong,Konga只能作为只读仪表盘使用。最后,在k8s上使用kong作为ingresscontroller时,建议通过配置Ingress和CRDs来配置kong。