• API网关——Kong实践分享


    概述

    01

    什么是Kong

    Kong是一个在Nginx中运行的Lua应用程序,可以通过lua-nginx模块实现,Kong不是用这个模块编译Nginx,而是与OpenRestry一起发布,OpenRestry已经包含了lua-nginx-module,OpenRestry是Nginx的一组扩展功能模块。

    02

    为什么是Kong

    Kong是一个Api Gateway,通过插件的形式提供负载均衡,日志记录,身份验证,速率限制,转换等功能。

    Kong可以很轻松扩展功能,模块化,可以运行在任何基础设施上。

    03

    术语

    Route:是请求的转发规则,按照Hostname和PATH,将请求转发给Service。

    Services:是多个Upstream的集合,是Route的转发目标。

    Consumer:是API的用户,里面记录用户的一些信息。

    Plugin:是插件,plugin可以是全局的,绑定到Service,绑定到Router,绑定到Consumer。

    Certificate:是https证书。

    Sni:是域名与Certificate的绑定,指定了一个域名对应的https证书。

    Upstream:是负载均衡策略。

    Target:是最终处理请求的Backend服务。

    04

    特性

    • 动态负载均衡

    • 基于散列的负载均衡

    • 断路器

    • 健康检查

    • Websockets

    • OAuth2.0

    • 日志记录

    • 安全性

    • Syslog

    • 监控

    • 转发代理

    • 认证

    • 速率限制

    • 故障检测和恢复

    ……

    更多详情参考:https://docs.konghq.com/hub/

    05

    开源/企业对比

    架构


    01

    架构图

     

    1.1版本以后支持无db模式

    02

    执行流程

    加入kong后,每个客户端对API的请求将首先到达Kong,然后被代理到最终API,在请求和响应之间,Kong将执行任何已安装的插件,扩展API功能集,Kong有效的成为每个API的入口点。

    部署

    Kong支持在任何基础设施上运行,支持docker、packages、vagrant、Homebrew、CloudFormation、AWS、Azure、Kubernetes等。

    本次部署基于package方式,部署软件版本。

    软件版本
    Kong 1.0.3
    Postgresql 9.6
    Kong-dashboard 3.5.0

       

    01

    部署Postgresql

     docker run --name postgres -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d postgres:9.6

    02

    创建用户及数据库

    # 登陆

    psql -U postgres -h 10.20.1.190 -p 5432

    #创建用户

    create user kong with password ‘kong’;

    #创建数据库

    create database kong owner kong;

    #退出控制台

    q

    03

    下载安装包

    wget:https://kong.bintray.com/kong-rpm/centos/7/:kong-1.0.3.el7.noarch.rpm

    04

    安装配置

    #安装rpm

    yum install kong-1.0.3.el7.noarch.rpm

    #拷贝配置

    cp /etc/kong/kong.conf.default /etc/kong/kong.conf

    #配置

    admin_listen = 0.0.0.0:8001, 0.0.0.0:8444 ssl
    
    pg_host = 10.20.1.190
    
    
    pg_port = 5432
    
    
    pg_user = kong
    
    
    pg_password = kong
    
    
    pg_database = kong

    保存并退出。

    05

    启动kong

    #数据库迁移,初始化表

    kong migrations bootstrap -c /etc/kong/kong.conf –vv

    #启动

    kong start -c /etc/kong/kong.conf

    06

    部署kong-dashboard

    dashboard目前只支持kong版本1.0.3,kong最新版本不支持,使用pgbi/kong-dashboard镜像

    #启动dashboard

    docker run -p 8888:8080 pgbi/kong-dashboard start --kong-url http://10.20.1.190:8001

     

    使用

    01

    upstream

     

    02

    target

    03

    service

    04

    routers

    05

    验证

    06

    插件

    1.Base-auth

    • 创建consumer

    • 创建Basic-auth-credential

    • 服务开启Basic-auth

    • 验证

    未加用户信息,没权限,效果如下:

    加入用户信息后,效果如下:

    集成

    01

    Dns SRV

    Kong利用Dns轮询访问后端应用。

    1.架构图

    2.检查服务域名

    使用Dns做服务发现,查看boms-user-service服务如下:

    # dig @10.20.11.118 -p 8600 boms-user-service.service.dc1.consul SRV

    含义解释:

    调用服务域名boms-user-service.service.dc1.consul,通过dns解析找到实例ip+port,如上例中10.20.11.118:8081。

    3.修改kong配置

    vim 编辑kong.conf,增加:

    dns_resolver: 127.0.0.1:8600

    4.kong中使用

    在kong中手动增加一个service,host填入服务域名,增加router,即可转发。

    5.总结

    需要手动在kong中创建服务,并且仅适用consul注册中心。

    https://github.com/faizalpribadi/kongsul

    02

    Agent 轮询

    1.架构图

     

    agent负责监听注册中心,动态调用kong admin API创建upstream、target、service、router等资源。

    用户通过boms平台调用admin API修改router信息,实现服务转发功能,在此数据基础之上在启用插件,丰富功能。

    开发

    01命令行

    https://docs.konghq.com/1.0.x/cli/

    02

    Admin API

    https://docs.konghq.com/1.0.x/admin-api/

    例如:

    03插件开发

    https://docs.konghq.com/1.0.x/pdk/ 插件开发工具包。

    参考

    • https://docs.konghq.com Kong官方文档

    • https://docs.konghq.com/hub/kong-inc 插件文档

    • https://www.lijiaocn.com/%E6%8A%80%E5%B7%A7/2017/03/06/dns-srv.html dns-srv 详解

    • https://github.com/faizalpribadi/kongsul

    • https://github.com/YeautyYE/nacos-nginx-template

    • https://github.com/quancheng-ec/eureka-kong-register

  • 相关阅读:
    scrapy 随机UserAgent
    Scrapy使用中间件捕获Spider抛出的异常
    10.16-arrarylist
    10.15_package_2
    10.14_package_1
    10.13_enum_2
    10.12-enum_1
    10.11-java的接口2
    10.10-3对象和类_动手动脑-java的接口
    10.9-java的封装
  • 原文地址:https://www.cnblogs.com/bocloud/p/11014243.html
Copyright © 2020-2023  润新知