目标
  1. kong作为网关 ,既可以部署到k8s外面也可以部署在k8s里面,作为k8s的流量入口,本文将kong部署到k8s内
  2. konga是kong的常用的ui,通过konga对kong的进行可视化操作,当然konga也可以部署在k8s外部和内部,本文将konga部署在k8s内
步骤
  1. 准备
    • 一个正常运行的k8s环境(本文环境: mac上docker自带的k8s)
    • helm3.0工具,可自行百度安装
  2. kong安装
    • 添加helm repo, 搜索kong, 并下载解压:

      helm repo add kong https://charts.konghq.com
      helm repo update
      helm repo list

    • 如图: 在这里插入图片描述

    • helm search repo kong 在这里插入图片描述

    • 拉取kong

      helm pull kong/kong
      tar zxvf kong-2.25.0.tgz

    • 修改values.yaml

      ... 指定kong的数据库为postgres
      env:  
        database: "postgres"
      ... 开启postgresql数据库,并指定认证信息和images及tag
      postgresql:
        enabled: true
        auth:
          username: kong
          password: kong
          database: kong
        image:
          # use postgres < 14 until is https://github.com/Kong/kong/issues/8533 resolved and released
          # enterprise (kong-gateway) supports postgres 14
          tag: 9.6  # 自带版本会遇到问题
       ...
       ... 开启admin(用于konga连接), 关闭tls, 开启http
      admin:
        enabled: true
        type: ClusterIP
        http:
          enabled: true
        tls:
          enabled: false
      ... 修改proxy类型为NodePort,不过用原来的LoadBalancer也行
      proxy:
        type: NodePort
      
    • 安装

      进入解压目录内,执行
      helm install kong -n helm-kong .

    • 稍等服务启动,确认服务正常:在这里插入图片描述

    • 在浏览器中打开地址:http://localhost:31211 这个端口是proxy nodeport的80对应的外部端口,换成实际的(随机分配的),结果如图 在这里插入图片描述

  3. konga安装
    • 创建文件konga.yaml,内容如下:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: konga
        namespace: helm-kong
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: konga
        template:
          metadata:
            labels:
              app: konga
          spec:
            containers:
              - name: konga
                image: pantsel/konga
                env:
                  - name: DB_ADAPTER
                    value: 'postgres'
                  - name: DB_HOST
                    value: 'kong-postgresql.helm-kong.svc.cluster.local'
                  - name: DB_PORT
                    value: '5432:5432'
                  - name: DB_PASSWORD
                    value: 'kong'
                  - name: DB_USER
                    value: 'kong'
                  - name: DB_DATABASE
                    value: 'kongba'
                ports:
                  - containerPort: 1337
                    name: web
      
      ---
      
      kind: Service
      apiVersion: v1
      metadata:
        name: konga
        namespace: helm-kong
      spec:
        type: NodePort
        ports:
         - name: http
           protocol: TCP
           port: 1337
           targetPort: 1337
           nodePort: 31337
        selector:
          app: konga
      
    • 执行安装:kubectl apply -f konga.yaml -n helm-kong命令
    • 结果如图 在这里插入图片描述
  4. konga连接kong admin api
    • 打开浏览器:http://localhost:31337/
    • 注册admin账户后,连接kong admin api: http://kong-kong-admin:8001,如图:
      在这里插入图片描述
  5. 用kong代理konga
    • 首先进入"SERVICES"并点击新增,然后填入图中三处
      在这里插入图片描述
  • 然后选则"Routes", 输入图中内容(注意path输入后要按下回车) 在这里插入图片描述
  • 最后在浏览器访问:http://localhost:31211/konga/,即可进入kong代理后的konga,如图
    在这里插入图片描述
  1. (可选)最后让konga只有一个入口(从kong转发进来)
  • 输入kubectl edit svc konga -n helm-kong找到下方NodePort,并修改为ClusterIP,保存退出, 如图: 在这里插入图片描述
  • 效果如图在这里插入图片描述
总结
  • 文中展示了如何将kong和konga部署到k8s内,可用于学习和测试环境,至于生产环境是否这样部署由实际情况决定
  • 文中忽略了持久化等考虑
参考链接
  • konga的yaml来自https://www.cnblogs.com/klvchen/articles/15753893.html
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐