微服务之API⽹关:kong:使⽤场景之路由功能
API⽹关,在介绍spring cloud的时候我们也曾提到过zuul,并使⽤zuul做了⼀个简单的实验证明zuul是可以实现⽹关的路由功能的,在这篇⽂章中,我们会同样使⽤类似简单的例⼦来验证kong在此种场景下的使⽤。
spring cloud之zuul的类似实现
spring cloud的zuul的类似功能和实现,可参看下⽂:
spring cloud之api⽹关
场景说明
项⽬说明
Api路由服务kong
⽤户服务⽤户相关的服务
组织服务组织相关的服务
就像kong的中⼼化部署⽅式中所展⽰的那样,我们希望api通过kong来统⼀进⾏访问
验证准备
环境安装与设定:kong
微服务之API⽹关:Kong:使⽤场景之路由功能
微服务模拟
使⽤如下tornado的镜像启动两个⽤于演⽰服务的容器
服务名称模拟⽅式
⽤户服务python /usr/local/bin/daemon.py “User Service”
组织服务python /usr/local/bin/daemon.py “Org Service”拉取tornado镜像
[root@kong ~]# docker pull liumiaocn/tornado
...省略
[root@kong ~]#
服务准备
事先准备⼀个⽤于模拟⽤户的服务和⼀个⽤于模拟组织的服务,其区别在于端⼝不同
服务访问地址返回模拟信息
⽤户服务Hello, Service :User Service
组织服务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 ~]#
确认⽤户服务
[root@kong ~]# curl localhost:9001
Hello, Service:User Service
[root@kong ~]#
准备组织服务
[root@kong ~]# docker run -d -p 9002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "Org Service"
60086f528feedd334b54550766fcdd06ac6c782da12e8546fbcb8a3102026974
[root@kong ~]#
确认组织服务
[root@kong ~]# curl localhost:9002
Hello, Service:Org Service
[root@kong ~]#
这样通过不同端⼝访问的API就准备好了,接下来来看⼀下如何类似zuul⼀样,kong是怎样实现路由控制的功能的
服务注册
注册⽤户服务
在kong中使⽤如下api进⾏⽤户服务注册
curl -i -X POST \
--url 127.0.0.1:8001/apis/ \
--data 'name=userapi' \
--data 'hosts=userhost' \
--data 'upstream_url=192.168.163.117:9001/'
注意点,通过url结合apis/在8001端⼝对服务进⾏管理,其次upstream_url此处的访问需要使⽤IP或者容器IP,总之需要能够在容器和宿主机器之间能够访问的前提nginx和网关怎么配合使用
执⾏⽇志
[root@kong ~]# curl -i -X POST \
> --url 127.0.0.1:8001/apis/ \
> --data 'name=userapi' \
> --data 'hosts=userhost' \
> --data 'upstream_url=192.168.163.117:9001/'
HTTP/1.1201 Created
Date: Fri, 25 May 201818: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"
[root@kong ~]#
注册组织服务
curl -i -X POST \
--url 127.0.0.1:8001/apis/ \
--data 'name=orgapi' \
--data 'hosts=orghost' \
--data 'upstream_url=192.168.163.117:9002/'
执⾏⽇志
[root@kong ~]# curl -i -X POST \
> --url 127.0.0.1:8001/apis/ \
> --data 'name=orgapi' \
> --data 'hosts=orghost' \
> --data 'upstream_url=192.168.163.117:9002/'
HTTP/1.1201 Created
Date: Fri, 25 May 201818: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"
[root@kong ~]#
路由控制
这样两个服务都在kong中进⾏了注册,接下来就可以通过kong的8000端⼝对这两个服务进⾏控制,控制的⽅式是通过指定Host: xxx来实
现的
访问⽤户服务
可通过如下⽅式访问⽤户服务
执⾏⽇志
[root@kong ~]# curl -H 'Host: userhost' 127.0.0.1:8000
Hello, Service:User Service
[root@kong ~]#
访问组织服务
可通过如下⽅式访问组织服务
执⾏⽇志
[root@kong ~]# curl -H 'Host: orghost' 127.0.0.1:8000
Hello, Service:Org Service
[root@kong ~]#
总结
在这篇⽂章中,我们了解到了kong的常见使⽤场景之⼀,它有类似zuul⼀样的功能,可以提供路由控制等api⽹关所能提供的功能,⽽实际本质上则是通过nginx对Host进⾏设定⽽实现路由选择的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论