Kong網關


Kong網關

一、kong網關核心概念

1. Upstream

upstream 對象表示虛擬主機名,可用於通過多個服務對傳入請求進行負載遠的

2. Target

目標ip地址/主機名,其端口表示后端服務的實例。每個上游都可以有多個Target,並且可以動態添加Target。

3. Service

服務實例是每個上游服務的抽象。服務的主要屬性是它的URL,其可以被設置為單個串或者通過指定其protocol,host,port和path。服務與路由相關聯(服務可以有許多與之關聯的路由)。路由是kong的入口點,並定義匹配客戶端請求的規則。一量匹配路由,kong就會將請求代理到其關聯的服務。

4. Route

路由實體定義規則以匹配客戶端的請求,每個Route與一個Service相關聯,一個服務可能有多個與之關聯的路由。與給定路由匹配的每個請求都將代理到其關聯的Service上。可以配置的字段有:

  • hosts
  • paths
  • methods

Service和Route的組合提供了一種強大的路由機制,通過它可以在kong中定義細粒度的入口點,從而使基礎架構路由到不同上游服務。

5. Consumer

Consumer 對象表示服務的使用者或者用戶,你可以依靠kong作為主數據庫存儲,也可以將使用者列表與數據庫映射,以保持Kong與現有的主數據存儲之間的一致性。

6. Plugin

插件實體表示將在httpygfi/響應生命周期執行的插件配置。它是為在kong后面運行的服務添加功能的。

將插件配置添加到服務時,客戶端向該服務發出的每個請求都將運行所述插件。如果某個特定消費者需要將插件調整為不同的值,你可以通過 創建一個單獨的插件實例,通過service和consumer字段指定服務和消費者。

對應關系

Upstream : target -> 1:n

Service:Upstream -> 1:1 or 1:0 (service 可以直接指向具體的Target,相當於不做負載均衡)

Service:Route -> 1:n

Client 請求的流量通過Route指向與之相關的Service,如果配置插件的話就會作用插件,Service接到流量后給到相應的Upstream的服務上面。

二、kong API操作

配置服務

通過向Admin發送Http請求來向Kong添加服務

{
 "connect_timeout":60000,
 "created_at":1587869247,
 "host":"test-service.com",
 "id":"dddddddddddddddddddddddddddd",
 "name":"test-service",
 "path":"/",
 "port":80,
 "protocol":"http",
 "read_timeout":60000,
 "retries":5,
 "updated_at":1587869247,
 "write_timeout":60000
}

url參數是一個簡化參數,用於一次性添加protocol,host,port和path。

路由匹配規則

現在讓我們討論kong如何匹配針對路由的已配置host,path和methods屬性的請求。請注意,所有這三個字段都是可選的,但必須至少指定其中一個。

對於匹配路線的請求:

  • 請求必須包含所有已配置的字段
  • 請求中的字段必須至少與其中一個配置值匹配(當字段配置接收一個或者多個值時,請求只需要其中一個值被視為匹配)
  • kong route 中的host的作用是什么,有什么意義哪些場景會用到設置多個host呢?

三、Kong運維

kong version   #查看版本

1. 運行目錄

/usr/local/kong Kong的運行目錄
/usr/local/kong/pids/nginx.pid nginx-master進程號
/usr/local/kong/logs/access.log 數據口的訪問日志文件
/usr/local/kong/logs/admin_access.log 管理口的訪問日志
/usr/local/kong/logs/error.log 錯誤日志

2.監聽端口

#數據口:8000
curl http://127.0.0.1:8000
#管理口:8001
curl http://127.0.0.1:8001/
#查看連接數統計
curl http://127.0.01:8001/status 2>/dev/null | jq .server
{
  "connections_writing": 1,
  "total_requests": 13,
  "connections_handled": 13,
  "connections_accepted": 13,
  "connections_reading": 0,
  "connections_active": 1,
  "connections_waiting": 0
} 
#查看內存統計
curl http://127.0.01:8001/status 2>/dev/null | jq .memory
{
  "workers_lua_vms": [
    {
      "http_allocated_gc": "0.05 MiB",
      "pid": 1310
    }
  ],
  "lua_shared_dicts": {
    "kong_rate_limiting_counters": {
      "allocated_slabs": "0.08 MiB",
      "capacity": "12.00 MiB"
    },
    "kong_locks": {
      "allocated_slabs": "0.06 MiB",
      "capacity": "8.00 MiB"
    },
    "kong_healthchecks": {
      "allocated_slabs": "0.04 MiB",
      "capacity": "5.00 MiB"
    },
    "kong_cluster_events": {
      "allocated_slabs": "0.04 MiB",
      "capacity": "5.00 MiB"
......

3. 監控指標

  • 連接數
  • 內存
  • 錯誤日志


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM