热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

API网关——Kong实践分享

 概述 01什么是KongKong是一个在Nginx中运行的Lua应用程序,可以通过l

 

概述

 

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

Websockets


OAuth2.0


OAuth2.0

日志记录

日志记录

安全性

安全性

Syslog

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方式,部署软件版本。

   

 

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

创建consumer


 

创建Basic-auth-credential

创建Basic-auth-credential


 

服务开启Basic-auth

服务开启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 Kong官方文档

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

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://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/faizalpribadi/kongsul

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

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

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

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

 



推荐阅读
  • Istio是一个用来连接、管理和保护微服务的开放平台。Istio提供一种简单的方式来为已部署的服务建 ... [详细]
  • 原力计划云原生(三十六) | Kubernetes篇之Harbor入门和安装
    原力计划云原生(三十六)|Kubernetes篇之Harbor入门和安装-文章目录Harbor入门和安装一、入门1、简介2、核心组件3、安装二、docker使用1 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • 大厂首发!思源笔记docker
    JVMRedisJVM面试内存模型以及分区,需要详细到每个区放什么?GC的两种判定方法GC的三种收集方法:标记清除、标记整理、复制算法的 ... [详细]
  • 我们需要远程启动停止IIS网站和应用程序池,因此我们可以远程部署网站。我有一个Webs ... [详细]
  • 12 个提升程序员软技能与效率的必备工具。
    文章目录1.draw.io2.ProcessOn3.Excalidraw4.whistle5.EasyMock6.Fiddler7.GitHub统计8.墨刀9.蓝湖10.PxCoo ... [详细]
  • 都会|坏处_[JS入门到进阶] 手写解析uin8数组的工具:解析二进制字节,太快太方便了!
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了[JS入门到进阶]手写解析uin8数组的工具:解析二进制字节,太快太方便了!相关的知识,希望对你有一定的参考价值。 ... [详细]
  • IIS服务器配置NXLog进行syslog转发(并解决GMT+8小时时差问题)
    IIS服务器配置NXLog进行syslog转发(并解决GMT+8小时时差问题) ... [详细]
  • 分享一下我老师大神的人工智能教程!零基础,通俗易懂!http:blog.csdn.netjiangjunshow也欢迎大家转载本篇文章。分 ... [详细]
author-avatar
mobiledu2502920087
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有