Kong-To-APISIX:減輕你的遷移壓力

本文做者吳舒暘,Apache APISIX committer,API7 開發工程師。目前主要負責混沌工程在 APISIX 上的實踐。經過閱讀本文,您將瞭解如何使用咱們新推出的遷移工具,進行 Kong 到 Apache APISIX 到一鍵平滑遷移。git

kongtoapisix.png Apache APISIX 是一個生產可用的開源七層全流量處理平臺,可做爲 API 網關處理業務入口流量,具備極高性能、超低延遲,官方支持 dashboard 以及超過五十種插件。若是你正在使用 Kong,對 APISIX 感興趣又苦於難以上手,不妨試試咱們剛開源的遷移工具 Kong-To-APISIX,助你一鍵平滑遷移。github

項目功能

Kong-To-APISIX 利用 Kong 和 APISIX 的聲明式配置文件實現了配置數據的遷移,並根據兩側架構和功能的不一樣作出相應適配。目前咱們支持了 Kong 一側 Route、Service、Upstream、Target,Consumer 以及三個插件 Rate Limiting、Proxy Caching 以及 Key Authentication 的配置遷移,並以 Kong 的 Getting Started Guide 爲例,完成了一個最小的 demo。docker

使用方法

  1. 使用 Deck 導出 Kong 聲明式配置文件

具體步驟參照:docs.konghq.com/deck/1.7.x/…apache

  1. 下載倉庫並運行遷移工具,遷移工具會生成聲明式配置文件 apisix.yaml 待使用
$ git clone https://github.com/api7/kong-to-apisix
​
$ cd kong-to-apisix
​
$ make build
​
$ ./bin/kong-to-apisix migrate --input kong.yaml --output apisix.yaml
​
migrate succeed
複製代碼
  1. 使用 apisix.yaml配置 APISIX, 具體步驟參照 apisix.apache.org/docs/apisix…

Demo 測試

  1. 確保 docker 正常運行,部署測試環境,使用 docker-compose 拉起 APISIX、Kong
git clone https://github.com/apache/apisix-docker
cd kong-to-apisix
./tools/setup.sh
複製代碼
  1. 根據 Kong 的 Getting Started Guide,爲 Kong 添加配置並進行測試: a. 經過 Service 和 Route 暴露服務,進行路由轉發 b. 設置 Rate Limiting 和 Proxy Caching 插件作限流緩存 c. 設置 Key Authentication 插件作認證 d. 經過 Upstream 和 Target 設置負載均衡
./examples/kong-example.sh
複製代碼
  1. 導出 Kong 的聲明式配置文件到 kong.yamlapi

    go run ./cmd/dumpkong/main.go
    複製代碼
    1. 運行遷移工具,導入 kong.yaml 並生成 APISIX 配置文件 apisix.yaml 至 docker volumes
    export EXPORT_PATH=./repos/apisix-docker/example/apisix_conf
    ​
    go run ./cmd/kong-to-apisix/main.go
    複製代碼
    1. 在 APISIX 一側測試遷移事後的路由、負載均衡、插件等是否正常運行緩存

      a. 測試 key auth 插件markdown

    curl -k -i -m 20 -o /dev/null -s -w %{http_code} http://127.0.0.1:9080/mock
    # output: 401
    複製代碼

    b. 測試 proxy cache 插件架構

    # access for the first time
    curl -k -I -s  -o /dev/null http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org"
    # see if got cached
    curl -I -s -X GET http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org"
    # output:
    #   HTTP/1.1 200 OK
    #   ...
    #   Apisix-Cache-Status: HIT
    複製代碼

    c. 測試 limit count 插件負載均衡

    for i in {1..5}; do
        curl -s -o /dev/null -X GET http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org"
    done
    curl -k -i -m 20 -o /dev/null -s -w %{http_code} http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org"
    # output: 429
    複製代碼

    d. 測試負載均衡curl

    httpbin_num=0
    mockbin_num=0for i in {1..8}; do
        body=$(curl -k -i -s http://127.0.0.1:9080/mock -H "apikey: apikey" -H "Host: mockbin.org")
        if [[ $body == *"httpbin"* ]]; then
            httpbin_num=$((httpbin_num+1))
        elif [[ $body == *"mockbin"* ]]; then
            mockbin_num=$((mockbin_num+1))
        fi
        sleep 1.5done
    echo "httpbin number: "${httpbin_num}", mockbin number: "${mockbin_num}
    # output:
    #   httpbin number: 6, mockbin number: 2
    複製代碼

    總結

    遷移工具的後續開發計劃已在 Kong-To-APISIX 的 GitHub 倉庫的 Roadmap 中呈現,歡迎你們訪問 Kong-To-APISIX 的 GitHub 倉庫地址:github.com/api7/kong-t… ,測試與使用 Kong-To-APISIX。 歡迎任何對這個項目感興趣的人一同來爲這個項目做貢獻!有任何問題均可以在倉庫的 Issues 區討論。

    關於 Apache APISIX--

相關文章
相關標籤/搜索