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

Posted firsttry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务之API网关 kong 使用场景之路由功能相关的知识,希望对你有一定的参考价值。

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

spring cloud之zuul的类似实现

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

技术分享图片

场景说明

项目说明
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


以上是关于微服务之API网关 kong 使用场景之路由功能的主要内容,如果未能解决你的问题,请参考以下文章

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

Kong网关之负载均衡、动态路由配置

4.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- Kong 的基本功能

微服务之kong+consul

API网关之Kong简介

kong个人分享(api网关)