閘道器服務Kong和konga介紹安裝使用教程

虛無境發表於2021-08-24

介紹

Kong是一款基於OpenResty(Nginx + Lua模組)編寫的高可用、易擴充套件的,由Mashape公司開源的API Gateway專案。Kong是基於NGINX和Apache Cassandra或PostgreSQL構建的,能提供易於使用的RESTful API來操作和配置API管理系統,所以它可以水平擴充套件多個Kong伺服器,通過前置的負載均衡配置把請求均勻地分發到各個Server,來應對大批量的網路請求。
Kong是一個在 Nginx 中執行的Lua應用程式,並且可以通過lua-nginx模組實現,Kong不是用這個模組編譯Nginx,而是 OpenResty 一起釋出,OpenResty已經包含了 lua-nginx-module, OpenResty 不是 Nginx的分支,而是一組擴充套件其功能的模組。它的核心是實現資料庫抽象,路由和外掛管理,外掛可以存在於單獨的程式碼庫中,並且可以在幾行程式碼中注入到請求生命週期的任何位置。

Kong主要有三個元件:

  • Kong Server :基於nginx的伺服器,用來接收API請求。
  • Apache Cassandra/PostgreSQL :用來儲存運算元據。
  • Kong dashboard:官方推薦UI管理工具,當然,也可以使用 restfull 方式 管理admin api。

Kong的主要功能包括:

  • 高階路由、負載平衡、健康檢查——所有這些都可以通過管理 API 或宣告性配置進行配置。
  • 使用 JWT、基本身份驗證、ACL 等方法對API 進行身份驗證和授權。
  • 代理、SSL/TLS 終止以及對 L4 或 L7 流量的連線支援。
  • 用於實施流量控制、req/res轉換、日誌記錄、監控和包括外掛開發人員中心的外掛。
  • 複雜的部署模型,如宣告式無資料庫部署和混合部署(控制平面/資料平面分離),沒有任何供應商鎖定。
  • 本機入口控制器支援服務Kubernetes。

在這裡插入圖片描述
外掛提供了擴充套件閘道器使用的高階功能。許多 Kong Inc. 和社群開發的外掛(如 AWS Lambda、Correlation ID 和 Response Transformer)都在外掛中心展示。
在這裡插入圖片描述
在這裡插入圖片描述

官網:
https://docs.konghq.com/

github:

https://github.com/kong/kong
https://github.com/pantsel/konga

安裝教程

這裡推薦使用docker安裝,並且推薦使用docker-compose進行安裝,因為可以安裝圖形化介面konge,省去了kong和konge整合的煩惱,而且安裝部署方便。
docker安裝可參考我之前寫的這篇博文:Docker簡易安裝教程

如果還是想用linux方式安裝,安裝方式以及問題可參考這篇博文:https://blog.csdn.net/qq_33067315/article/details/108635407

docker-compose安裝

docker-compose安裝命令如下:

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

安裝成功之使用docker-compose --version檢視安裝版本,docker-compose的yml的配置檔案說明可參考:https://www.runoob.com/docker/docker-compose.html,這裡就不再過多描述了。

kong和konga的compose.yml檔案

在瞭解docker-compose之後,我們首先在/opt/目錄下建立kong資料夾,然後使用touch命令建立一個docker-compose.yml檔案,然後新增如下配置:

docker-compose.yml

version: '3'
services: 
  kong-database:
    image: postgres:9.6
    restart: always  #每次總是啟動
    networks: 
      - kong-net
    environment:
      POSTGRES_USER: kong
      POSTGRES_DB: kong
      POSTGRES_PASSWORD: kong
    ports:
      - "5432:5432"
#######################
# 執行資料庫遷移
######################
  kong-migration:
    image: kong:latest
    command: "kong migrations bootstrap"
    networks: 
      - kong-net
    restart: on-failure
    environment:
      - KONG_DATABASE=postgres
      - KONG_PG_DATABASE=kong
      - KONG_PG_PASSWORD=kong
      - KONG_PG_HOST=kong-database
    links: 
      - kong-database #連線的是kong-database服務的
    depends_on:
      - kong-database #依賴於kong-database服務

#####################
# kong gateway
#####################
  kong:
    image: kong:latest
    restart: always
    networks:
      - kong-net
    environment:
      KONG_DATABASE: postgres
      KONG_PG_HOST: kong-database
      KONG_PG_PASSWORD: kong
      KONG_PROXY_LISTEN: 0.0.0.0:8000
      KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443
      KONG_ADMIN_LISTEN: 0.0.0.0:8001
    depends_on:
      - kong-migration
    links: 
      - kong-database
    healthcheck:
      test: ["CMD", "curl", "-f", "http://kong:8001"]
      interval: 5s
      timeout: 2s
      retries: 15
    ports:
      - "8001:8001"
      - "8000:8000"
      - "8443:8443"
#######################
#以下兩個是konga  GUI
#######################
  konga-prepare:
    image: pantsel/konga:latest
    command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga"  #注意是使用者名稱:密碼@資料庫服務名稱:埠
    networks:
      - kong-net
    restart: on-failure
    links:
      - kong-database
    depends_on:
      - kong        #依賴kong服務
      - kong-database #依賴kong-database服務

  konga:
    image: pantsel/konga:latest
    restart: always
    networks:
      - kong-net
    environment:
      DB_ADAPTER: postgres
      DB_HOST: kong-database
      DB_USER: kong
      DB_DATABASE: konga
      DB_PASSWORD: kong #必須加上密碼,不然會失敗
    depends_on:
      - kong
      - kong-database
    ports:
      - "1337:1337"
networks:
  kong-net:
    driver: bridge

上述配置完畢之後,在/opt/kong該目錄下輸入如下命令,進行啟動

docker-compose up -d

然後輸入docker-compose ps進行檢視是否啟動成功,成功示例圖如下:

在這裡插入圖片描述

一個簡單使用示例

本示例主要講解一下閘道器中最常用的路由轉發,原先是A服務配置B服務的地址,然後A服務直接請求B,現在則是A服務配置閘道器服務的地址,然後請求閘道器服務,閘道器服務將A的請求轉發到B服務。

這裡需要使用konga,因為有圖形化介面,操作較為簡單明瞭,當然用命令也可以實現,方法在上述的官方文件中給出了示例,這裡就不再過多描述了。

在瀏覽器輸入konga的地址,地址為:ip:1337,開啟介面之後,預設是需要建立一個管理員的賬號的,按照示例圖的填寫即可,示例圖如下:
在這裡插入圖片描述

註冊完畢之用建立的賬和密碼進行登入,然後填寫kong服務的ip和埠,我這裡設定的是8001,名稱這裡我填寫的kong,可以隨意,示例圖如下:

在這裡插入圖片描述
注:由於當時填寫忘記截圖了,就用了配置好的截圖,實際效果基本一致。

一個簡單路由轉發示例:

kong服務地址: 192.168.10.102
本地服務version檢視地址: 192.168.6.14

登入konga,點選services,點選add new service,建立一個服務,配置資訊填寫如下:
在這裡插入圖片描述

然後點選該服務,在裡面新增路由,然後填寫路由相關資訊。
在這裡插入圖片描述

配置資訊如下:

在這裡插入圖片描述
然後在本地的電腦的hosts檔案新增如下kong服務和域名的對映:
windows路徑: C:\Windows\System32\drivers\etc\hosts
linux路徑: /etc/hosts

192.168.10.102 pancm.com

對映ok之後,啟動本地的服務,在瀏覽器訪問 http://pancm.com:8000/或http://pancm.com:8000/version都可看到版本資訊

在這裡插入圖片描述

在這裡插入圖片描述

完整的請求流程如下:

瀏覽器域名請求->通過hosts檔案找到地址->請求kong服務地址->根據服務路由配置進行轉發->請求配置服務的介面地址->返回資料

其他

音樂推薦

原創不易,如果感覺不錯,希望給個推薦!您的支援是我寫作的最大動力!
版權宣告:
作者:虛無境
部落格園出處:http://www.cnblogs.com/xuwujing
CSDN出處:http://blog.csdn.net/qazwsxpcm    
個人部落格出處:http://www.panchengming.com

相關文章