1. 程式人生 > >微服務之API網關 kong 使用場景之路由功能

微服務之API網關 kong 使用場景之路由功能

res dad fontsize 之路 nat tor time docke 簡單的

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鏡像

[root@kong ~]# docker pull liumiaocn/tornado
...省略
[root@kong ~]# 
  • 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 使用場景之路由功能