微服务之API网关 kong 使用场景之路由功能

API网关,在介绍spring cloud的时候我们也曾提到过zuul,并使用zuul做了一个简单的实验证明zuul是可以实现网关的路由功能的,在这篇文章中,我们会同样使用类似简单的例子来验证kong在此种场景下的使用。

spring cloud之zuul的类似实现

spring cloud的zuul的类似功能和实现,可参看下文:

spring cloud之api网关 https://blog.csdn.net/liumiaocn/article/details/53941354

场景说明

项目 说明
Api路由服务 kong
用户服务 用户相关的服务
组织服务 组织相关的服务

就像kong的中心化部署方式中所展示的那样,我们希望api通过kong来统一进行访问

验证准备

环境安装与设定:kong

微服务之API网关:Kong:使用场景之路由功能 https://mp.csdn.net/mdeditor/80442222

微服务模拟

使用如下tornado的镜像启动两个用于演示服务的容器

服务名称 模拟方式
用户服务 python /usr/local/bin/daemon.py “User Service”
组织服务 python /usr/local/bin/daemon.py “Org Service”

拉取tornado镜像

[[email protected] ~]# docker pull liumiaocn/tornado
...省略
[[email protected] ~]# 
  • 1
  • 2
  • 3

服务准备

事先准备一个用于模拟用户的服务和一个用于模拟组织的服务,其区别在于端口不同

服务 访问地址 返回模拟信息
用户服务 http://localhost:9001 Hello, Service :User Service
组织服务 http://localhost:9002 Hello, Service :Org Service

准备用户服务

[root@kong ~]# docker run -d -p 9001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "User Service"
a9934f082271de427c3e260c413aaf27ec3cc6d96dad7916ffb8897fd399af57
[root@kong ~]#
  • 1
  • 2
  • 3

确认用户服务

[root@kong ~]# curl http://localhost:9001
Hello, Service :User Service
[root@kong ~]#
  • 1
  • 2
  • 3

准备组织服务

[root@kong ~]# docker run -d -p 9002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "Org Service"
60086f528feedd334b54550766fcdd06ac6c782da12e8546fbcb8a3102026974
[root@kong ~]#
  • 1
  • 2
  • 3

确认组织服务

[root@kong ~]# curl http://localhost:9002
Hello, Service :Org Service
[root@kong ~]# 
  • 1
  • 2
  • 3

这样通过不同端口访问的API就准备好了,接下来来看一下如何类似zuul一样,kong是怎样实现路由控制的功能的

服务注册

注册用户服务

在kong中使用如下api进行用户服务注册

curl -i -X POST     --url http://127.0.0.1:8001/apis/     --data ‘name=userapi‘     --data ‘hosts=userhost‘     --data ‘upstream_url=http://192.168.163.117:9001/‘
  • 1
  • 2
  • 3
  • 4
  • 5

注意点,通过url结合apis/在8001端口对服务进行管理,其次upstream_url此处的访问需要使用IP或者容器IP,总之需要能够在容器和宿主机器之间能够访问的前提

执行日志

[root@kong ~]# curl -i -X POST \
>     --url http://127.0.0.1:8001/apis/ >     --data ‘name=userapi‘ >     --data ‘hosts=userhost‘ >     --data ‘upstream_url=http://192.168.163.117:9001/‘
HTTP/1.1 201 Created
Date: Fri, 25 May 2018 18:03:14 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: *
Server: kong/0.13.1

{"created_at":1527271394521,"strip_uri":true,"id":"6c3201d4-db7f-40da-b3cd-4db31b16bbf5","hosts":["userhost"],"name":"userapi","http_if_terminated":false,"preserve_host":false,"upstream_url":"http:\/\/192.168.163.117:9001\/","upstream_connect_timeout":60000,"upstream_send_timeout":60000,"upstream_read_timeout":60000,"retries":5,"https_only":false}
[root@kong ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

注册组织服务

curl -i -X POST     --url http://127.0.0.1:8001/apis/     --data ‘name=orgapi‘     --data ‘hosts=orghost‘     --data ‘upstream_url=http://192.168.163.117:9002/‘
  • 1
  • 2
  • 3
  • 4
  • 5

执行日志

[root@kong ~]# curl -i -X POST \
>     --url http://127.0.0.1:8001/apis/ >     --data ‘name=orgapi‘ >     --data ‘hosts=orghost‘ >     --data ‘upstream_url=http://192.168.163.117:9002/‘
HTTP/1.1 201 Created
Date: Fri, 25 May 2018 18:03:47 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: *
Server: kong/0.13.1

{"created_at":1527271427359,"strip_uri":true,"id":"02065a11-ddf8-4cc3-b188-80bc738d7dea","hosts":["orghost"],"name":"orgapi","http_if_terminated":false,"preserve_host":false,"upstream_url":"http:\/\/192.168.163.117:9002\/","upstream_connect_timeout":60000,"upstream_send_timeout":60000,"upstream_read_timeout":60000,"retries":5,"https_only":false}
[root@kong ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

路由控制

这样两个服务都在kong中进行了注册,接下来就可以通过kong的8000端口对这两个服务进行控制,控制的方式是通过指定Host: xxx来实现的

访问用户服务

可通过如下方式访问用户服务

curl -H ‘Host: userhost’ http://127.0.0.1:8000

执行日志

[root@kong ~]# curl -H ‘Host: userhost‘ http://127.0.0.1:8000
Hello, Service :User Service
[root@kong ~]#
  • 1
  • 2
  • 3

访问组织服务

可通过如下方式访问组织服务

curl -H ‘Host: orghost’ http://127.0.0.1:8000

执行日志

[root@kong ~]# curl -H ‘Host: orghost‘ http://127.0.0.1:8000
Hello, Service :Org Service
[root@kong ~]# 
  • 1
  • 2
  • 3

总结

在这篇文章中,我们了解到了kong的常见使用场景之一,它有类似zuul一样的功能,可以提供路由控制等api网关所能提供的功能,而实际本质上则是通过nginx对Host进行设定而实现路由选择的。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

原文地址:https://www.cnblogs.com/firsttry/p/10294123.html

时间: 2024-10-11 18:52:46

微服务之API网关 kong 使用场景之路由功能的相关文章

买单侠微服务的API网关演化之路

伴随着买单侠业务的快速发展,能够支持独立开发.独立部署.独立扩展的微服务在秦苍得到了广泛应用和蓬勃发展,短短3年左右时间,已经发展到了300+个微服务,并且还在快速增长中. 研发逐渐意识到伴随着微服务规模化的增长,必需要重视微服务的基础设施建设(API网关.服务注册中心.调用链跟踪等)才能保持开发效率和产品的质量. API网关作为访问微服务的大门, 是访问后台服务的入口,作为最常用的基础服务之一,其重要性不言而喻.在买单侠微服务的发展道路上,经过了以下摸索发展阶段,希望能给规模化应用微服务的攻城

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

Kong是Mashape开源的高性能高可用API网关和API服务管理层.它基于OpenResty,进行API管理,并提供了插件实现API的AOP.Kong在Mashape 管理了超过15,000 个API,为200,000开发者提供了每月数十亿的请求支持.本文将从架构.API管理.插件三个层面介绍Kong. 架构 按照康威定律,我们系统架构会拆的很散,系统由一堆服务组成,如下图所示: 库存服务.优惠券服务.价格服务时之前都会做一些特殊处理,如限流.黑白名单,日志.请求统计.而这些处理几乎是所有服

.net core 微服务之Api网关(Api Gateway)

原文:.net core 微服务之Api网关(Api Gateway) 微服务网关目录 1. 微服务引子 2.使用Nginx作为api网关 3.自创api网关(重复轮子) 3.1.构建初始化 3.2.构建中间件 4.结语 引用链接 1. 微服务引子 首先恭喜你,进入微服务的开发世界.微服务属于架构演进中的一种阶段,其特点是根据业务模块水平划分服务种类,每个服务可以独立部署并互相隔离,并对外提供轻量的Api调用,服务具有高可用特性. 微服务应遵循的设计原则: 单一职责原则: 每个微服务只需要实现自

Net分布式系统之六:微服务之API网关

本人建立了个人技术.工作经验的分享微信号,计划后续公众号同步更新分享,比在此更多具体.欢迎有兴趣的同学一起加入相互学习.基于上篇微服务架构分享,今天分享其中一个重要的基础组件“API网关”. 一.引言 随着互联网的快速发展,当前以步入移动互联.物联网时代.用户访问系统入口也变得多种方式,由原来单一的PC客户端,变化到PC客户端.各种浏览器.手机移动端及智能终端等.同时系统之间大部分都不是单独运行,经常会涉及与其他系统对接.共享数据的需求.所以系统需要升级框架满足日新月异需求变化,支持业务发展,并

基于spring-cloud的微服务(4)API网关zuul

API网关是微服务架构中的很重要的一个部分,内部有多个不同的服务提供给外部来使用,API网关可以对外做统一的入口,也可以在网关上做协议转换,权限控制和请求统计和限流等其他的工作 spring-cloud封装了Netflix提供的开源的API网关实现zuul,我们可以很方便地启动一个zuul网关的实例,并支持向eureka进行注册,并对在eureka上已经注册的服务进行代理 使用IDEA的spring initializer来创建一个zuul项目 填写相关的group类型等信息,选择使用gradl

基于.NET CORE微服务框架 -Api网关服务管理

1.前言 经过10多天的努力,surging 网关已经有了大致的雏形,后面还会持续更新完善,请大家持续关注研发的动态 最近也更新了surging新的版本 更新内容: 1. 扩展Zookeeper封装2. 增加服务元数据3. 增加API网关 开源地址:https://github.com/dotnetcore/surging 2.软件环境 IDE:Visual Studio 2017 15.3 Preview ,vscode 框架:.NET core 2.0 依赖程序:Zookeepe.Rabbi

微服务,ApiGateway 与 Kong

一. 微服务 二. Api Gateway 三. Kong 的使用 一. 微服务 对于一些传统的 大型项目,传统的方式会有一些缺陷,比如说 新人熟悉系统成本高(因为整个系统作为一个整体,彼此会有一定的牵连),项目重 启时间长,重构困难(对于一个新技术的引入,可能需要对整个项目推到重来),不易于更换新的技术,并且整个项目会慢慢变成巨无霸. 所以说就会有微服务这种概念,一个服务实现一个不同的特性或者功能.每一个独立的微服务都是一个小型应用.一些微服务可能会暴露一些api 给 其他的一些微服务或者是客

11 微服务集群网关Zuul介绍

在实际环境中,我们的应用程序会有多个服务调用者,如何将其组织起来统一对外提供服务呢?我们可以使用Netflix的Zuul框架构建微服务集群网关来解决这个问题. 1. Zuul框架介绍 1.1 关于Zuul Spring Cloud提供了多个组件用于集群内部的通信,例如服务管理组件Eureka,负载均衡组件Ribbon,REST客户端组件Feign等等.如果集群提供可一个API或者Web服务,需要与外部进行通信,最好的方式就是添加一个网关,将集群的服务都隐藏到网关后面,这种做法对于外部客户端来说,

轻量级容器Docker+微服务+RESTful API

[宗师]李锟(44035001) 10:23:03感觉Docker这样的轻量级容器+微服务+RESTful API三者可以形成一个铁三角.这也代表了PaaS未来的发展方向. [宗师]李锟(44035001) 10:47:07 轻量级容器+微服务+RESTful API,这是未来的一个很明显的技术发展趋势.越早投入,就越早收获.同学们记住这些话,都做个有心人.一般人我不告诉他. [宗师]李锟(44035001) 10:47:47学习不要只考虑能不能解决明天的吃法问题,那样做是没有出息的.