您现在的位置是:亿华云 > 人工智能

Kong Web图形化管理工具Konga部署安装

亿华云2025-10-09 13:41:13【人工智能】7人已围观

简介因为kong的社区版不提供dashboard,本文将介绍kong的第三方开源的图形化管理工具konga在Kubernetes集群上的部署安装。 konga是一个非官方的第三方开源的kong的图形化管理

因为kong的形化社区版不提供dashboard,本文将介绍kong的管理工具第三方开源的图形化管理工具konga在Kubernetes集群上的部署安装。 konga是署安一个非官方的第三方开源的kong的图形化管理工具,konga需要使用kong的形化Admin API,konga具有如下特性:

支持管理所有的管理工具Kong Admin API对象 从远程数据源(数据库、文件、署安api等)导入Consumer 支持管理多个Kong节点 通过快照方式备份、形化恢复和迁移Kong节点 对Kong节点和API进行健康检查监控

创建Kong Admin API的管理工具k8s service

前面在《使用helm在Kubernetes集群中部署Kong》一文中介绍了kong在k8s上的最基本安装,当将kong在k8s上用作ingress controller时,署安推荐使用配置Ingress和CRDs的形化方式来配置kong, 而不推荐使用Kong的管理工具Admin API,kong官方的署安helm chart默认安装时也不会把kong的Admin API暴露出来。而由于konga需要使用Admin API,形化所以我们先修改之前部署ingress-kong的管理工具helm relase,在k8s中创建Kong Admin API的署安service。 kong-values.yml配置文件如下,服务器托管注意konga容器内部会访问kong Admin API,因此admin api的k8s service只需是ClusterIP类型,在k8s集群内部向konga提供服务即可:

admin:   enabled: true # 开启Admin API   type: ClusterIP   annotations:     konghq.com/protocol: https ingressController:   ingressClass: kong postgresql:   enabled: false proxy:   type: ClusterIP   http:     hostPort: 80   tls:     hostPort: 443 nodeSelector:   node-role.kubernetes.io/edge:  affinity:   podAntiAffinity:       requiredDuringSchedulingIgnoredDuringExecution:       - labelSelector:           matchExpressions:           - key: app.kubernetes.io/instance             operator: In             values:             - kong           - key: app.kubernetes.io/name             operator: In             values:             - kong         topologyKey: kubernetes.io/hostname tolerations:     - key: node-role.kubernetes.io/master       operator: Exists       effect: NoSchedule     - key: node-role.kubernetes.io/master       operator: Exists       effect: PreferNoSchedule 

更新ingress-kong的helm release:

helm upgrade ingress-kong kong/kong -n ingress-kong -f kong-values.yml 

上面对release ingress-kong的更新是在k8s中创建了service ingress-kong-kong-admin:

get svc ingress-kong-kong-admin -n ingress-kong NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE ingress-kong-kong-admin   ClusterIP   10.105.100.17   <none>        8444/TCP   27m 

部署konga

konga提供了自己的持久化机制来存储它的用户信息和配置信息,支持的数据库包括MySQL、MongoDB、PostgresSQL,可通过DB_ADAPTER等环境变量指定。 这里使用的是外部的MySQL数据库。下面分别在k8s上创建如下konga的deployment、service和ingress。

konga.deploy.yml:

apiVersion: apps/v1 kind: Deployment metadata:   labels:     app: konga   name: konga   namespace: ingress-kong spec:   replicas: 1   selector:     matchLabels:       app: konga   strategy:     rollingUpdate:       maxSurge: 1       maxUnavailable: 1     type: RollingUpdate   template:     metadata:       labels:         app: konga     spec:       initContainers:       - name: dbmigration         image: pantsel/konga         command:         - node         - /app/bin/konga.js         - prepare         - --adapter         - mysql         - --uri         - mysql://konga:konga147Q=@192.168.100.21:3306/kongadb       containers:       - name: konga         image: pantsel/konga         env:           - name: DB_ADAPTER             value: mysql           - name: DB_URI             value: mysql://konga:konga147Q=@192.168.100.21:3306/kongadb           - name: NODE_ENV             value: production           - name: NODE_TLS_REJECT_UNAUTHORIZED             value: "0"         ports:         - containerPort: 1337           protocol: TCP       restartPolicy: Always 

上面的deployment部署文件中,使用初始化容器在pod启动前完成konga所需mysql数据库schema的migration,第一次启动时在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: v1 kind: Service metadata:   name: konga   namespace: ingress-kong spec:   ports:     - name: http       protocol: TCP       port: 1337       targetPort: 1337   selector:     app: konga   type: ClusterIP 

创建存放konga.example.com ssl证书的secret:

kubectl create secret tls example-com-tls-secret \   --cert=cert.pem \   --key=key.pem \   -n ingress-kong 

konga.ingress.yml:

apiVersion: networking.k8s.io/v1 kind: Ingress metadata:   annotations:     kubernetes.io/ingress.class: kong     konghq.com/protocols: "https"   name: konga   namespace: ingress-kong spec:   rules:   - host: konga.example.com     http:       paths:       - backend:           service:             name: konga             port:               number: 1337         path: /         pathType: Prefix   tls:   - hosts:     - konga.example.com     secretName: example-com-tls-secret 

konga的初始化配置

konga部署成功后,可以使用https://konga.example.com访问,第一次打开这个页面时需要按页面的引导完成初始化配置。企商汇 首先创建一个konga管理用户,如下图所示:

管理员用户创建完成后,就可以登录到konga中,之后出现创建konga到kong admin api连接的页面,在连接创建页面填入如下图所示内容:

连接创建完成后就可以进入到konga的dashboard页面,此时konga已经和k8s中的kong连接上,并显示相关信息了:

小结

到这里已经完成konga在k8s集群中的部署,需要注意的是前面kong的部署时dbless模式的,也就是kong没有使用数据(postgresql或apache cassandra),而且kong在这里用作k8s的ingress controller。 这种情况是不建议通过kong Admin API(或使用konga的web界面)来管理服务的,同时因为kong是dbless的,如果你使用konga Web界面对服务和kong的配置做相关的更新和删除时也会报类似cant do something when not use a database。 也就是说如果kong是以dbless模式部署的亿华云,konga只能作为一个只读的dashboard使用。最后,当将kong在k8s上用作ingress controller时,还是推荐使用配置Ingress和CRDs的方式来配置kong。

很赞哦!(9298)