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

开发 开发工具
本文将介绍kong的第三方开源的图形化管理工具konga在Kubernetes集群上的部署安装。 konga是一个非官方的第三方开源的kong的图形化管理工具。

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

[[409019]]

  • 支持管理所有的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提供服务即可:

 

  1. admin: 
  2.   enabled: true # 开启Admin API 
  3.   type: ClusterIP 
  4.   annotations: 
  5.     konghq.com/protocol: https 
  6.  
  7. ingressController: 
  8.   ingressClass: kong 
  9. postgresql: 
  10.   enabled: false 
  11.  
  12. proxy: 
  13.   type: ClusterIP 
  14.   http: 
  15.     hostPort: 80 
  16.   tls: 
  17.     hostPort: 443 
  18.  
  19. nodeSelector: 
  20.   node-role.kubernetes.io/edge: '' 
  21. affinity: 
  22.   podAntiAffinity: 
  23.       requiredDuringSchedulingIgnoredDuringExecution: 
  24.       - labelSelector: 
  25.           matchExpressions: 
  26.           - key: app.kubernetes.io/instance 
  27.             operator: In 
  28.             values
  29.             - kong 
  30.           - key: app.kubernetes.io/name 
  31.             operator: In 
  32.             values
  33.             - kong 
  34.         topologyKey: kubernetes.io/hostname 
  35. tolerations: 
  36.     - key: node-role.kubernetes.io/master 
  37.       operator: Exists 
  38.       effect: NoSchedule 
  39.     - key: node-role.kubernetes.io/master 
  40.       operator: Exists 
  41.       effect: PreferNoSchedule 

更新ingress-kong的helm release:

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

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

 

  1. get svc ingress-kong-kong-admin -n ingress-kong 
  2. NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE 
  3. 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:

 

  1. apiVersion: apps/v1 
  2. kind: Deployment 
  3. metadata: 
  4.   labels: 
  5.     app: konga 
  6.   name: konga 
  7.   namespace: ingress-kong 
  8. spec: 
  9.   replicas: 1 
  10.   selector: 
  11.     matchLabels: 
  12.       app: konga 
  13.   strategy: 
  14.     rollingUpdate: 
  15.       maxSurge: 1 
  16.       maxUnavailable: 1 
  17.     type: RollingUpdate 
  18.   template: 
  19.     metadata: 
  20.       labels: 
  21.         app: konga 
  22.     spec: 
  23.       initContainers: 
  24.       - name: dbmigration 
  25.         image: pantsel/konga 
  26.         command: 
  27.         - node 
  28.         - /app/bin/konga.js 
  29.         - prepare 
  30.         - --adapter 
  31.         - mysql 
  32.         - --uri 
  33.         - mysql://konga:konga147Q=@192.168.100.21:3306/kongadb 
  34.       containers: 
  35.       - name: konga 
  36.         image: pantsel/konga 
  37.         env: 
  38.           - name: DB_ADAPTER 
  39.             value: mysql 
  40.           - name: DB_URI 
  41.             value: mysql://konga:konga147Q=@192.168.100.21:3306/kongadb 
  42.           - name: NODE_ENV 
  43.             value: production 
  44.           - name: NODE_TLS_REJECT_UNAUTHORIZED 
  45.             value: "0" 
  46.         ports: 
  47.         - containerPort: 1337 
  48.           protocol: TCP 
  49.       restartPolicy: Always 

上面的deployment部署文件中,使用初始化容器在pod启动前完成konga所需mysql数据库schema的migration,第一次启动时在kongadb中创建了下面的数据库表:

 

  1. +-------------------------------+ 
  2. | Tables_in_kongadb             | 
  3. +-------------------------------+ 
  4. | konga_api_health_checks       | 
  5. | konga_email_transports        | 
  6. | konga_kong_nodes              | 
  7. | konga_kong_services           | 
  8. | konga_kong_snapshot_schedules | 
  9. | konga_kong_snapshots          | 
  10. | konga_kong_upstream_alerts    | 
  11. | konga_netdata_connections     | 
  12. | konga_passports               | 
  13. | konga_settings                | 
  14. | konga_users                   | 
  15. +-------------------------------+ 

konga.svc.yml:

 

  1. apiVersion: v1 
  2. kind: Service 
  3. metadata: 
  4.   name: konga 
  5.   namespace: ingress-kong 
  6. spec: 
  7.   ports: 
  8.     - name: http 
  9.       protocol: TCP 
  10.       port: 1337 
  11.       targetPort: 1337 
  12.   selector: 
  13.     app: konga 
  14.   type: ClusterIP 

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

 

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

konga.ingress.yml:

 

  1. apiVersion: networking.k8s.io/v1 
  2. kind: Ingress 
  3. metadata: 
  4.   annotations: 
  5.     kubernetes.io/ingress.class: kong 
  6.     konghq.com/protocols: "https" 
  7.   name: konga 
  8.   namespace: ingress-kong 
  9. spec: 
  10.   rules: 
  11.   - host: konga.example.com 
  12.     http: 
  13.       paths: 
  14.       - backend: 
  15.           service: 
  16.             name: konga 
  17.             port: 
  18.               number: 1337 
  19.         path: / 
  20.         pathType: Prefix 
  21.   tls: 
  22.   - hosts: 
  23.     - konga.example.com 
  24.     secretName: example-com-tls-secret 

konga的初始化配置

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

 

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

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

 

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

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

 

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

小结

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

责任编辑:未丽燕 来源: 今日头条
相关推荐

2010-05-25 08:56:41

ubuntu Grub

2023-03-05 16:23:15

MySQL工具

2010-10-12 09:19:29

Navicat

2019-11-27 14:00:32

MySQLphpMyAdmin电脑

2009-03-05 08:57:48

phpMyAdminMySQL管理字符集

2019-07-21 20:08:50

工具代码开发

2020-07-16 14:20:12

Docker管理工具Linux

2010-06-13 12:53:12

Ubuntu Grub

2014-05-22 10:51:17

Linux文件管理工具

2021-02-03 07:16:49

DevOps开发工具

2021-06-23 15:52:17

Docker图形工具

2009-04-24 21:13:45

服务器虚拟化Vmware

2013-07-15 15:00:26

项目管理工具

2013-07-17 09:54:17

2012-09-28 10:19:32

IBMdw

2020-07-21 14:20:09

MySQL数据库工具

2010-05-13 17:46:51

IIS服务器

2019-10-14 16:25:54

MySQLSQL数据库

2020-07-27 09:59:25

Kafka可视化CMAK

2021-12-14 15:50:43

Gaphor建模工具开源
点赞
收藏

51CTO技术栈公众号