本文共 3760 字,大约阅读时间需要 12 分钟。
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 http://localhost:9001Hello, 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 http://localhost:9002Hello, Service :Org Service[root@kong ~]#
这样通过不同端口访问的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/'
注意点,通过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 CreatedDate: Fri, 25 May 2018 18:03:14 GMTContent-Type: application/json; charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveAccess-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 ~]#
注册组织服务
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/'
执行日志
[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 CreatedDate: Fri, 25 May 2018 18:03:47 GMTContent-Type: application/json; charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveAccess-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 ~]#
路由控制
这样两个服务都在kong中进行了注册,接下来就可以通过kong的8000端口对这两个服务进行控制,控制的方式是通过指定Host: xxx来实现的
访问用户服务
可通过如下方式访问用户服务
curl -H ‘Host: userhost’
执行日志
[root@kong ~]# curl -H 'Host: userhost' http://127.0.0.1:8000Hello, Service :User Service[root@kong ~]#
访问组织服务
可通过如下方式访问组织服务
curl -H ‘Host: orghost’
执行日志
[root@kong ~]# curl -H 'Host: orghost' http://127.0.0.1:8000Hello, Service :Org Service[root@kong ~]#
总结
在这篇文章中,我们了解到了kong的常见使用场景之一,它有类似zuul一样的功能,可以提供路由控制等api网关所能提供的功能,而实际本质上则是通过nginx对Host进行设定而实现路由选择的。
转载地址:https://liumiaocn.blog.csdn.net/article/details/80466616 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!