文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-03 02:30

关注

[[409019]]

创建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           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管理用户,如下图所示:

 

管理员用户创建完成后,就可以登录到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的配置做相关的更新和删除时也会报类似can't do something when not use a database。 也就是说如果kong是以dbless模式部署的,konga只能作为一个只读的dashboard使用。最后,当将kong在k8s上用作ingress controller时,还是推荐使用配置Ingress和CRDs的方式来配置kong。

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯