Tuesday, March 29, 2022

[Janus] 如何快速制定與使用Janus API Gateway


[前言]

當前端(Frontend) Web App 需要使用到多個API Servers時,最快的方式就是使用API Gateway 作為前端的進入點,透過URI Route的設定與對應後端的API & Server。

根據Janus's Github 上官方的描述, 它是一個輕量級的 API Gateway和 管理平台,可控制訪問 API 的人員、訪問時間以及訪問方式。Janus 還將記錄有關使用者如何與你的 API 交互以及何時出現問題的詳細分析。

官方文件: https://hellofresh.gitbooks.io/janus/content/

下面段落將說明如何快速制定與使用Janus API Gateway。


[如何快速制定與使用Janus API Gateway]

首先 複製 Github上的 Janus Source Code

~$ cd ~/
~$ git clone https://github.com/motiv-labs/janus.git


製作 Janus's Docker Image

~$ cd janus
~/janus$ docker build -t janus:debug .

利用janus/examples/front-proxy 內的設定作為我的範本(Template)

~/janus$ cd example/front-proxy
~/janus/examples/front-proxy$ tree -L 3
.
├── apis
│   ├── app.json   <== I put my api's URI route definition here
│   └── example.json
├── docker-compose.yml
├── janus.toml
└── stubs            <== Remove this folder because it is just for testing
    ├── service.json
    └── status.json  


在apis/app.json 放入我們需要的URI route 對應的設定,下列為app.json內容:

P.S: 可以在apis/內放多個.json檔案,裡面的內容如果需要定義多個以上的URI Routes,可以用逗號分隔多個設定並放入中括號內。

[
{
    "name" : "frontend9",
    "active" : true,
    "proxy" : {
        "append_path" : true,
        "listen_path" : "/k8s/podsvc/*",
        "upstreams" : {
            "balancing": "roundrobin",
            "targets": [
                {"target": "http://localhost:8088"}
            ]
        },
        "methods" : ["GET","POST"]
    }
},
{
    "name" : "simpleginserver2",
    "active" : true,
    "proxy" : {
        "strip_path" : true,
        "listen_path" : "/simple2/*",
        "upstreams" : {
            "balancing": "roundrobin",
            "targets": [
                {"target": "http://localhost:8001"}
            ]
        },
        "methods" : ["GET"]
    }
}
]


說明: 以上述
simpleginserver2 設定來說,我使用了 "strip_path" = true,客戶端對上面配置的API的請求:

GET /simple2/noaction HTTP/1.1
Host: localhost:8080

將導致 Janus 向上游服務發送以下請求如下:

GET /noaction HTTP/1.1
Host: localhost:8001


最後,需修改 docker-compose.yml

# 下列是我的範例
~/janus/examples/front-proxy$ cat docker-compose.yml
version: '3.3'
services:
  janus:
    image: janus:debug  <== 改為之前所 build 的 docker image
    ports:
      - "8080:8080"
      - "8081:8081"
    volumes:
      - ./janus.toml:/etc/janus/janus.toml
      - ./apis:/etc/janus/apis

# 執行 Janus API Gateway
~/janus/examples/front-proxy$ docker-compose up -d

No comments: