精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

APISIX認證與自定義插件

開發(fā) 后端
Apache APISIX 作為一個 API 網(wǎng)關,目前已開啟與各種插件功能的適配合作,插件庫也比較豐富。目前已經(jīng)可與大量身份認證相關的插件進行搭配處理。

身份認證在日常生活當中是非常常見的一項功能,大家平時基本都會接觸到。比如用支付寶消費時的人臉識別確認、公司上班下班時的指紋/面部打卡以及網(wǎng)站上進行賬號密碼登錄操作等,其實都是身份認證的場景體現(xiàn)。

圖片

auth

如上圖,Jack 通過賬號密碼請求服務端應用,服務端應用中需要有一個專門用做身份認證的模塊來處理這部分的邏輯。請求處理完畢子后,如果使用 JWT Token 認證方式,服務器會反饋一個 Token 去標識這個用戶為 Jack。如果登錄過程中賬號密碼輸入錯誤,就會導致身份認證失敗。

但是每個應用服務模塊去開發(fā)一個單獨的身份認證模塊,用來支持身份認證的一套流程處理,當服務量多了之后,就會發(fā)現(xiàn)這些模塊的開發(fā)工作量都是非常巨大且重復的。這個時候,我們可以通過把這部分的開發(fā)邏輯放置到 Apache APISIX 的網(wǎng)關層來實現(xiàn)統(tǒng)一,減少開發(fā)量。

圖片

apisix auth

如上圖所示,用戶或應用方直接去請求 Apache APISIX,然后 Apache APISIX 通過識別并認證通過后,會將鑒別的身份信息傳遞到上游應用服務,之后上游應用服務就可以從請求頭中讀到這部分信息,然后進行后續(xù)的邏輯處理。

Apache APISIX 作為一個 API 網(wǎng)關,目前已開啟與各種插件功能的適配合作,插件庫也比較豐富。目前已經(jīng)可與大量身份認證相關的插件進行搭配處理,如下圖所示。

圖片

API 網(wǎng)關認證插件

基礎認證插件比如 Key-Auth、Basic-Auth,他們是通過賬號密碼的方式進行認證。復雜一些的認證插件如 Hmac-Auth、JWT-Auth,如 Hmac-Auth 通過對請求信息做一些加密,生成一個簽名,當 API 調用方將這個簽名攜帶到 Apache APISIX,Apache APISIX 會以相同的算法計算簽名,只有當簽名方和應用調用方認證相同時才予以通過。其他則是一些通用認證協(xié)議和聯(lián)合第三方組件進行合作的認證協(xié)議,例如 OpenID-Connect 身份認證機制,以及 LDAP 認證等。

Apache APISIX 還可以針對每一個 Consumer (即調用方應用)去做不同級別的插件配置。如下圖所示,我們創(chuàng)建了兩個消費者 Consumer A、Consumer B,我們將 Consumer A 應用到應用 1,則后續(xù)應用 1 的訪問將會開啟 Consumer A 的這部分插件,例如 IP 黑白名單,限制并發(fā)數(shù)量等。將 Consumer B 應用到應用 2 ,由于開啟了 http-log 插件,則應用 2 的訪問日志將會通過 HTTP 的方式發(fā)送到日志系統(tǒng)進行收集。

圖片

配置靈活

總體說來 APISIX 的認證系統(tǒng)功能非常強大,我們非常有必要掌握。

basic-auth

首先我們來了解下最簡單的基本認證在 APISIX 中是如何使用的。basic-auth 是一個認證插件,它需要與 Consumer 一起配合才能工作。添加 Basic Auth 到一個 Service 或 Route,然后 Consumer 將其用戶名和密碼添加到請求頭中以驗證其請求。

首先我們需要在 APISIX Consumer 消費者中增加 basic auth 認證配置,為其指定用戶名和密碼,我們這里在 APISIX Ingress 中,可以通過 ApisixConsumer 資源對象進行配置,比如這里我們?yōu)榍懊娴?nexus 實例應用添加一個基本認證,如下所示:

# apisix-basic-auth.yaml
apiVersion: apisix.apache.org/v2
kind: ApisixConsumer
metadata:
name: nexus-bauth
spec:
authParameter:
basicAuth:
value:
username: admin
password: admin321

ApisixConsumer 資源對象中只需要配置 authParameter 認證參數(shù)即可,目前支持 basicAuth、hmacAuth、jwtAuth、 keyAuth、wolfRBAC 等多種認證類型,在 basicAuth 下面可以通過 value 可直接去配置相關的 username 和 password,也可以直接使用 Secret 資源對象進行配置,比起明文配置會更安全一些。

然后在 ApisixRoute 中添加 authentication,將其開啟并指定認證類型即可,就可以實現(xiàn)使用 Consumer 去完成相關配置認證,如下所示:

apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: nexus
namespace: default
spec:
http:
- name: root
match:
hosts:
- ops.qikqiak.com
paths:
- "/nexus*"
- "/static/*"
- "/service/*"
plugins:
- name: proxy-rewrite
enable: true
config:
regex_uri: ["^/nexus(/|$)(.*)", "/$2"]
- name: redirect
enable: true
config:
regex_uri: ["^(/nexus)$", "$1/"]
- name: redirect
enable: true
config:
http_to_https: true
backends:
- serviceName: nexus
servicePort: 8081
authentication: # 開啟 basic auth 認證
enable: true
type: basicAuth

直接更新上面的資源即可開啟 basic auth 認證了,在 Dashboard 上也可以看到創(chuàng)建了一個 Consumer:

圖片

consumer

然后我們可以進行如下的測試來進行驗證:

# 缺少 Authorization header
? curl -i http://ops.youdianzhishi.com/nexus/
HTTP/1.1 401 Unauthorized
Date: Tue, 28 Mar 2023 08:12:01 GMT
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
WWW-Authenticate: Basic realm='.'
Server: APISIX/3.2.0

{"message":"Missing authorization in request"}
# 用戶名不存在
? curl -i -ubar:bar http://ops.youdianzhishi.com/nexus/
HTTP/1.1 401 Unauthorized
Date: Tue, 28 Mar 2023 08:12:19 GMT
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: APISIX/3.2.0

{"message":"Invalid user authorization"}
# 成功請求
? curl -i -uadmin:admin321 http://ops.youdianzhishi.com/nexus/
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 9024
Connection: keep-alive
Date: Tue, 28 Mar 2023 08:12:28 GMT
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Last-Modified: Tue, 28 Mar 2023 08:12:28 GMT
Pragma: no-cache
Cache-Control: no-cache, no-store, max-age=0, must-revalidate, post-check=0, pre-check=0
Expires: 0
Server: APISIX/3.2.0

<html>
<head><title>301 Moved Permanently</title></head>
# ......
</html>

consumer-restriction

不過這里大家可能會有一個疑問,在 Route 上面我們并沒有去指定具體的一個 Consumer,然后就可以進行 Basic Auth 認證了,那如果我們有多個 Consumer 都定義了 Basic Auth 豈不是都會生效的?確實是這樣的,這就是 APISIX 的實現(xiàn)方式,所有的 Consumer 對啟用對應插件的 Route 都會生效的,如果我們只想 Consumer A 應用在 Route A、Consumer B 應用在 Route B 上面的話呢?要實現(xiàn)這個功能就需要用到另外一個插件:consumer-restriction。

consumer-restriction 插件可以根據(jù)選擇的不同對象做相應的訪問限制,該插件可配置的屬性如下表所示:

圖片

consumer restriction

其中的 type 字段是個枚舉類型,可以設置以下值:

  • consumer_name:把 Consumer 的 username 列入白名單或黑名單來限制 Consumer 對 Route 或 Service 的訪問。
  • consumer_group_id: 把 Consumer Group 的 id 列入白名單或黑名單來限制 Consumer 對 Route 或 Service 的訪問。
  • service_id:把 Service 的 id 列入白名單或黑名單來限制 Consumer 對 Service 的訪問,需要結合授權插件一起使用。
  • route_id:把 Route 的 id 列入白名單或黑名單來限制 Consumer 對 Route 的訪問。

比如現(xiàn)在我們有兩個 Consumer:jack1 和 jack2,這兩個 Consumer 都配置了 Basic Auth 認證,配置如下所示:

執(zhí)行命令 kubectl port-forward --address 0.0.0.0 svc/apisix-admin 9180:9180 -n apisix 暴露 admin 端點。

Conumer jack1 的認證配置:

? curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
{
"username": "jack1",
"plugins": {
"basic-auth": {
"username":"jack2019",
"password": "123456"
}
}
}'

Conumer jack2 的認證配置:

? curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
{
"username": "jack2",
"plugins": {
"basic-auth": {
"username":"jack2020",
"password": "123456"
}
}
}'

現(xiàn)在我們只想給一個 Route 路由對象啟用 jack1 這個 Consumer 的認證配置,則除了啟用 basic-auth 插件之外,還需要在 consumer-restriction 插件中配置一個 whitelist 白名單(當然配置黑名單也是可以的),如下所示:

? curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/index.html",
"upstream": {
"type": "roundrobin",
"nodes": {
"10.244.1.125:8081": 1
}
},
"plugins": {
"basic-auth": {},
"consumer-restriction": {
"whitelist": [
"jack1"
]
}
}
}'

然后我們使用 jack1 去訪問我們的路由進行驗證:

? curl -u jack2019:123456 http://127.0.0.1/index.html -i
HTTP/1.1 302 Found
...

正常使用 jack2 訪問就會認證失敗了:

? curl -u jack2020:123456 http://127.0.0.1/index.html -i
HTTP/1.1 403 Forbidden
Date: Tue, 28 Mar 2023 08:22:38 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: APISIX/3.2.0

{"message":"The consumer_name is forbidden."}

所以當你只想讓一個 Route 對象關聯(lián)指定的 Consumer 的時候,記得使用 consumer-restriction 插件。

jwt-auth

在平時的應用中可能使用 jwt 認證的場景是最多的,同樣在 APISIX 中也有提供 jwt-auth 的插件,它同樣需要與 Consumer 一起配合才能工作,我們只需要添加 JWT Auth 到一個 Service 或 Route,然后 Consumer 將其密鑰添加到查詢字符串參數(shù)、請求頭或 cookie 中以驗證其請求即可。

當然除了通過 ApisixConsumer 這個 CRD 去配置之外,我們也可以直接通過 Dashboard 頁面操作。在 Dashboard 消費者頁面點擊創(chuàng)建消費者:

圖片

創(chuàng)建消費者

點擊下一步進入插件配置頁面,這里我們需要啟用 jwt-auth 這個插件:

圖片

啟用jwt-auth

在插件配置頁面配置 jwt-auth 相關屬性,可參考插件文檔 https://apisix.apache.org/zh/docs/apisix/plugins/jwt-auth/:

圖片

配置jwt-auth

可配置的屬性如下表所示:

圖片

jwt 屬性

然后提交即可創(chuàng)建完成 Consumer,然后我們只需要在需要的 Service 或者 Route 上開啟 jwt-auth 即可,比如同樣還是針對上面的 nexus 應用,我們只需要在 ApisixRoute 對象中啟用一個 jwt-auth 插件即可:

apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: nexus
namespace: default
spec:
http:
- name: root
match:
hosts:
- ops.qikqiak.com
paths:
- "/nexus*"
- "/static/*"
- "/service/*"
plugins:
- name: redirect
enable: true
config:
http_to_https: true
- name: redirect
enable: true
config:
regex_uri: ["^(/nexus)$", "$1/"]
- name: proxy-rewrite
enable: true
config:
regex_uri: ["^/nexus(/|$)(.*)", "/$2"]
backends:
- serviceName: nexus
servicePort: 8081
authentication: # 開啟 jwt auth 認證
enable: true
type: jwtAuth

重新更新上面的對象后我們同樣來測試驗證下:

? curl -i http://ops.youdianzhishi.com/nexus/
HTTP/1.1 401 Unauthorized
Date: Tue, 28 Mar 2023 08:30:02 GMT
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: APISIX/3.2.0

{"message":"Missing JWT token in request"}

要正常訪問我們的服務就需要先進行登錄獲取 jwt-auth 的 token,首先,你需要為簽發(fā) token 的 API 配置一個 Route,該路由將使用 public-api 插件。

? curl http://127.0.0.1:9180/apisix/admin/routes/jas \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/apisix/plugin/jwt/sign",
"plugins": {
"public-api": {}
}
}'
{"error_msg":"unknown plugin [public-api]"}

執(zhí)行上面命令后會出現(xiàn)不識別 public-api 插件,這是因為我們這里使用 Helm Chart 方式安裝的 APISIX 默認沒有安裝該插件,所以我們需要到 Helm Chart 的 values.yaml 文件中在 plugins 屬性下面添加上該插件,然后重新更新 APISIX 即可:

? helm upgrade --install apisix ./apisix -f ./apisix-values.yaml -n apisix --create-namespace

更新后重新執(zhí)行命令:

? curl http://127.0.0.1:9180/apisix/admin/routes/jas -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/apisix/plugin/jwt/sign",
"plugins": {
"public-api": {}
}
}'

之后就可以通過調用它來獲取 token 了。

? curl http://127.0.0.1/apisix/plugin/jwt/sign?key=user-key -i
HTTP/1.1 200 OK
Date: Tue, 28 Mar 2023 08:44:45 GMT
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: APISIX/3.2.0

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODAwNzk0ODUsImtleSI6InVzZXIta2V5In0.n4o_w3AgNC6C1pujEUScSBe0Mzw5vbjIzKpQpbrBhO8

要注意上面我們在獲取 token 的時候需要傳遞創(chuàng)建消費者的標識 key,因為可能有多個不同的 Consumer 消費者,然后我們將上面獲得的 token 放入到 Header 頭中進行訪問:

? curl -i http://ops.youdianzhishi.com/nexus/ -H 'Authorization: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODAwNzk0ODUsImtleSI6InVzZXIta2V5In0.n4o_w3AgNC6C1pujEUScSBe0Mzw5vbjIzKpQpbrBhO8'
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 9024
Connection: keep-alive
Date: Tue, 28 Mar 2023 08:45:24 GMT
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Last-Modified: Tue, 28 Mar 2023 08:45:24 GMT
Pragma: no-cache
Cache-Control: no-cache, no-store, max-age=0, must-revalidate, post-check=0, pre-check=0
Expires: 0
Server: APISIX/3.2.0


<!DOCTYPE html>
<html lang="en">
......

可以看到可以正常訪問。同樣也可以放到請求參數(shù)中驗證:

? curl -i http://ops.youdianzhishi.com/nexus/?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODAwNzk0ODUsImtleSI6InVzZXIta2V5In0.n4o_w3AgNC6C1pujEUScSBe0Mzw5vbjIzKpQpbrBhO8
HTTP/1.1 200 OK
......

此外還可以放到 cookie 中進行驗證:

? curl -i http://ops.youdianzhishi.com/nexus/ --cookie jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODAwNzk0ODUsImtleSI6InVzZXIta2V5In0.n4o_w3AgNC6C1pujEUScSBe0Mzw5vbjIzKpQpbrBhO8
HTTP/1.1 200 OK
......

自定義插件

除了 APISIX 官方內置的插件之外,我們也可以根據(jù)自己的需求去自定義插件,要自定義插件需要使用到 APISIX 提供的 Runner,目前已經(jīng)支持 Java、Go、Node 和 Python 語言的 Runner,這個 Runner 相當于是 APISIX 和自定義插件之間的橋梁,比如 apache-apisix-python-runner 這個項目通過 Python Runner 可以把 Python 直接應用到 APISIX 的插件開發(fā)中,整體架構如下所示:

圖片

Apache APISIX work flow

左邊是 APISIX 的工作流程,右邊的 Plugin Runner 是各語言的插件運行器,當在 APISIX 中配置一個 Plugin Runner 時,APISIX 會啟動一個子進程運行 Plugin Runner,該子進程與 APISIX 進程屬于同一個用戶,當我們重啟或重新加載 APISIX 時,Plugin Runner 也將被重啟。

如果你為一個給定的路由配置了 ext-plugin-* 插件,請求命中該路由時將觸發(fā) APISIX 通過 Unix Socket 向 Plugin Runner 發(fā)起 RPC 調用。調用分為兩個階段:

  • ext-plugin-pre-req:在執(zhí)行 APISIX 內置插件之前。
  • ext-plugin-post-req:在執(zhí)行 APISIX 內置插件之后。
  • ext-plugin-post-resp:將在請求獲取到上游的響應之后執(zhí)行。

接下來我們就以 Python 為例來說明如何自定義插件,首先獲取 apache-apisix-python-runner 項目:

? git clone https://github.com/apache/apisix-python-plugin-runner.git
? cd apisix-python-plugin-runner
? git checkout 0.2.0 # 切換到0.2.0版本

如果是開發(fā)模式,則我們可以直接使用下面的命令啟動 Python Runner:

? APISIX_LISTEN_ADDRESS=unix:/tmp/runner.sock python3 bin/py-runner start

啟動后需要在 APISIX 配置文件中新增外部插件配置,如下所示:

? vim /path/to/apisix/conf/config.yaml
apisix:
admin_key:
- name: "admin"
key: edd1c9f034335f136f87ad84b625c8f1
role: admin

ext-plugin:
path_for_test: /tmp/runner.sock

通過 ext-plugin.path_for_test 指定 Python Runner 的 unix socket 文件路徑即可,如果是生產環(huán)境則可以通過 ext-plugin.cmd 來指定 Runner 的啟動命令即可:

ext-plugin:
cmd: [ "python3", "/path/to/apisix-python-plugin-runner/apisix/bin/py-runner", "start" ]

我們這里的 APISIX 是運行 Kubernetes 集群中的,所以要在 APISIX 的 Pod 中去執(zhí)行 Python Runner 的代碼,我們自然需要將我們的 Python 代碼放到 APISIX 的容器中去,然后安裝自定義插件的相關依賴,直接在 APISIX 配置文件中添加上面的配置即可,所以我們這里基于 APISIX 的鏡像來重新定制包含插件的鏡像,在 apisix-python-plugin-runner 項目根目錄下新增如下所示的 Dockerfile 文件:

FROM apache/apisix:3.2.0-debian

WORKDIR /apisix-python
ADD . /apisix-python
USER root

RUN apt-get update && \
apt-get install -y python3 python3-pip make && \
rm -rf /var/lib/apt/lists/* && apt-get clean && \
make setup && make install

基于上面 Dockerfile 構建一個新的鏡像,推送到 Docker Hub:

? docker build -t cnych/apisix:py3-plugin-3.2.0-debian .
# 推送到DockerHub
? docker push cnych/apisix:py3-plugin-3.2.0-debian

接下來我們需要使用上面構建的鏡像來安裝 APISIX,我們這里使用的是 Helm Chart 進行安裝的,所以需要通過 Values 文件進行覆蓋,如下所示:

# ci/prod.yaml
apisix:
enabled: true

image:
repository: cnych/apisix
tag: py3-plugin-3.2.0-debian
......

extPlugin:
# -- Enable External Plugins. See [external plugin](https://apisix.apache.org/docs/apisix/next/external-plugin/)
enabled: true
# -- the command and its arguements to run as a subprocess
cmd: ["python3", "/apisix-python/bin/py-runner", "start"]

注意這里需要將自定義插件開啟,并且將 extPlugin.cmd 配置為 ["/apisix-python/bin/py-runner", "start"],因為我們是在 APISIX 的鏡像中安裝了 Python Runner,所以需要指定 Python Runner 的啟動命令。

接著就可以重新部署 APISIX 了:

? helm upgrade --install apisix ./apisix -f ./apisix-values.yaml -n apisix --create-namespace

部署完成后在 APISIX 的 Pod 中可以看到會啟動一個 Python Runner 的子進程:

圖片

apisix top

在插件目錄 ??/apisix-python/apisix/plugins?? 中的 ??.py?? 文件都會被自動加載,上面示例中有兩個插件 ??stop.py?? 和 ??rewrite.py??,我們以 ??stop.py?? 為例進行說明,該插件代碼如下所示:

from typing import Any
from apisix.runner.http.request import Request
from apisix.runner.http.response import Response
from apisix.runner.plugin.core import PluginBase
class Stop(PluginBase):
def name(self) -> str:
"""在runner中注冊的插件的名稱"""
return "stop"

def config(self, conf: Any) -> Any:
"""解析插件配置"""
return conf

def filter(self, conf: Any, request: Request, response: Response):
"""插件執(zhí)行的主函數(shù)
:param conf:
解析后的插件配置
:param request:
請求參數(shù)和信息
:param response:
響應參數(shù)和信息
:return:
"""

# 打印插件配置
print(conf)

# 獲取請求 nginx 變量 `host`
host = request.get_var("host")
print(host)

# 獲取請求體
body = request.get_body()
print(body)

# 設置響應頭
response.set_header("X-Resp-A6-Runner", "Python")

# 設置響應體
response.set_body("Hello, Python Runner of APISIX")

# 設置響應狀態(tài)碼
response.set_status_code(201)

實現(xiàn)插件首先必須要繼承 PluginBase 類,必須實現(xiàn) filter 函數(shù),插件執(zhí)行核心業(yè)務邏輯就是在 filter 函數(shù)中,該函數(shù)只包含 Request 和 Response 類對象作為參數(shù),Request 對象參數(shù)可以獲取請求信息,Response 對象參數(shù)可以設置響應信息,conf 可以獲取插件配置信息。

然后我們在前面的 Nexus 應用中新增一個路由來測試我們上面的 stop 插件,在 ApisixRoute 對象中新增一個路由規(guī)則,如下所示:

apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: nexus
namespace: default
spec:
http:
- name: ext
match:
hosts:
- ops.youdianzhishi.com
paths:
- "/extPlugin"
plugins:
- name: ext-plugin-pre-req # 啟用ext-plugin-pre-req插件
enable: true
config:
conf:
- name: "stop" # 使用 stop 這個自定義插件
value: '{"body":"hello"}'
backends:
- serviceName: nexus
servicePort: 8081

直接創(chuàng)建上面的路由即可,核心配置是啟用 ext-plugin-pre-req 插件(前提是在配置文件中已經(jīng)啟用該插件,在 Helm Chart 的 Values 中添加上),然后在 config 下面使用 conf 屬性進行配置,conf 為數(shù)組格式可以同時設置多個插件,插件配置對象中 name 為插件名稱,該名稱需要與插件代碼文件和對象名稱一致,value 為插件配置,可以為 JSON 字符串。

創(chuàng)建后同樣在 Dashboard 中也可以看到 APISIX 中的路由配置格式:

圖片

apisix ext plugin

接著我們可以來訪問 http://ops.youdianzhishi.com/extPlugin 這個路徑來驗證我們的自定義插件:

? curl -i http://ops.youdianzhishi.com/extPlugin
HTTP/1.1 201 Created
Date: Tue, 28 Mar 2023 13:10:34 GMT
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
x-resp-a6-runner: Python
Server: APISIX/3.2.0

Hello, Python Runner of APISIX

可以看到得到的結果和響應碼和我們在插件中的定義是符合的。到這里就完成了使用 Python 進行 APISIX 自定義插件,我們有任何的業(yè)務邏輯需要處理直接去定義一個對應的插件即可。

責任編輯:姜華 來源: k8s技術圈
相關推薦

2022-01-14 09:17:13

PythonAPISIX插件

2021-12-28 15:38:46

Traefik中間件插件

2024-01-18 08:24:08

2021-12-31 08:43:45

插件KubeScheduler

2012-11-19 11:07:42

IBMdw

2022-01-19 22:14:36

Apache APIAPI 網(wǎng)關插件

2015-02-12 15:33:43

微信SDK

2011-08-25 11:44:21

LUA腳本魔獸世界

2015-02-12 15:38:26

微信SDK

2021-12-08 07:55:53

K8S WebhookKubernetes

2021-08-16 14:45:38

鴻蒙HarmonyOS應用

2016-12-26 15:25:59

Android自定義View

2016-11-16 21:55:55

源碼分析自定義view androi

2011-06-23 10:49:13

Qt 自定義信號

2023-06-15 08:01:01

Vite插件機制

2015-01-14 15:06:48

定義相機

2011-12-16 14:23:51

Java

2009-06-08 20:13:36

Eclipse自定義控

2013-04-01 14:35:10

Android開發(fā)Android自定義x

2021-11-23 15:06:42

Kubernetes 運維開源
點贊
收藏

51CTO技術棧公眾號

老牛影视av牛牛影视av| 国产免费美女视频| 激情开心成人网| 日本一区二区三区在线观看| 亚洲va国产va天堂va久久| 国产一级在线观看视频| 国产一区二区三区站长工具| 91精品国产综合久久香蕉的特点| 免费不卡av在线| 97电影在线| www..com久久爱| 国产精品美女av| 久久黄色免费网站| 欧美三级情趣内衣| 精品国产91久久久久久久妲己| 国产精品天天av精麻传媒| 日韩激情av| 国产精品久久久久影院色老大| 国产成人精品免费视频大全最热 | 日韩欧美国产一区二区| 一本一道久久a久久精品综合| 欧美一区二区在线观看视频| 久久爱www久久做| 97成人超碰免| 毛片aaaaa| 91亚洲国产| 亚洲丝袜一区在线| 你懂得在线视频| 日韩一区二区三区色| 欧美在线你懂的| 青青视频在线播放| av电影免费在线看| 亚洲乱码国产乱码精品精98午夜| 亚洲成人在线视频网站| 国产永久av在线| 91在线视频播放| 国产精品久久久对白| 国产内射老熟女aaaa∵| 蜜桃精品视频在线观看| 国产精品va在线播放| 97超碰人人干| 亚洲福利久久| 久久久免费精品| 精品无码人妻一区二区三区品| 国产精品久久久久无码av| 最近2019中文免费高清视频观看www99| 国产一级免费片| 综合中文字幕| 精品久久久久久久一区二区蜜臀| 爱情岛论坛亚洲自拍| 亚洲一区导航| 91精品欧美综合在线观看最新| 国产精品久久久毛片| 国产成人精品一区二区三区免费| 在线观看三级视频欧美| 亚洲三级视频网站| 农村妇女一区二区| 欧美乱熟臀69xxxxxx| 天天干天天玩天天操| 99热播精品免费| 欧美日韩一级二级三级| 永久免费的av网站| 亚洲91在线| 日韩一区二区麻豆国产| 天堂va欧美va亚洲va老司机| 日韩免费成人| 亚洲激情视频在线播放| 亚洲熟妇一区二区三区| 精品国产精品| 久久手机免费视频| 国产在线综合网| 亚洲激情社区| 欧日韩不卡在线视频| 波多野结衣影片| 激情av综合网| 高清国产在线一区| 视频国产在线观看| 国产精品久久久爽爽爽麻豆色哟哟 | 精品久久久久中文慕人妻| 福利一区二区在线| 欧美精品欧美精品系列c| 成人在线二区| 一区二区三区欧美久久| 好吊妞无缓冲视频观看| 朝桐光一区二区| 欧美一区二视频| 一出一进一爽一粗一大视频| 日本大胆欧美| 欧美激情女人20p| 日韩免费av网站| 国产在线视频不卡二| 九九九九精品九九九九| 91在线播放网站| 亚洲成av人**亚洲成av**| 日日摸天天爽天天爽视频| 国产精品视频一区视频二区 | 懂色av一区二区三区| 看欧美ab黄色大片视频免费| 亚洲1区在线观看| 国产亚洲精品激情久久| 精品无码久久久久久久久| 视频在线观看一区二区三区| 久久久久久久久久美女| 国内一区在线| 午夜在线小视频| 亚洲大型综合色站| 久久久久国产一区| 欧美美女在线直播| 久久黄色av网站| 色一情一乱一伦| 国产成人aaa| 亚洲v国产v在线观看| 国产第一页在线视频| 欧美性xxxxxx少妇| 国产精品边吃奶边做爽| 牛牛国产精品| 国产精品嫩草影院一区二区| 午夜性色福利影院| 亚洲柠檬福利资源导航| 久久久久久久片| 精品综合久久88少妇激情| 久久久精品视频在线观看| 男人天堂视频网| 粉嫩久久99精品久久久久久夜| 亚洲精品第一区二区三区| 在线女人免费视频| 精品欧美久久久| 国产1区2区3区4区| 久草在线在线精品观看| 日韩精品一区二区三区外面| 2020av在线| 亚洲成人性视频| 91aaa在线观看| 寂寞少妇一区二区三区| 中文字幕一区二区中文字幕| 全球最大av网站久久| 亚洲图片欧美日产| 国产成人精品777777| 2020国产成人综合网| 波多野结衣综合网| 成人性生交大片免费看中文视频| 美女福利精品视频| 国产日韩精品suv| 亚洲欧美在线视频观看| 亚洲综合激情视频| 欧美国产偷国产精品三区| 国产精品视频在线播放| 爱久久·www| 欧美日韩精品免费观看视频| 蜜桃av免费观看| 精品影院一区二区久久久| 中文字幕av日韩精品| 精品亚洲a∨| 久久精品99久久久久久久久| 国产视频www| 亚洲精品国产精华液| 成人一区二区三区仙踪林| 欧美精选一区| 狠狠久久综合婷婷不卡| 伊人久久综合一区二区| 亚洲性夜色噜噜噜7777| japanese国产在线观看| 综合欧美一区二区三区| 国产伦理在线观看| 国产亚洲网站| 亚洲 国产 欧美一区| 亚洲免费一区| 欧美激情乱人伦一区| 午夜影院免费视频| 欧美色窝79yyyycom| 国产精品精品软件男同| 国产成人av一区二区三区在线| 91精品国产91久久久久麻豆 主演| 欧美电影免费网站| 国产精品一区二区久久| 黄色动漫在线观看| 欧美精品一区二区三区蜜臀| 国产一级一级国产| 亚洲欧美另类综合偷拍| 日韩av无码一区二区三区不卡| 久久精品一区| 永久久久久久| 久久男人av| 国产精品第100页| 日本不卡影院| 国产一区二区三区日韩欧美| 精品欧美一区二区精品少妇| 精品欧美激情精品一区| 一级免费黄色录像| 成人ar影院免费观看视频| 日韩福利视频在线| 韩国av一区| 亚欧精品在线| 精品国产影院| 成人激情视频在线| 色是在线视频| 久久夜色精品国产| 性xxxx视频| 91精品国产综合久久久久久漫画| 国产成人亚洲精品自产在线| 国产精品久久久久精k8 | 91成人在线观看喷潮教学| 波多野结衣在线观看一区二区三区 | 欧美精品一二| 国产成人亚洲欧美| 成人黄色毛片| 欧日韩不卡在线视频| 金瓶狂野欧美性猛交xxxx| 中文国产成人精品久久一| 后进极品白嫩翘臀在线视频| 欧美欧美午夜aⅴ在线观看| av大片在线免费观看| 亚洲精品高清视频在线观看| 欧美波霸videosex极品| av在线这里只有精品| 日韩精品aaa| 久久激情五月激情| 日韩中文字幕组| 亚洲韩日在线| 免费看日本黄色| 亚洲欧洲日韩| 一区高清视频| 久久人人99| 日韩欧美一区二区三区久久婷婷| 国产人妖ts一区二区| 亚洲自拍偷拍区| 小说区图片区亚洲| 国产精品美女无圣光视频| 中国字幕a在线看韩国电影| 久久久久久久久亚洲| 手机av在线播放| 久久99久国产精品黄毛片入口| 日本美女高清在线观看免费| 在线播放日韩av| 国产高清在线看| 亚洲免费视频一区二区| 亚州男人的天堂| 日韩成人久久久| 水中色av综合| 精品一区二区三区电影| 男同在线观看| 日韩av影视在线| 午夜在线视频免费| 亚洲免费小视频| 国产中文字幕在线观看| 一区二区三区视频在线| 1024国产在线| 久久中文字幕国产| 日韩专区av| 午夜精品久久久久久久久久久久久 | 欧美伊久线香蕉线新在线| 国产传媒在线观看| 69**夜色精品国产69乱| 涩涩av在线| 国产成人福利网站| 黄色成人小视频| 91亚洲国产成人精品性色| 精品国产乱码久久久久久樱花| 亚洲精品日韩激情在线电影| eeuss鲁片一区二区三区 | 精品久久久久久久久久久aⅴ| 日本一区免费| 欧美电影《轻佻寡妇》| 女人床在线观看| 亚洲人成人一区二区三区| 91视频最新入口| 日本亚洲三级在线| 中文字幕55页| 99久久婷婷国产综合精品电影| 亚洲专区区免费| 国产精品丝袜一区| 国产精品老熟女一区二区| 亚洲高清免费在线| 一级片在线观看免费| 91麻豆精品久久久久蜜臀 | 亚洲视频在线免费观看| 网友自拍视频在线| 欧美成人久久久| 性感女国产在线| 国产精品专区一| 一区二区三区免费在线看| 欧美日韩国产不卡在线看| 99久久www免费| 水蜜桃色314在线观看| 日韩中文字幕一区二区三区| 91丝袜超薄交口足| 99久久精品国产一区二区三区| av黄色在线免费观看| 亚洲免费av网站| 久久久久久久久久成人| 日韩限制级电影在线观看| 人妻91麻豆一区二区三区| 伊人久久五月天| 丁香花电影在线观看完整版| 日韩免费在线免费观看| 亚洲精品一二三**| 日本公妇乱淫免费视频一区三区| 国产精品vip| 日韩av手机版| 91丨porny丨户外露出| 国内毛片毛片毛片毛片毛片| 黑人精品xxx一区一二区| 国产视频第一页| 在线观看日韩专区| 国产白浆在线免费观看| 亚洲va男人天堂| 日韩成人激情| 日韩中文字幕组| 91色视频在线| 久久久久久久久久久久久久免费看 | 高清毛片在线看| 午夜精品一区二区三区在线播放 | 紧身裙女教师波多野结衣| 欧美性猛交xxxx富婆| 亚洲卡一卡二卡三| 久久精品人人爽| 日本精品网站| 日本精品二区| 亚洲欧美成人综合| 日本美女视频网站| 亚洲免费在线观看| 亚洲一区二区人妻| 尤物九九久久国产精品的分类| 亚洲国产福利| 好吊色欧美一区二区三区| 欧美午夜一区二区福利视频| 在线播放av中文字幕| 国产欧美一区二区精品久导航 | heyzo高清在线| 99久久国产免费免费| 一精品久久久| 日韩av自拍偷拍| 日韩一区在线免费观看| 中文字幕av网站| 中文欧美日本在线资源| 成人四虎影院| 一区二区三区欧美成人| 麻豆成人av在线| 农村老熟妇乱子伦视频| 欧美色综合影院| 日本a在线播放| 成人午夜一级二级三级| 国产精品毛片久久| 91欧美一区二区三区| 亚洲毛片av在线| 亚洲男人第一天堂| 97在线精品国自产拍中文| 美女一区2区| 茄子视频成人免费观看| 久久久99免费| 日韩欧美国产另类| 日韩在线中文视频| 日韩一级淫片| 成年女人18级毛片毛片免费| 99久久国产综合精品女不卡| 日韩和一区二区| 亚洲日本中文字幕| 免费成人高清在线视频| 在线免费观看成人| 国产在线乱码一区二区三区| 久久久久久久久久久网 | 香港伦理在线| 91gao视频| 999在线观看精品免费不卡网站| 真人bbbbbbbbb毛片| 欧洲一区二区三区免费视频| 在线免费看a| 高清国产在线一区| 另类av一区二区| 亚洲精品国产精品国自| 91精品欧美福利在线观看| 国产后进白嫩翘臀在线观看视频| 欧美xxxx黑人又粗又长密月| 日本欧美加勒比视频| 东方av正在进入| 日韩av在线播放资源| 成人在线视频免费| 91黄色在线看| 日本一区二区免费在线| 性一交一乱一精一晶| 国产91久久婷婷一区二区| 91成人影院| 波多野结衣办公室33分钟| 欧美挠脚心视频网站| 阿v视频在线观看| 亚洲春色在线视频| 高潮精品一区videoshd| 中文av免费观看| 国模gogo一区二区大胆私拍 | 国产福利视频在线播放| 中文字幕一区二区三区四区| 三级在线观看网站| 国产主播欧美精品| 翔田千里一区二区| 国产盗摄一区二区三区在线| 精品在线小视频| 亚洲精品影片| 最新天堂中文在线| 狠狠躁夜夜躁人人躁婷婷91| 99在线视频观看|