概述

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= -p : -d postgres:9.6

02

创建用户及数据库

# 登陆

psql -U postgres -h 10.20.1.190 -p 

#创建用户

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..el7.noarch.rpm

#拷贝配置

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

#配置

admin_listen = 0.0.0.0:, 0.0.0.0: ssl

pg_host = 10.20.1.190

pg_port = 

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 : 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  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:

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

API网关——Kong实践分享的更多相关文章

  1. API 网关 Kong

    什么是 API 网关? 所谓网关,主要作用就是连接两个不同网络的设备,而今天所讲的 API 网关是指承接和分发客户端所有请求的网关层. 为什么需要网关层?最初是单体服务时,客户端发起的所有请求都可以直 ...

  2. Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用

    写在前面   Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下kong对比ocelot打动我的 ...

  3. API网关Kong系列(一)初识

    最近工作需要,加上国内Kong的文章相对缺乏(搜来搜去就那么两篇文章),而且官方文档在某些demo上也有一些过时的地方,遂提笔记录下这些,希望能有帮助. 先随大流介绍下KONG(主要参考官网): 官方 ...

  4. API网关--Kong的实践

    1. 什么是Kong 目前互联网后台架构一般是采用微服务,或者类似微服务的形式,应用的请求通常需要访问多个后台系统.如果让每一个后台系统都实现鉴权.限流.负载均衡.审计等基础功能是不合适的,通用的做法 ...

  5. API网关Kong系列(三)添加服务

    进入之前部署好的kong-ui,默认第一次登陆需要配置kong服务的地址 进入API菜单,点击+号 按照要求填入相关信息 至此完成,可以使用诸如 https://your.domain.com:208 ...

  6. API网关Kong系列(二)部署

    部署环境: [OS] centos 6.8(如果是centos6.5,请自行先升级到6.8,否则不支持docker) [Docker] Client version: 1.7.1 Client API ...

  7. API网关Kong部署和使用文档

    KONG安装使用说明 系统版本:ubuntu14 1.下载安装包 $ wget https://github.com/Mashape/kong/releases/download/0.8.3/kong ...

  8. API网关Kong系列(四)认证配置

    目前根据业务需要先介绍2种认证插件:Key Authentication 及 HMAC-SHA1 认证  Key Authentication 向API添加密钥身份验证(也称为API密钥). 然后,消 ...

  9. API网关Kong

    官网:https://konghq.com/ 各种方式安装汇总:https://konghq.com/install/ 命令列表:https://docs.konghq.com/0.14.x/admi ...

随机推荐

  1. 有关不同浏览器不同版本号的css以及js计算高度的问题

    1.input在全部浏览器以及全部的版本号中,都是定义了高度.然后再定义padding或者border值.这时候都会撑开.高度是本身的高度在padding值和border值 2.select在gool ...

  2. Android-studio 连接真机 调试weex项目

    1.选择项目 platforms  /  android 2.创建虚拟机(AVD) (1)点击 AVD Manager (2) 点击  Create Virtual Device 最后发现 CPU 不 ...

  3. weex 项目 创建 远程 icon

    一.创建 远程 icon 步骤一:打开  阿里巴巴矢量图标库 官网:http://www.iconfont.cn/ 步骤二:选择项目需要的 icon 步骤三:添加到项目(没有项目会自动创建) 步骤四: ...

  4. 程序的载入和运行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25

    程序的载入和运行(五)--<x86汇编语言:从实模式到保护模式>读书笔记25 前面几篇博文最终把代码分析完了.这篇就来说说代码的编译.运行和调试. 1.代码的编译及写入镜像文件 之前我们都 ...

  5. erlang 中文编码显示乱码问题

    许久没做erlang开发了,近期有网友问到erlang的问题.就抽时间看下.问题是这种.模块有中文.将中文直接打印出来.shell下显示会出现乱码.但假设先将中文转成binary.就行正常显示出来. ...

  6. 【日常学习】【二叉树遍历】Uva548 - Tree题解

    这道题目本身不难,给出后序遍历和中序遍历,求到节点最小路径的叶子,同样长度就输出权值小的叶子. Uva上不去了,没法測.基本上是依照ruka的代码来的.直接上代码 //Uva548 Tree #inc ...

  7. 关于Android滑动冲突的解决方法(二)

    之前的一遍学习笔记主要就Android滑动冲突中,在不同方向的滑动所造成冲突进行了了解,这样的冲突非常easy理解,当然也非常easy解决.今天,就同方向的滑动所造成的冲突进行一下了解,这里就先以垂直 ...

  8. PostgreSQL源码解读 基础结构 node

    一.node节点的定义 源代码路径postgresql-9.2.3/src/include/nodes/nodes.h 在查询解析SQL的查询部分,要用到大量的结构体,许多函数处理的逻辑类似,就是传入 ...

  9. 项目问题总结2:GUID区分大写和小写吗?

    问题描写叙述: 近期在做项目的过程中,遇到一个问题,将从基础系统查询出来的课程ID作为參数去考评系统里查询考试信息,却什么也查不出来,调试了半天不知道什么原因. 问题分析: 静下心来思考一下,能够肯定 ...

  10. MapReduce算法形式二:去重(HashSet)

    案例二:去重(shuffle/HashSet等方法)shuffle主要针对的是key去重HashSet主要针对values去重