99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

api網(wǎng)關 kong 教程入門

科技綠洲 ? 來源:Linux開發(fā)架構之路 ? 作者:Linux開發(fā)架構之路 ? 2023-11-10 11:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

為什么使用API-Gateway

  1. 方便客戶端維護– 每個請求方不用管理多個api url,統(tǒng)一訪問api-gateway即可
  2. 接口重構時調用方不須了解接口本身等拆分和聚合
  3. 客戶端無須關心接口協(xié)議
  4. 統(tǒng)一權限控制、接口請求訪問日志統(tǒng)計
  5. 安全,是保護內部服務而設計的一道屏障
  6. 開源-最大好處

當然也有一個很大的缺點,api-gw很可能成為性能瓶頸,因為所有的請求都經(jīng)過這里,可以通過橫向擴展和限流解決這個問題。

在眾多API GATEWAY框架中,Mashape開源的高性能高可用API網(wǎng)關和API服務管理層——KONG(基于NGINX)特點尤為突出,它可以通過插件擴展已有功能,這些插件(使用lua編寫)在API請求響應循環(huán)的生命周期中被執(zhí)行。于此同時,KONG本身提供包括HTTP基本認證、密鑰認證、CORS、TCP、UDP、文件日志、API請求限流、請求轉發(fā)及NGINX監(jiān)控等基本功能。目前,Kong在Mashape管理了超過15,000個API,為200,000開發(fā)者提供了每月數(shù)十億的請求支持。

Kong是一款基于Nginx_Lua模塊寫的高可用,由于Kong是基于Nginx的,所以可以水平擴展多個Kong服務器,通過前置的負載均衡配置把請求均勻地分發(fā)到各個Server,來應對大批量的網(wǎng)絡請求。

圖片

kong架構

圖片

Kong主要有三個組件:

Kong Server :基于nginx的服務器,用來接收API請求。 Apache Cassandra/PostgreSQL :用來存儲操作數(shù)據(jù)。 Kong dashboard:官方推薦UI管理工具,當然,也可以使用 restfull 方式 管理admin api。

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

Kong網(wǎng)關的特性

Kong網(wǎng)關具有以下的特性:

可擴展性: 通過簡單地添加更多的服務器,可以輕松地進行橫向擴展,這意味著您的平臺可以在一個較低負載的情況下處理任何請求; 模塊化: 可以通過添加新的插件進行擴展,這些插件可以通過RESTful Admin API輕松配置; 在任何基礎架構上運行: Kong網(wǎng)關可以在任何地方都能運行。您可以在云或內部網(wǎng)絡環(huán)境中部署Kong,包括單個或多個數(shù)據(jù)中心設置,以及public,private 或invite-only APIs。

圖片

Kong核心基于OpenResty構建,實現(xiàn)了請求/響應的Lua處理化; Kong插件攔截請求/響應,如果接觸過Java Servlet,等價于攔截器,實現(xiàn)請求/響應的AOP處理; Kong Restful 管理API提供了API/API消費者/插件的管理; 數(shù)據(jù)中心用于存儲Kong集群節(jié)點信息、API、消費者、插件等信息,目前提供了PostgreSQL和Cassandra支持,如果需要高可用建議使用Cassandra; Kong集群中的節(jié)點通過gossip協(xié)議自動發(fā)現(xiàn)其他節(jié)點,當通過一個Kong節(jié)點的管理API進行一些變更時也會通知其他節(jié)點。每個Kong節(jié)點的配置信息是會緩存的,如插件,那么當在某一個Kong節(jié)點修改了插件配置時,需要通知其他節(jié)點配置的變更。

Kong網(wǎng)關插件

身份認證插件:Kong提供了Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication認證實現(xiàn)。 安全控制插件:ACL(訪問控制)、CORS(跨域資源共享)、動態(tài)SSL、IP限制、爬蟲檢測實現(xiàn)。 流量控制插件:請求限流(基于請求計數(shù)限流)、上游響應限流(根據(jù)upstream響應計數(shù)限流)、請求大小限制。限流支持本地、Redis和集群限流模式。 分析監(jiān)控插件:Galileo(記錄請求和響應數(shù)據(jù),實現(xiàn)API分析)、Datadog(記錄API Metric如請求次數(shù)、請求大小、響應狀態(tài)和延遲,可視化API Metric)、Runscope(記錄請求和響應數(shù)據(jù),實現(xiàn)API性能測試和監(jiān)控)。 協(xié)議轉換插件:請求轉換(在轉發(fā)到upstream之前修改請求)、響應轉換(在upstream響應返回給客戶端之前修改響應)。 日志應用插件:TCP、UDP、HTTP、File、Syslog、StatsD、Loggly等。

Kong網(wǎng)關請求流程

為了更好地理解系統(tǒng),這是使用Kong網(wǎng)關的API接口的典型請求工作流程:

圖片

請求流程

當Kong運行時,每個對API的請求將先被Kong命中,然后這個請求將會被代理轉發(fā)到最終的API接口。在請求(Requests)和響應(Responses)之間,Kong將會執(zhí)行已經(jīng)事先安裝和配置好的任何插件,授權您的API訪問操作。Kong是每個API請求的入口點(Endpoint)。

helm 安裝

先創(chuàng)建pv

kind: PersistentVolume
apiVersion: v1
metadata:
name: kong-postgre
labels:
release: stable
spec:
capacity:
storage: 8Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
hostPath:
path: /data/pv/kong/postgre

使用helm安裝kong

helm install stable/kong

再創(chuàng)建kong-dashboard

apiVersion: apps/v1
kind: Deployment
metadata:
name: kong-dashboard-deployment
spec:
selector:
matchLabels:
app: kong-dashboard-pod
version: v1.0.0
replicas: 1
template:
metadata:
labels:
app: kong-dashboard-pod
version: v1.0.0
spec:
volumes:
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai

containers:
- name: kong-dashboard-container
image: pgbi/kong-dashboard
ports:
- containerPort: 8080
args:
- 'start'
- '--kong-url'
- 'http://my-kong-kong-admin:8444'
- '--insecure'
# - '--basic-auth'
# - 'intellif=introcks'
# command: ['sleep','30000']
volumeMounts:
- name: tz-config
mountPath: /etc/localtime
---
apiVersion: v1
kind: Service
metadata:
name: kong-dashboard-service
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
protocol: TCP
nodePort: 31500
name: http-kong-dashboard
selector:
app: kong-dashboard-pod
version: v1.0.0

默認情況下,KONG監(jiān)聽的端口為:

· 8000:此端口是KONG用來監(jiān)聽來自客戶端傳入的HTTP請求,并將此請求轉發(fā)到上有服務器;

· 8443:有的地方使用8443代替8000, 此端口是KONG用來監(jiān)聽來自客戶端傳入的HTTP請求的。它跟8000端口的功能類似,但是它只是用來監(jiān)聽HTTP請求的,沒有轉發(fā)功能??梢酝ㄟ^修改配置文件來禁止它;

· 8001:Admin API,通過此端口,管理者可以對KONG的監(jiān)聽服務進行配置;

· 8444:有的地方使用8444代替8001,通過此端口,管理者可以對HTTP請求進行監(jiān)控.

如果不想使用postgre數(shù)據(jù)庫,可以自己進入容器配置,或者將配置文件通過configmap掛載進去

# 示例配置位置
/config/local_example.js

# 拷貝一份
cd ./config/
cp local_example.js ./local.js

# 配置默認數(shù)據(jù)庫
vi ./local.js
models: {
connection: process.env.DB_ADAPTER || 'localDiskDb',
},
# 改成
models: {
connection: process.env.DB_ADAPTER || 'mysql', // 這里可以用‘mysql’,‘mongo’,‘sqlserver’,‘postgres’
},
# 保存

# 修改數(shù)據(jù)庫默認配置
vi connections.js
mysql: {
adapter: 'sails-mysql',
host: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 3306,
user: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD || null,
database: process.env.DB_DATABASE || 'konga_database'
},
# 改成
mysql: {
adapter: 'sails-mysql',
host: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 3306,
user: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD || 'root',
database: process.env.DB_DATABASE || 'konga_database'
},
# 保存

# 創(chuàng)建數(shù)據(jù)庫
mysql -uroot -proot // 這里不建議用明文密碼
CREATE DATABASE konga_database CHARACTER SET utf8 COLLATE utf8_general_ci;

向kong中配置一個服務

在這一節(jié),你會添加一個API到Kong.為了達到這個目的,首先你需要添加一個服務(Service),這是Kong用來指定它管理的上游Api和微服務的名稱。

為了達成目標,我們將會創(chuàng)建一個Service指向Mockbin API,MockBin是一個”回顯”類型的公共網(wǎng)站,它返回請求者的請求,作為響應。這非常有助于我們學習Kong如何代理你的API請求。

在你開始請求Service之前,你需要先添加一個Route。Route定義了請求在到達Kong以后如何發(fā)送到他們的Service.一個Service可以有多個Route.

在配置完Service和Route以后,你就可以通過Kong使用他們發(fā)送請求啦。

Kong暴露了一個RESTful管理Api在8001端口上,Kong的配置,包括添加Service和Route,都是通過這個Api發(fā)送請求.

  1. 使用管理Api添加你的Service

執(zhí)行以下cURL請求,添加你的第一個Service(指向Mockbin API):

$ curl -i -X POST
--url http://localhost:8001/services/
--data 'name=example-service'
--data 'url=http://mockbin.org'

為服務添加一個路由

$ curl -i -X POST
--url http://localhost:8001/services/example-service/routes
--data 'hosts[]=example.com'

通過Kong轉發(fā)你的請求

執(zhí)行下面的cURL請求,驗證Kong是否正確轉發(fā)到你的Service. 注意,默認情況下,Kong在8000端口處理代理請求.

$ curl -i -X GET
--url http://localhost:8000/
--header 'Host: example.com'

成功響應意味著現(xiàn)在Kong已經(jīng)將http://localhost:8000轉發(fā)到我們在第一步中配的url上,并且將響應轉發(fā)給我們。Kong之所以知道這么干,是通過在cURL請求里定義的Header:

Host:

啟動插件

下面的步驟中,你會配置key-auth插件,為你的Service添加認證功能。在添加這個插件之前,你的Service所有的請求都會代理到上游。一旦你添加配置了這個插件,只有帶正確的API key的請求會被代理,其他的請求會被Kong拒絕,從而保護你的上游服務免于未授權調用。

  1. 配置key-auth插件

為你在Kong中配置的服務配置key-auth插件,執(zhí)行以下cURL請求 執(zhí)行以下cURL請求,添加你的第一個Service(指向Mockbin API):

$ curl -i -X POST
--url http://localhost:8001/services/example-service/plugins/
--data 'name=key-auth'

注意:這個插件同時接受config.key_names參數(shù),默認值是[‘a(chǎn)piKey’]這是一個header參數(shù)名數(shù)組,用于在請求時發(fā)送apiKey,任意一個都支持.

  1. 驗證插件是否正確配置 執(zhí)行以下的cURL請求,驗證key-auth插件是否在Service上正確配置:

你會收到一個類似下面的響應:

$ curl -i -X GET
--url http://localhost:8000/
--header 'Host: example.com'

由于你沒有在header或參數(shù)里添加指定需要的apiKey,響應應該是401 Unauthorized

HTTP/1.1 401 Unauthorized
...

{
"message": "No API key found in request"
}

添加信任用戶Consumer

通過RESTful API創(chuàng)建一個Consumer

執(zhí)行下面的命令,創(chuàng)建一個叫Jason的用戶

$ curl -i -X POST
--url http://localhost:8001/consumers/
--data "username=Jason"

響應大致如下:

HTTP/1.1 201 Created
Content-Type: application/json
Connection: keep-alive

{
"username": "Jason",
"created_at": 1428555626000,
"id": "bbdf1c48-19dc-4ab7-cae0-ff4f59d87dc9"
}

恭喜,你剛添加了第一個Consumer

提示 Kong同時接受custom_id參數(shù),關聯(lián)到庫中已存在的Consumer

為Consumer發(fā)放憑證

給剛創(chuàng)建的用戶Jason創(chuàng)建 一個key

$ curl -i -X POST
--url http://localhost:8001/consumers/Jason/key-auth/
--data 'key=ENTER_KEY_HERE'

驗證你的Consumer憑證有效

現(xiàn)在,我們可以執(zhí)行下面的命令,驗證剛剛給Jason發(fā)放的憑證是否有效.

$ curl -i -X GET
--url http://localhost:8000
--header "Host: example.com"
--header "apikey: ENTER_KEY_HERE"
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    13

    文章

    9797

    瀏覽量

    88037
  • API
    API
    +關注

    關注

    2

    文章

    1624

    瀏覽量

    64075
  • 教程
    +關注

    關注

    25

    文章

    265

    瀏覽量

    54506
  • 日志
    +關注

    關注

    0

    文章

    144

    瀏覽量

    10871
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    API信息全掌控,方便你的日志管理——阿里云推出API網(wǎng)關打通日志服務

    摘要: 近日,阿里云API網(wǎng)關對接了日志服務,可以輸出用戶在API網(wǎng)關產(chǎn)生的API調用日志,目前支持將
    發(fā)表于 02-06 15:24

    10分鐘上線 - API網(wǎng)關 + 函數(shù)計算實現(xiàn)圖片處理服務

    系統(tǒng)。接下來我們利用 API網(wǎng)關 + FC,來快速實現(xiàn)一個圖片轉換服務。點此查看原文:http://click.aliyun.com/m/43686/阿里云函數(shù)計算服務(FunctionCompute
    發(fā)表于 03-13 16:00

    什么是API網(wǎng)關為什么需要API網(wǎng)關

    API網(wǎng)關可以看做系統(tǒng)與外界聯(lián)通的入口,我們可以在網(wǎng)關進行處理一些非業(yè)務邏輯的邏輯,比如權限驗證,監(jiān)控,緩存,請求路由等等。
    發(fā)表于 12-23 09:57 ?1.3w次閱讀
    什么是<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關</b>為什么需要<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關</b>

    基于API 網(wǎng)關的微服務治理方案

    API網(wǎng)關層實現(xiàn)這些安全機制,不但提高安全性,也簡化了應用服務的開發(fā)。使開發(fā)人員專注于業(yè)務應用、業(yè)務服務的研發(fā),不再考慮基礎能力基礎組件,提升開發(fā)部署的效率,從而提升收益率。
    的頭像 發(fā)表于 02-01 01:05 ?5674次閱讀
    基于<b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關</b>的微服務治理方案

    local-data-api-gateway本地數(shù)據(jù)API網(wǎng)關

    ./oschina_soft/gitee-local-data-api-gateway.zip
    發(fā)表于 06-14 10:27 ?2次下載
    local-data-<b class='flag-5'>api</b>-gateway本地數(shù)據(jù)<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關</b>

    什么是API網(wǎng)關

    API應用編程接口(Application Programming Interface)是一組用于構建和集成應用軟件的定義和協(xié)議。
    的頭像 發(fā)表于 07-03 09:37 ?3057次閱讀

    Service Mesh和API網(wǎng)關正在逐步融合

    1 原本清晰的界限:定位和職責 2 哲學問題:網(wǎng)關訪問內部服務,算東西向還是南北向? 3 Sidecar:真正的重合點 4 BFF:把融合進行到底 5 總結 關于 Service Mesh
    的頭像 發(fā)表于 10-10 16:39 ?1476次閱讀

    庖丁解牛:Apache APISIX 3.0與Kong 3.0功能背后的趨勢

    微服務架構的興起,使得 API 的數(shù)量呈現(xiàn)爆炸式的增長。為了能高效地管理這些規(guī)模龐大的 APIAPI 網(wǎng)關開始在技術領域大展拳手。
    的頭像 發(fā)表于 11-24 11:56 ?2397次閱讀

    關于API網(wǎng)關策略的知識分享

    近些年隨著云原生和微服務架構的日趨發(fā)展,API 網(wǎng)關以流量入口的角色在技術架構中扮演著越來越重要的作用。API 網(wǎng)關主要負責接收所有請求的流量并進行處理轉發(fā)至上游服務,
    的頭像 發(fā)表于 02-11 10:45 ?1503次閱讀

    API 網(wǎng)關詳細介紹(上)

    業(yè)界有很多流行的 API 網(wǎng)關,開源的有 Nginx、Netflix Zuul、Kong 等。當然 Kong 還有商業(yè)版,類似的商業(yè)版網(wǎng)關
    的頭像 發(fā)表于 05-04 17:28 ?1883次閱讀
    <b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關</b>詳細介紹(上)

    API 網(wǎng)關詳細介紹(下)

    業(yè)界有很多流行的 API 網(wǎng)關,開源的有 Nginx、Netflix Zuul、Kong 等。當然 Kong 還有商業(yè)版,類似的商業(yè)版網(wǎng)關
    的頭像 發(fā)表于 05-04 17:28 ?1195次閱讀
    <b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關</b>詳細介紹(下)

    云原生 API 網(wǎng)關 APISIX入門

    APISIX 基于 Nginx 和 etcd,與傳統(tǒng) API 網(wǎng)關相比,APISIX 具有動態(tài)路由和熱加載插件功能,避免了配置之后的 reload 操作,同時 APISIX 支持 HTTP(S
    的頭像 發(fā)表于 05-04 17:35 ?2268次閱讀
    云原生 <b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關</b> APISIX<b class='flag-5'>入門</b>

    為什么需要 API 網(wǎng)關

    API 網(wǎng)關API 全生命周期管理的關鍵基礎組件,負責生產(chǎn)環(huán)境中 API 的配置、發(fā)布、版本回滾、安全、負載均衡等。API
    的頭像 發(fā)表于 05-04 17:47 ?1083次閱讀
    為什么需要 <b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關</b>?

    企業(yè)怎么選擇API網(wǎng)關

    ? 一、API網(wǎng)關的用處 API網(wǎng)關我的分析中會用到以下三種場景。 1、Open API 企業(yè)需要將自身數(shù)據(jù)、能力等作為開發(fā)平臺向外開放,通
    的頭像 發(fā)表于 05-23 11:05 ?912次閱讀
    企業(yè)怎么選擇<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關</b>

    Project Kong:滿足特殊需求的特殊漫游者

    電子發(fā)燒友網(wǎng)站提供《Project Kong:滿足特殊需求的特殊漫游者.zip》資料免費下載
    發(fā)表于 07-12 11:34 ?0次下載
    Project <b class='flag-5'>Kong</b>:滿足特殊需求的特殊漫游者