zoukankan      html  css  js  c++  java
  • 网关服务Kong和konga介绍安装使用教程

    介绍

    Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。
    Kong是一个在 Nginx 中运行的Lua应用程序,并且可以通过lua-nginx模块实现,Kong不是用这个模块编译Nginx,而是 OpenResty 一起发布,OpenResty已经包含了 lua-nginx-module, OpenResty 不是 Nginx的分支,而是一组扩展其功能的模块。它的核心是实现数据库抽象,路由和插件管理,插件可以存在于单独的代码库中,并且可以在几行代码中注入到请求生命周期的任何位置。

    Kong主要有三个组件:

    • Kong Server :基于nginx的服务器,用来接收API请求。
    • Apache Cassandra/PostgreSQL :用来存储操作数据。
    • Kong dashboard:官方推荐UI管理工具,当然,也可以使用 restfull 方式 管理admin api。

    Kong的主要功能包括:

    • 高级路由、负载平衡、健康检查——所有这些都可以通过管理 API 或声明性配置进行配置。
    • 使用 JWT、基本身份验证、ACL 等方法对API 进行身份验证和授权。
    • 代理、SSL/TLS 终止以及对 L4 或 L7 流量的连接支持。
    • 用于实施流量控制、req/res转换、日志记录、监控和包括插件开发人员中心的插件。
    • 复杂的部署模型,如声明式无数据库部署和混合部署(控制平面/数据平面分离),没有任何供应商锁定。
    • 本机入口控制器支持服务Kubernetes。

    在这里插入图片描述
    插件提供了扩展网关使用的高级功能。许多 Kong Inc. 和社区开发的插件(如 AWS Lambda、Correlation ID 和 Response Transformer)都在插件中心展示。
    在这里插入图片描述
    在这里插入图片描述

    官网:
    https://docs.konghq.com/

    github:

    https://github.com/kong/kong
    https://github.com/pantsel/konga

    安装教程

    这里推荐使用docker安装,并且推荐使用docker-compose进行安装,因为可以安装图形化界面konge,省去了kong和konge整合的烦恼,而且安装部署方便。
    docker安装可参考我之前写的这篇博文:Docker简易安装教程

    如果还是想用linux方式安装,安装方式以及问题可参考这篇博文:https://blog.csdn.net/qq_33067315/article/details/108635407

    docker-compose安装

    docker-compose安装命令如下:

    sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose

    sudo chmod +x /usr/local/bin/docker-compose

    安装成功之使用docker-compose --version查看安装版本,docker-compose的yml的配置文件说明可参考:https://www.runoob.com/docker/docker-compose.html,这里就不再过多描述了。

    kong和konga的compose.yml文件

    在了解docker-compose之后,我们首先在/opt/目录下创建kong文件夹,然后使用touch命令创建一个docker-compose.yml文件,然后添加如下配置:

    docker-compose.yml

    version: '3'
    services: 
      kong-database:
        image: postgres:9.6
        restart: always  #每次总是启动
        networks: 
          - kong-net
        environment:
          POSTGRES_USER: kong
          POSTGRES_DB: kong
          POSTGRES_PASSWORD: kong
        ports:
          - "5432:5432"
    #######################
    # 执行数据库迁移
    ######################
      kong-migration:
        image: kong:latest
        command: "kong migrations bootstrap"
        networks: 
          - kong-net
        restart: on-failure
        environment:
          - KONG_DATABASE=postgres
          - KONG_PG_DATABASE=kong
          - KONG_PG_PASSWORD=kong
          - KONG_PG_HOST=kong-database
        links: 
          - kong-database #连接的是kong-database服务的
        depends_on:
          - kong-database #依赖于kong-database服务
    
    #####################
    # kong gateway
    #####################
      kong:
        image: kong:latest
        restart: always
        networks:
          - kong-net
        environment:
          KONG_DATABASE: postgres
          KONG_PG_HOST: kong-database
          KONG_PG_PASSWORD: kong
          KONG_PROXY_LISTEN: 0.0.0.0:8000
          KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443
          KONG_ADMIN_LISTEN: 0.0.0.0:8001
        depends_on:
          - kong-migration
        links: 
          - kong-database
        healthcheck:
          test: ["CMD", "curl", "-f", "http://kong:8001"]
          interval: 5s
          timeout: 2s
          retries: 15
        ports:
          - "8001:8001"
          - "8000:8000"
          - "8443:8443"
    #######################
    #以下两个是konga  GUI
    #######################
      konga-prepare:
        image: pantsel/konga:latest
        command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga"  #注意是用户名:密码@数据库服务名称:端口
        networks:
          - kong-net
        restart: on-failure
        links:
          - kong-database
        depends_on:
          - kong        #依赖kong服务
          - kong-database #依赖kong-database服务
    
      konga:
        image: pantsel/konga:latest
        restart: always
        networks:
          - kong-net
        environment:
          DB_ADAPTER: postgres
          DB_HOST: kong-database
          DB_USER: kong
          DB_DATABASE: konga
          DB_PASSWORD: kong #必须加上密码,不然会失败
        depends_on:
          - kong
          - kong-database
        ports:
          - "1337:1337"
    networks:
      kong-net:
        driver: bridge
    

    上述配置完毕之后,在/opt/kong该目录下输入如下命令,进行启动

    docker-compose up -d

    然后输入docker-compose ps进行查看是否启动成功,成功示例图如下:

    在这里插入图片描述

    一个简单使用示例

    本示例主要讲解一下网关中最常用的路由转发,原先是A服务配置B服务的地址,然后A服务直接请求B,现在则是A服务配置网关服务的地址,然后请求网关服务,网关服务将A的请求转发到B服务。

    这里需要使用konga,因为有图形化界面,操作较为简单明了,当然用命令也可以实现,方法在上述的官方文档中给出了示例,这里就不再过多描述了。

    在浏览器输入konga的地址,地址为:ip:1337,打开界面之后,默认是需要创建一个管理员的账号的,按照示例图的填写即可,示例图如下:
    在这里插入图片描述

    注册完毕之用创建的账和密码进行登录,然后填写kong服务的ip和端口,我这里设置的是8001,名称这里我填写的kong,可以随意,示例图如下:

    在这里插入图片描述
    注:由于当时填写忘记截图了,就用了配置好的截图,实际效果基本一致。

    一个简单路由转发示例:

    kong服务地址: 192.168.10.102
    本地服务version查看地址: 192.168.6.14

    登录konga,点击services,点击add new service,创建一个服务,配置信息填写如下:
    在这里插入图片描述

    然后点击该服务,在里面添加路由,然后填写路由相关信息。
    在这里插入图片描述

    配置信息如下:

    在这里插入图片描述
    然后在本地的电脑的hosts文件添加如下kong服务和域名的映射:
    windows路径: C:WindowsSystem32driversetchosts
    linux路径: /etc/hosts

    192.168.10.102 pancm.com
    

    映射ok之后,启动本地的服务,在浏览器访问 http://pancm.com:8000/或http://pancm.com:8000/version都可看到版本信息

    在这里插入图片描述

    在这里插入图片描述

    完整的请求流程如下:

    浏览器域名请求->通过hosts文件找到地址->请求kong服务地址->根据服务路由配置进行转发->请求配置服务的接口地址->返回数据

    其他

    音乐推荐

    原创不易,如果感觉不错,希望给个推荐!您的支持是我写作的最大动力!
    版权声明:
    作者:虚无境
    博客园出处:http://www.cnblogs.com/xuwujing
    CSDN出处:http://blog.csdn.net/qazwsxpcm    
    个人博客出处:http://www.panchengming.com

    如果你对生活感觉到了绝望,请不要气馁。因为这样只会让你更加绝望! 所谓的希望往往都是在绝望中萌发的,所以,请不要放弃希望!
  • 相关阅读:
    BZOJ 3744 Gty的妹子序列
    BZOJ 3872 Ant colony
    BZOJ 1087 互不侵犯
    BZOJ 1070 修车
    BZOJ 2654 tree
    BZOJ 3243 向量内积
    1003 NOIP 模拟赛Day2 城市建设
    CF865D Buy Low Sell High
    CF444A DZY Loves Physics
    Luogu 4310 绝世好题
  • 原文地址:https://www.cnblogs.com/xuwujing/p/15182016.html
Copyright © 2011-2022 走看看