您现在的位置是:亿华云 > 人工智能
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的管理工具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-kongkonga.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-secretkonga的初始化配置
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)