API Gateway Kong在Rainbond上的雲原生部署

API Gateway Kong在Rainbond上的部署

原文發表在 Rainbond社區

什麼是Kong

kong

Kong是一個可擴展的開源API平臺(也稱爲API網關,API中間件或微服務服務網格)。Kong最初是由Kong Inc.(以前稱爲Mashape)實現的,用於爲其API Marketplace維護、管理和擴展超過15,000個微服務,這些微服務每月產生數十億個請求。

技術上講,Kong是在Nginx中運行的Lua應用程序,並且通過lua-nginx-module實現。Kong是與OpenResty一起分發的,而不是使用此模塊來編譯Nginx,OpenResty已經包括lua-nginx-module。

瞭解更多有關Kong的事情,你需要點擊瞭解一下

從應用市場安裝

快速安裝

目前我們已經將最新版本(v1.4.X)的Kong發佈到了應用市場,如果你想要快速的搭建以及使用Kong,你只需要做一件事情,那就是點擊一下安裝:

Kong-install

等待一小段時間後,Kong就已經部署在了你的Rainbond集羣中了。在這個應用中,我們已經集成了Konga作爲UI管理工具,接下來的步驟,需要你訪問Konga,做幾步簡單的設置,就可以愉快的探索Kong了。

  • 註冊Konga
  • 配置Kong的連接地址,寫入 http://127.0.0.1:8001即可
  • 連接成功,就可以使用Konga來管理你的Kong了

注意事項

  • 如果你所使用的Rainbond平臺,是在2019年12月25日以前安裝的,並且沒有進行過任何升級操作,那麼你可能遇到Konga連接不到Kong的問題,解決的方案如下:
    • 如果你使用了v5.1.9以前的版本,請升級到最新版本
    • 如果你現在已經在使用v5.1.9版本,那麼請點擊鏈接,打個補丁。
  • Kong的啓動很消耗內存

配置Kong

環境變量

Kong支持以KONG_開頭的環境變量進行配置。舉例說明:

對於部署在Rainbond上的Kong來說,直接添加環境變量

KONG_LOG_LEVEL = error

即可在Kong的配置文件中生成

log_level = error

添加完成後,點擊更新,即可使之生效。

注入Nginx配置

通過調整Kong實例的Nginx配置,可以優化其基礎架構的性能。

Kong啓動時,將構建一個Nginx配置文件。你可以通過Kong配置直接將自定義Nginx配置注入此文件。

注入單個Nginx配置

Kong的配置文件中的任何前綴爲的條目nginx_http_nginx_proxy_nginx_admin_通過刪除前綴將其轉換爲等效的Nginx指令,並將其添加到Nginx配置的相應部分:

  • 前綴爲的條目nginx_http_將注入到整體http 塊指令中。
  • 前綴爲的條目nginx_proxy_將注入到server處理Kong代理端口的block指令中。
  • 前綴爲的條目nginx_admin_將注入到server處理Kong的Admin API端口的block指令中。

例如,如果將以下行添加到kong.conf文件中:

nginx_proxy_large_client_header_buffers=16 128k

它將以下指令添加到serverKong的Nginx配置的代理塊中:

large_client_header_buffers 16 128k;

爲了達到這個目的,你需要參考環境變量,爲Kong添加以下環境變量:

KONG_NGINX_HTTP_OUTPUT_BUFFERS = "4 64k"

通過注入的Nginx指令包含文件

對於更復雜的配置方案,例如添加整個新 server塊,可以使用上述方法include向Nginx配置注入 指令,指向包含其他Nginx設置的文件。

可以通過在kong.conf文件中添加以下條目來包含目標文件:

nginx_http_include = /path/to/your/my-server.kong.conf

在Rainbond上,可以通過環境變量進行配置:

KONG_NGINX_HTTP_INCLUDE="/path/to/your/my-server.kong.conf"

Kong應用怎麼製作

即點即用的Kong,使用起來非常方便。那麼這個應用是怎麼製作的呢?

我們只需要做到以下幾點,就可以發佈出可以即點即用的雲市場應用:

  • 目標應用的所有組件都已經部署在Rainbond並正常運行
  • 各服務組件使用的數據庫具備自動初始化數據的功能
  • 各服務組件間的依賴關係已經處理妥當,從業務層面已經正常運行

接下來,只需要參考應用分享與發佈,將你的應用發佈出去即可。

數據庫自動初始化

Kong可以使用的數據庫包括 Postgres與Cassandra,我們這裏使用了前者。

首先利用docker run 命令快速部署一個Postgresql:

docker run -d --name kong-database \
                -p 5432:5432 \
                -e "POSTGRES_USER=kong" \
                -e "POSTGRES_DB=kong" \
                postgres:9.6

使用Kong的鏡像,即可初始化數據庫表結構,在部署初始化組件時,要記得建立從 kong-init 指向 kong-database的依賴關係:

docker run --rm \
    --name kong-init \
    --link kong-database:kong-database \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=127.0.0.1" \
    -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
    kong kong migrations bootstrap

kong-init 運行完成後會自動退出,在Rainbond上顯示運行異常,不用擔心,它已經完成了使命,驗證下 kong-database 中已存在數據表結構,就可以刪除kong-init 了。

進入 kong-database 的容器實例,通過命令行工具備份出數據庫。

pg_dump -U kong -d kong > /var/lib/postgresql/data/data.sql

找到 kong-database 的數據持久化目錄,得到 data.sqlkong-database 的使命也就達成了,可以被關閉刪除。

自定義一個代碼倉庫,參考 https://github.com/dazuimao1990/pri-postgresql/tree/kong 將 data.sql 放到 sql 目錄下,即可用這份代碼創建一個可以自動初始化表結構的Postgresql了。創建之,命名爲 kong-postgres 備用。

部署Kong

直接使用docker run 命令創建Kong,要記得建立從 Kong 指向 kong-postgres 的依賴關係:

docker run -d --name kong \
    --link kong-database:kong-database \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=127.0.0.1" \
    -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
    -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
    -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
    -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
    -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
    -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
    -p 8000:8000 \
    -p 8443:8443 \
    -p 8001:8001 \
    -p 8444:8444 \
    kong

內存至少提高至4G。

部署Konga

直接使用docker run 命令創建Konga,要記得建立從 Konga 指向 Kong 的依賴關係:

docker run -p 1337:1337 \
             --name konga \
             pantsel/konga

完成後,最終拓撲將會是這個樣子的:

發佈應用

點擊 發佈到市場,編輯它的信息,即可發佈了。

發佈了19 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章