Kong api網關實戰教程

1. kong介紹

Kong是一款基于OpenResty(Nginx+Lua模塊)編寫的高可用、易擴展的,由Mashape公司開源的API Gateway項目。Kong是基于NGINX和Apache Cassandra或PostgresQL構建的,能據供易于使用的RSTTAP[來操作和配置API管理系統,所以它可以水平擴展多個Kong服務器,通過前置的負載均衡配置把請求均勻地分發到名今Senver,來應對大批量的網絡請求。

在這里插入圖片描述

2. Kong 架構

  1. 組件架構
1. Kong server:基于nginx服務器,用來接收api請求
2. Apache cassandra/postgresql 存儲數據。
3. Kong dashboard: 官方推薦ul管理工具,

Kong采用插件機制進行功能定制,插件集(可以0或N個)在API請求響應循環的生命周期中被執行。插件使用Lua編寫,目前已有幾個基礎功能:HTTP基本認證、密鑰認證、CORs(Cross-Origin Resource sharing,跨域資源共享)、TCP、UDP、文件日志、API請求限流、請求轉發以及Nginx監控。

2. 網關架構

- RESTFul APis--------->管理api的入口
- Kong 插件層--------->基于lua語言開發,支持第三方插件,攔截請求/響應生命周期
- 集群&數據存儲
- OPenResty--------->kong 網關的底層引擎,提供響應周期的hooks,對nginx服務進行擴容
- Nginx
  1. Kong核心基于OpenResty構建,實現了請求/響,應的Lua處理化,
  2. Kong插件攔截請求/響應;
  3. Kong Restful 管理AP!提供了APIAPI消費者/插件的管理:
  4. 數據中心用于存儲Kong集群節點信息、AP1、消費者、插件等信息,目前提供了PostgresQL和Cassandra支持,如果需要高可用建議使用Cassandra;
  5. Kong集群中的節點通過gossip協議自動發現其他節點,當通過一個Kong節點的管理AP!進行一些變更時也會通知其他節點。每個Kong節點的配置信息是會緩存的,如插件,那么當在某一個Kong節點修改了插件配置時,需要通知其他節點配置的變更。

3. kong的安裝使用

https://blog.csdn.net/qq_39962403/article/details/135777218

官方安裝說明文檔

https://docs.konghq.com/gateway/latest/  #kong版本說明
https://docs.konghq.com/gateway/3.6.x/install/linux/rhel/  #安裝luninx版本
https://docs.konghq.com/gateway/3.6.x/install/docker/  #docker安裝
https://www.postgresql.org/download/linux/redhat/  #pgsql安裝說明

[圖片]

安裝kong數據
docker network create kong-net
docker run -d --name kong-database \--network=kong-net \-p 5432:5432 \-e "POSTGRES_USER=kong" \-e "POSTGRES_DB=kong" \-e "POSTGRES_PASSWORD=kong" \postgres:9.6
kong數據初始化
docker run --rm \--network=kong-net \-e "KONG_DATABASE=postgres" \-e "KONG_PG_HOST=kong-database" \-e "KONG_PG_USER=kong" \-e "KONG_PG_PASSWORD=kong" \-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \kong:2.0.3 kong migrations bootstrap

安裝kong服務

docker run -d --name kong \--network=kong-net \-e "KONG_DATABASE=postgres" \-e "KONG_PG_HOST=kong-database" \-e "KONG_PG_USER=kong" \-e "KONG_PG_PASSWORD=kong" \-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:2.0.3
驗證
http://172.16.226.7:8001/

**默認情況下kong 綁定了四個4端口

  • Proxy 8000: 接收客戶端的http請求,并轉發到后端的upstream
  • Proxy 8443: 接收客戶端的https請求,并轉發到后端的upstream
  • admin 8001: 接收管理員的http請求,進行kong的管理
  • admin 8444:接收管理員的https請求,進行kong的管理**
安裝kong-ui控制臺
docker volume create konga-postgresql
安裝kong-ui數據看
docker run -d --name konga-database \--network=kong-ee-net \-p 5433:5432 \-v konga-postgresql:/var/lib/postgresql/data \-e "POSTGRES_USER=konga" \-e "POSTGRES_DB=konga" \-e "POSTGRES_PASSWORD=konga" \postgres:9.6
初始化kong-ui數據看
docker run --rm --network=kong-ee-net \
pantsel/konga:latest \
-c prepare \
-a postgres \
-u postgres://konga:konga@konga-database:5432/konga
啟動kong-ui 服務
docker run -d -p 1337:1337 \--name konga \--network=kong-ee-net \-e "DB_ADAPTER=postgres" \-e "DB_URI=postgres://konga:konga@konga-database:5432/konga" \-e "NODE_ENV=production" \-e "DB_PASSWORD=konga" \pantsel/konga

登陸驗證

http://172.16.226.7:1337/#!/connections

4. kong的使用

Nginx 下的負載均衡配置

upstream tulingma11-product-upstream {server 192.168.65.190:8866 weight=100;server 192.168.65.190:8867 weight=100;}
server {listen 80;1ocation /pms/ {proxy_pass http://tulingma11-product-upstream;}
}
kong組件介紹

kong組件
說明
service

service 對應服務,可以直接指向一個 AP| 服務節點(host 參數設置為 ip+ port),也可以指定一個upstream 實現負載均衡。簡單來說,服務用于映射被轉發的后端 API的節點集合

route

route 對應路由,它負責匹配實際的請求,映射到 service

upstream

upstream 對應一組 API 節點,實現負載均衡

target

target 對應一個 AP| 節點

在這里插入圖片描述

創建upstream

調用kong api創建一個名為demo-upstream的upstream
api操作

 curl  -X  POST  http://172.16.226.7:8001/upstreams  --data "name=demo-upstream"

在這里插入圖片描述

界面操作
在這里插入圖片描述

創建target

api操作

 curl  -X  POST  http://172.16.226.7:8001/upstreams/demo-upstream/targets  --data "target=172.16.226.13:80" --data "weight=100"

在這里插入圖片描述

[圖片]
界面操作
在這里插入圖片描述

創建service

api操作

 curl  -X  POST  http://172.16.226.7:8001/services --data "name=demo-upstream" --data "host=demo-upstream" --data "path=/pms"

在這里插入圖片描述

[圖片]
界面操作
在這里插入圖片描述

創建route

api操作

 curl  -X  POST  http://172.16.226.7:8001/services/demo-upstream/routes --data "name=demo-upstream"  --data "paths[]=/pms"

界面操作
在這里插入圖片描述

驗證測試返回結果一致
http://172.16.226.13/
http://172.16.226.7:8000/pms

在這里插入圖片描述
在這里插入圖片描述

5. 基本插件的使用

https://www.bilibili.com/video/BV1jY411p7qm?p=5&spm_id_from=pageDriver&vd_source=37f81c1b36b3818cbad621bcbe5c3e49

配置Basic Auth插件
#在服務上配置插件

cur1 -x POST http://127.0.0.1:8001/services/{service}/plugins \
--data "name=basic-auth" \
--data "config.hide_credentias=true"

#在路由上配置插件

cur1 -x PosT http://127.0.0.1:8001/routes/{route_id}/plugins\
--data "name=basic-auth"
--data "config.hide_credentials=true"

在這里插入圖片描述
在這里插入圖片描述

JWT身份認證

在這里插入圖片描述
service緯度添加
在這里插入圖片描述
routes維度添加
在這里插入圖片描述
consumers維度添加
在這里插入圖片描述
在這里插入圖片描述

Kong限流配置

Kong 提供了 Rate Limiting,插件,實現對請求的限流功能,避免過人的請求量過大,將后端服務打掛,
Rate limiting 支持秒!分/小時/日/月/年多種時間維度的限流,并且可以組合使用。例如說:限制每秒最多 100 次請求,并且每分鐘最多1000 次請求。
Rate limiting 支持 consumer、credentia1、ip 三種基礎維度的限流,默認為 consumer。例如說:設置每個IP 允許每秒請求的次數。計數的存儲,支持使用 loca1、cluster、redis 三種方式進行存儲,默認為 cluster :

  • 1oca1:存儲在 Nginx 本地,實現單實例限流
  • c1uster:存儲在 Cassandra 或 PostgresQL 數據庫,實現集群限流
  • redis :存儲在 Redis 數據庫,實現集群限流。
    Rate limiting,采用的限流算法是計數器的方式,所以無法提供類似令牌桶算法的平滑限流能力。
    在這里插入圖片描述
    在這里插入圖片描述
    配置每秒通過一個請求超過閾值報錯
    在這里插入圖片描述
    黑白名單配置
    在這里插入圖片描述
    在這里插入圖片描述
    配置路由上的插件需要查詢 router_id,查詢方法 http://172.16.226.7:8001/routes
    在這里插入圖片描述
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19178.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19178.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19178.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【上】王樹森《小紅書推薦系統公開課》- 課程筆記(推薦系統基礎、召回、排序)

寫在前面 本文為王樹森老師《小紅書推薦系統公開課》的課程筆記 課程來源:ShusenWang的個人空間-ShusenWang個人主頁-嗶哩嗶哩視頻 (bilibili.com)課程資料:GitHub - wangshusen/RecommenderSystem 由于篇幅較長,分為【上】【下】兩篇文章…

C#中的比較和邏輯運算符

在C#編程中,比較和邏輯運算符是控制程序流程和執行條件判斷的重要工具。以下是C#中一些常用的比較和邏輯運算符及其示例。 相等運算符 運算符用于比較兩個值是否相等。如果相等,返回 true;否則返回 false。 示例 int a 5, b 5; bool is…

【busybox記錄】【shell指令】unlink

目錄 內容來源: 【GUN】【unlink】指令介紹 【busybox】【unlink】指令介紹 【linux】【unlink】指令介紹 使用示例: 刪除文件 - 默認 常用組合指令: 指令不常用/組合用法還需繼續挖掘: 內容來源: GUN &#x…

深入解析Web前端三大主流框架:Angular、React和Vue

Web前端三大主流框架分別是Angular、React和Vue。下面我將為您詳細介紹這三大框架的特點和使用指南。 Angular 核心概念: 組件(Components): 組件是Angular應用的構建塊,每個組件由一個帶有裝飾器的類、一個HTML模板、一個CSS樣式表組成。組件通過輸入(@Input)和輸出(…

【OrangePi AIpro】開箱初體驗以及OAK深度相機測試

1. 簡介 Orangepi AIPRO 是一款采用昇騰AI技術路線,集成4核64位處理器AI處理器的單板計算機,集成圖形處理器,支持8TOPS AI算力,擁有8GB/16GB LPDDR4X,可以外接eMMC模塊,支持雙4K高清輸出。 Orange Pi AIpr…

VirtualDisplay圖像數據流trace分析

1. 計算器App更新圖像幀(QueuedBuffer - ViewRootImpl[Calculator]#0BLAST#0),調用eglSwapBuffersWithDamageKHR,然后queueBuffer向surfaceflinger提交圖像buffer 2. sf調用latchBuffer獲取buffer,進行一些狀態的處理…

CBK-D2-安全與架構工程.md

CBK-D2-安全與架構工程 密碼學和對稱密鑰算法 密碼通信的基礎知識 明文P-plaintext、加密encrypt、密文C-ciphertext、解密decrypt、密鑰Key 多數情況下,密鑰無非是一個極大的二進制數 每一種算法都有一個特定密鑰控制key space,是一個特定的數值范圍 密鑰空間由位大小b…

數字圖像處理系列 | 線性濾波(高斯濾波)(3)

我們知道了什么是 線性平移不變系統是在做卷積操作 之后,我們發展出了一些非常簡單的 線性濾波, 去增強圖片,提取圖片特征 文章目錄 1. 卷積如何在離散圖片中工作的Vis 原圖和mask做卷積時發生了什么首先,如何得到 (i.j)位置的卷積…

操作系統中的內存管理

虛擬內存 操作系統會提供一種機制,將不同進程的虛擬地址和不同內存的物理地址映射起來。如果程序要訪問虛擬地址的時候,由操作系統轉換成不同的物理地址,這樣不同的進程運行的時候,寫入的是不同的物理地址,這樣就不會沖…

Python 技能提升(一)

python注釋規范 # Add commit for you codes. # The proper addition of comments is so beautiful.from abc import abstractmethoddef add(a: int, b: int) -> int:# You can write some necessary notes here.# Such as the role of functions, the types and roles of …

Slurm集群使用基礎

Introduction 我們在做生物信息分析時,對于大規模的上游數據的處理,一般需要在大型服務器或集群上進行。我最早接觸并使用的是一個基于SLURM調度系統的集群,在此記錄一下基礎使用方法。 高性能計算集群(High-Performance Comput…

React 使用JSX或者TSX渲染頁面

02 Rendering with JSX Your first JSX content In this section, we’ll implement the obligatory " Hello, World " JSX application. At this point, we’re just dipping our toes in the water; more in-depth examples will follow. We’ll also discuss wh…

vs code中編寫c++基本使用以及問題總結

vs code基本使用以及總結 launch.json作用 這個文件配置了調試器的設置,允許你定義如何啟動和調試你的程序。這包括配置執行路徑、傳遞給程序的參數、環境變量以及特定語言或框架的調試器選項。 常用配置 "version": "0.2.0": 這是配置文件…

kotlin基礎之協程

Kotlin協程(Coroutines)是Kotlin提供的一種輕量級的線程模型,它允許我們以非阻塞的方式編寫異步代碼,而無需使用回調、線程或復雜的并發API。協程是一種用戶態的輕量級線程,它可以在需要時掛起和恢復,從而有…

安卓中的圖片壓縮

安卓中如何進行圖片壓縮? 在安卓中進行圖片壓縮通常有以下幾種方法: 質量壓縮: 通過降低圖片的質量來減小文件大小。這可以通過Bitmap的compress()方法實現,其中可以設置壓縮質量(0-100)。 ByteArrayOutputStream baos…

【滲透測試】|文件上傳

1、安裝使用蟻劍 https://blog.csdn.net/weixin_42474304/article/details/116376746 1、登陸dvwa,進入初級文件上傳&#xff0c;上傳一句話木馬文件cmd.php&#xff0c; //cmd.php <?php eval($_POST[ccit]); ?> //eval: 執行命令的函數 //ccit:一句話木馬文件的參數…

滲透測試工具Cobalt strike-2.CS基礎使用

三、結合metasploit,反彈shell 在kali中開啟使用命令開啟metasploit msfconsole ┌──(root?oldboy)-[~] └─# msfconsole --- msf6 > use exploit/multi/handler [*] Using configured payload generic/shell_reverse_tcp --- msf6 exploit(multi/handler) > show …

[10] CUDA程序性能的提升 與 流

CUDA程序性能的提升 與 流 1. CUDA程序性能的提升 在本節中,我們會看到用來遵循的基本的一些性能來提升準則,我們會逐一解釋它們1.1 使用適當的塊數量和線程數量 研究表明,如果塊的數量是 GPU 的流多處理器數量的兩倍,則會給出最佳性能,不過,塊和線程的數量與具體的算法…

什么是訪問控制漏洞

什么是AC Bugs&#xff1f; 實驗室 Vertical privilege escalation 僅通過隱藏目錄/判斷參數來權限控制是不安全的&#xff08;爆破url/爬蟲/robots.txt/Fuzz/jsfinder&#xff09; Unprotected functionality 訪問robots.txt 得到隱藏目錄&#xff0c;訪問目錄 &#xff0c;…

基于Visual Studio版本的AI編程助手

Visual Studio 是一個出色的 IDE,可用于構建適用于 Windows、Mac、Linux、iOS 和 Android 的豐富、精美的跨平臺應用程序。 使用一系列技術(例如 WinForms、WPF、WinUI、MAUI 或 Xamarin)構建豐富。 1、安裝 點擊上方工具欄拓展選項,選擇管理拓展選項 接著在聯機頁面中搜索&q…