Kong是Mashape开源的高性能高可用API网关和API服务管理层。它基于OpenResty,进行API管理,并提供了插件实现API的AOP。Kong在Mashape 管理了超过15,000 个API,为200,000开发者提供了每月数十亿的请求支持。本文将从架构、API管理、插件三个层面介绍Kong。

架构

按照康威定律,我们系统架构会拆的很散,系统由一堆服务组成,如下图所示:

库存服务、优惠券服务、价格服务时之前都会做一些特殊处理,如限流、黑白名单,日志、请求统计。而这些处理几乎是所有服务都需要的,这不就是我们常说的AOP嘛,当我们服务多起来的时候,应该将这些通用处理集中到一个地方进行管理,如下图所示:

和下图有点相似:

1.为什么要用Kong作为NetCore下的API网关?

  1. 开源,云原生(Cloud-Native),ServiceMesh,快速,弹性,RESTful还有分布式微服务的抽象层
    2.基于NGINX构建的网关,拥有更高的性能,并且在2015开源
    3.活跃的社区,在github上有111个Contributors,修复bug迅速,基本每3个月一个版本
    4.支持插件化,目前支持的插件有32个,包含授权,安全,限流,Serverless,分析和监控,转换,日志。
    5.支持企业版本和社区版本

架构预览

基于OpenResty(Nginx & Lua Scripting)

上图很清晰的看见Kong的架构图,以Nginx作为基础, OpenResty构建RESTful,支持集群和数据库存储数据,插件化,还有支持用RESTful来管理端。

集群架构预览


这里讲下Kong的集群原理吧,Kong在0.11.0版本之前用的是serf来做集群的,那么为什么不用serf做集群呢?开发者给出的理由如下:
1.依赖serf,serf并不属于Nginx/OpenResty
2.这种依赖相互间通信来同步的机制对于deployment和容器化都有些不便
3.在运行的Kong节点触发serf需要一些阻塞的I/O
0.11.0版本的实现思路是以数据库为中心,增加一个cluster events的表,任何Kong node都可以向数据库发送变更消息,其他节点轮训数据库改动,然后更新缓存内容,如果有节点重启连上数据库节点就可以工作了。

Kong的安装

Kong的安装方式支持很多主流的平台,目前不支持Windows,支持的安装方式如下:

Kong的安装,为了方便我这里就使用docker安装了
1.创建专属kong的网络(docker的最佳实践)--link 过时了啊
docker network create kong-net
2.选择你使用的数据库,默认使用的是PostgreSQL
如果你使用的是Cassandra数据库:
提示下:Cassandra >=3.0
docker run -d --name kong-database \ --network=kong-net \ -p 9042:9042 \ cassandra:3
如果你使用的是PostgreSQL
docker run -d --name kong-database \ --network=kong-net \ -p 5432:5432 \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ postgres:9.6
3.数据库迁移,初始化库表结构:

 docker run --rm \--network=kong-net \    -e "KONG_DATABASE=postgres" \    -e "KONG_PG_HOST=kong-database" \    -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \kong:latest kong migrations up

4.启动kong

docker run -d --name kong \--network=kong-net \    -e "KONG_DATABASE=postgres" \    -e "KONG_PG_HOST=kong-database" \    -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \    -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \    -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \    -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \    -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \    -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \-p 8000:8000 \-p 8443:8443 \-p 8001:8001 \-p 8444:8444 \kong:latest

5.看网关有没有启动
在本机 curl -i http://localhost:8001/,或者用浏览器访问8001端口。如果出来一大堆json,表示成功。

以AspNetCore为例子访问

mkdir AspNetCorecd AspNetCoredotnet new webapidotnet run

我们以netcore做的api为例子访问localhost:5000/api/values,前面网关搭建起来了,并且支持RESTful,现在有开源的dashboard,我们就用KongDashboard来演示,如何构造搭建和访问。

# 全局安装kong-dashboard
npm install -g kong-dashboard# 启动 kong-dashboard
kong-dashboard start --kong-url http://localhost:8001# 启动kong-dashboard,并且自定义端口
kong-dashboard start \  --kong-url http://kong:8001 \--port [port]# 启动kong-dashboard并且启动基础认证
kong-dashboard start \  --kong-url http://kong:8001 \--basic-auth user1=password1 user2=password2# 看kong-dashboard 启动参数
kong-dashboard start --help

启动成功后用浏览器打开localhost:8080如下图所示:

那么我们增加一个NetCoreAPI,在DashBoard,如图所示:

因为是GET请求,那我我们用浏览器访问,浏览器 -> 网关 -> NetCore程序。
打开浏览器直接访问http://localhost:8000/api/values,返回["value1","value2"]则代表正常。
如下图所示:

最后,AspNetCore微服务下的网关-Kong系列,后面会继续更新,会讲解到Kong的插件的使用,插件的开发,使用的一些坑,网关性能分析和日志可视化,源码解析等,欢迎大家关注我的github: https://github.com/WithLin。

相关文章

  • 微服务网关Ocelot

  • Ocelot API网关的实现剖析

  • Ocelot——初识基于.Net Core的API网关

  • Ocelot网关

  • Ocelot统一权限验证

  • Ocelot监控

  • 给Ocelot做一个Docker 镜像

  • Ocelot + Consul实践

  • .NET Core开源API网关 – Ocelot中文文档

  • .NET微服务体系结构中为什么使用Ocelot实现API网关

  • .NET Core微服务之基于Ocelot实现API网关服务

  • .NET Core微服务之基于Ocelot实现API网关服务(续)

  • Ocelot.JwtAuthorize:一个基于网关的Jwt验证包

  • API网关模式

  • .NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权

原文地址:https://www.cnblogs.com/WithLin/p/9343406.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

AspNetCore微服务下的网关-Kong(一)相关推荐

  1. 微服务体系流量网关Kong简介

    前言 在微服务架构中,由于系统和服务的细分,导致系统结构变得非常复杂, 为了跨平台,为了统一集中管理api,同时为了不暴露后置服务.甚至有时候需要对请求进行一些安全.负载均衡.限流.熔断.灰度等中间操 ...

  2. 搭建springcloud微服务下的网关Netfilx Zuul

    原创文章转载请注明来源:https://blog.csdn.net/weixin_41756573/article/details/88689617 1.pom.xml(基于springboot2.0 ...

  3. 微服务之API网关:Kong:概要与安装

    Kong是一个基于Apache License 2.0的开源项目,是一个云原生的快速可扩的分布式微服务抽象层,应用场景为微服务的API网关,类似于spring cloud的zuul. 概要信息 项目 ...

  4. 微服务之API网关接口设计

    微服务之API网关接口设计 API网关,顾名思义,就是外部到内部的一道门,其主要功能: 服务路由:将前段应用的调用请求路由定位并负载均衡到具体的后端微服务实例,对于前端应用看起来就是1个应用提供的服务 ...

  5. gateway sentinel 熔断 不起作用_微服务Gateway新一代网关

    上篇: https://zhuanlan.zhihu.com/p/183930681​zhuanlan.zhihu.com 一.概述简介 1.官网 上一代zuul 1.x:Netflix/zuul 当 ...

  6. 微服务下权限校验方案

    微服务权限校验方案 权限概述 鉴权和权限控制 权限问题描述 权限概述 任何一个系统都绕不开权限这两个字,一个良好的权限设计对一个系统起到了非常重要的作用,其实权限设计是个范围很大的问题,包括从数据库的 ...

  7. 【云原生微服务>SCG网关篇十二】Spring Cloud Gateway集成Sentinel API实现多种限流方式

    文章目录 一.前言 二.Gateway集成Sentinel API 0.集成Sentinel的核心概念 1)GatewayFlowRule 和 ApiDefinition 2)GatewayFlowR ...

  8. 微服务下的APM全链路监控

    https://opentalk.upyun.com/333.html 2017 年 10 月 29 日,又拍云 Open Talk 联合 Spring Cloud 中国社区成功举办了"进击 ...

  9. nginx工作笔记005---nginx配置负载均衡_在微服务中实现网关集群_实现TCP传输层协议__http协议的负载均衡

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 我们在微服务中,由于网关的存在,后来,在nginx中都不需要在配置其他服务的地址了,只需要,配置一 ...

最新文章

  1. 力扣(LeetCode)刷题,简单+中等题(第35期)
  2. DOM渲染的详细过程 1
  3. 18-爬虫之scrapy框架请求传参实现的深度爬取(全站爬取)05
  4. 一些上流的CSS3图片样式
  5. linux-查看文件类型-看本质-file
  6. 2017.10.12 小Q的无敌异或 失败总结
  7. idea 断点调试 以及 tomcat 无法访问
  8. Express 4.x Node.js的Web框架----《转载》
  9. Vlan的详解-----看完明白tag and untagged
  10. android暗水印技术,基于Android的隐藏数字水印技术的研究与实现
  11. UEFI开发与调试---ImageHandle和ControllerHandle
  12. 计算机系和清华大学,清华大学交叉信息研究院和计算机系区别
  13. 个人微信机器人,微信开发API
  14. 利用逆矩阵解线性方程组_经典Jacobi方法用于求解矩阵特征值
  15. log4j2日志配置颜色
  16. 工作十年之感悟 -- 兼谈生活与人生
  17. pytorch 高光谱图像分类
  18. 【控制】自适应控制,模型参考自适应控制,公式推导,有程序有结果图
  19. 配置文件格式详解之终极无惑
  20. eyou隐藏升级弹窗、云插件库、接口配置、功能开关【按需显示插件】

热门文章

  1. 正则表达式 学习笔记4.3
  2. 洛谷2296 寻找道路
  3. android关于获取摄像头帧数据转成图片
  4. 使用easyUI 格式化datagrid列
  5. ABP vNext微服务架构详细教程——分布式权限框架(上)
  6. 技术分享 | 微服务模式下如何高效进行API测试
  7. Asp.NetCore3.1开源项目升级为.Net6.0
  8. C# 代码生成二维码方法及代码示例(QRCoder)
  9. 使用 ML.NET 识别乐高颜色块
  10. 【Azure Show】|第九期 “我的计算机入门之路” 嘉宾秦婷婷汪宇杰文轩