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

使用 Python 自定義 APISIX 插件

開發 后端
除了 APISIX 官方內置的插件之外,我們也可以根據自己的需求去自定義插件,要自定義插件需要使用到 APISIX 提供的 Runner,目前已經支持 Java、Go 和 Python 語言的 Runner。

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

 

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

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

  • ext-plugin-pre-req:在執行 APISIX 內置插件之前
  • ext-plugin-post-req:在執行 APISIX 內置插件之后

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

  1. ➜ git clone https://github.com/apache/apisix-python-plugin-runner.git 
  2. ➜ cd apisix-python-plugin-runner 
  3. ➜ git checkout 0.1.0  # 切換刀0.1.0版本 

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

  1. ➜ APISIX_LISTEN_ADDRESS=unix:/tmp/runner.sock python3 apisix/main.py start 

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

  1. ➜ vim /path/to/apisix/conf/config.yaml 
  2. apisix: 
  3.   admin_key: 
  4.     - name"admin" 
  5.       key: edd1c9f034335f136f87ad84b625c8f1 
  6.       role: admin 
  7.  
  8. ext-plugin: 
  9.   path_for_test: /tmp/runner.sock 

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

  1. ext-plugin: 
  2.   cmd: [ "python3""/path/to/apisix-python-plugin-runner/apisix/main.py""start" ] 

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

  1. FROM apache/apisix:2.10.0-alpine 
  2.  
  3. ADD . /apisix-python-plugin-runner 
  4.  
  5. RUN apk add --update python3 py3-pip && \ 
  6.     cd /apisix-python-plugin-runner && \ 
  7.     python3 -m pip install --upgrade pip && \ 
  8.     python3 -m pip install -r requirements.txt --ignore-installed && \ 
  9.     python3 setup.py install --force 

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

  1. ➜ docker build -t cnych/apisix:py3-plugin-2.10.0-alpine . 
  2. # 推送到DockerHub 
  3. ➜ docker push cnych/apisix:py3-plugin-2.10.0-alpine 

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

  1. # ci/prod.yaml 
  2. apisix: 
  3.   enabled: true 
  4.  
  5.   image: 
  6.     repository: cnych/apisix 
  7.     tag: py3-plugin-2.10.0-alpine 
  8. ...... 

由于官方的 Helm Chart 沒有提供對 ext-plugin 配置的支持,所以需要我們手動修改模板文件 templates/configmap.yaml,在 apisix 屬性同級目錄下面新增 ext-plugin 相關配置,如下所示:

  1. {{- if .Values.extPlugins.enabled }} 
  2. ext-plugin: 
  3.   {{- if .Values.extPlugins.pathForTest }} 
  4.   path_for_test: {{ .Values.extPlugins.pathForTest }} 
  5.   {{- end }} 
  6.   {{- if .Values.extPlugins.cmds }} 
  7.   cmd: 
  8.   {{- range $cmd := .Values.extPlugins.cmds }} 
  9.   - {{ $cmd }} 
  10.   {{- end }} 
  11.   {{- end }} 
  12. {{- end }} 
  13.  
  14. nginx_config: 
  15.   user: root  # fix 執行 python runner沒權限的問題 

然后在定制的 Values 文件中添加如下所示的配置:

  1. # ci/prod.yaml 
  2. extPlugins: 
  3.   enabled: true 
  4.   cmds: ["python3""/apisix-python-plugin-runner/apisix/main.py""start"

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

  1. ➜ helm upgrade --install apisix ./apisix -f ./apisix/ci/prod.yaml -n apisix 

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

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

  1. from apisix.runner.plugin.base import Base 
  2. from apisix.runner.http.request import Request 
  3. from apisix.runner.http.response import Response 
  4.  
  5.  
  6. class Stop(Base): 
  7.     def __init__(self): 
  8.         super(Stop, self).__init__(self.__class__.__name__) 
  9.  
  10.     def filter(self, request: Request, response: Response): 
  11.         # 可以通過 `self.config` 獲取配置信息,如果插件配置為JSON將自動轉換為字典結構 
  12.         # print(self.config) 
  13.  
  14.         # 設置響應 Header 頭 
  15.         response.headers["X-Resp-A6-Runner"] = "Python" 
  16.         # 設置響應body 
  17.         response.body = "Hello, Python Runner of APISIX" 
  18.         # 設置響應狀態碼 
  19.         response.status_code = 201 
  20.  
  21.         # 通過調用 `self.stop()` 中斷請求流程,此時將立即響應請求給客戶端 
  22.         # 如果未顯示調用 `self.stop()` 或 顯示調用 `self.rewrite()`將繼續將請求 
  23.         # 默認為 `self.rewrite()` 
  24.         self.stop() 

實現插件首先必須要繼承 Base 類,必須實現 filter 函數,插件執行核心業務邏輯就是在 filter 函數中,該函數只包含 Request 和 Response 類對象作為參數,Request 對象參數可以獲取請求信息,Response 對象參數可以設置響應信息 ,self.config 可以獲取插件配置信息,在 filter 函數中調用 self.stop() 時將馬上中斷請求,響應數據,調用 self.rewrite() 時,將會繼續請求。

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

  1. apiVersion: apisix.apache.org/v2beta2 
  2. kind: ApisixRoute 
  3. metadata: 
  4.   name: nexus 
  5.   namespace: default 
  6. spec: 
  7.   http: 
  8.     - name: ext 
  9.       match: 
  10.         hosts: 
  11.           - ops.qikqiak.com 
  12.         paths: 
  13.           - "/extPlugin" 
  14.       plugins: 
  15.       - name: ext-plugin-pre-req  # 啟用ext-plugin-pre-req插件 
  16.         enable: true 
  17.         config: 
  18.           conf: 
  19.           - name"stop"  # 使用 stop 這個自定義插件 
  20.             value: "{\"body\":\"hello\"}" 
  21.       backends: 
  22.       - serviceName: nexus 
  23.         servicePort: 8081 

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

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

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

  1. ➜ curl -i http://ops.qikqiak.com/extPlugin 
  2. HTTP/1.1 201 Created 
  3. Date: Thu, 13 Jan 2022 07:04:50 GMT 
  4. Content-Type: text/plain; charset=utf-8 
  5. Transfer-Encoding: chunked 
  6. Connection: keep-alive 
  7. accept: */* 
  8. user-agent: curl/7.64.1 
  9. host: ops.qikqiak.com 
  10. X-Resp-A6-Runner: Python 
  11. Server: APISIX/2.10.0 
  12.  
  13. Hello, Python Runner of APISIX 

訪問請求結果中有一個 X-Resp-A6-Runner: Python 頭信息,返回的 body 數據為 Hello, Python Runner of APISIX,和我們在插件中的定義是符合的。到這里就完成了使用 Python 進行 APISIX 自定義插件,我們有任何的業務邏輯需要處理直接去定義一個對應的插件即可。

 

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

2023-03-31 07:17:16

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

2019-12-25 11:47:27

LinuxFVWM

2009-06-23 11:35:44

JSF的Naviati

2010-10-25 16:05:07

oracle自定義函數

2024-03-04 11:13:29

Django數據庫Python

2011-08-25 11:44:21

LUA腳本魔獸世界

2015-02-12 15:33:43

微信SDK

2021-05-28 08:58:41

Golang網卡metrics

2022-09-13 15:44:52

VSLook插件

2021-10-28 08:39:22

Node Export自定義 監控

2015-02-12 15:38:26

微信SDK

2016-12-26 15:25:59

Android自定義View

2009-02-10 12:55:39

自定義控件AJAX.NET

2021-12-24 15:46:23

鴻蒙HarmonyOS應用

2015-06-10 10:54:24

自定義路PHP

2016-11-16 21:55:55

源碼分析自定義view androi
點贊
收藏

51CTO技術棧公眾號

国产综合色区在线观看| 亚洲av无码乱码国产精品| 免费毛片在线不卡| 精品国产91久久久久久| 亚洲一区精品电影| 妺妺窝人体色www婷婷| 澳门精品久久国产| 色av成人天堂桃色av| 天天综合色天天综合色hd| 亚洲视频在线观看免费视频| 欧美精品啪啪| 亚洲大胆人体av| 免费看黄色一级大片| 欧美尤物美女在线| 国产成人av电影在线播放| 4p变态网欧美系列| 放荡的美妇在线播放| 少妇精品久久久| 精品捆绑美女sm三区| 色悠悠久久综合网| 色偷偷色偷偷色偷偷在线视频| 中文字幕在线不卡视频| 精品日本一区二区| 精品人妻av一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 久久久免费精品| jizz日本在线播放| 你懂的视频欧美| 精品久久久久久久久久久久久久久| 韩国中文字幕av| 亚洲性色av| 午夜久久久久久久久久一区二区| 在线播放 亚洲| 国产在线资源| 91一区一区三区| 国产日产精品一区二区三区四区| 国产毛片在线视频| 蜜臀久久久久久久| 国产精品视频久久久久| 国产欧美一区二区三区在线看蜜臂| 欧美午夜不卡| 久久亚洲精品一区二区| 女性裸体视频网站| 精品一区二区三| 亚洲图片在线综合| 人人妻人人藻人人爽欧美一区| 国产伦精品一区二区三区免费优势| 91精品国产福利在线观看| 手机版av在线| 台湾天天综合人成在线| 欧美日韩一级黄| 欧美日韩在线观看不卡| 日本欧美日韩| 在线观看av不卡| 爱情岛论坛vip永久入口| 婷婷六月国产精品久久不卡| 色先锋aa成人| 另类小说第一页| 精品久久久网| 91精品国产综合久久蜜臀 | 日本中文在线观看| 国产精品久久久久久久浪潮网站| 日韩国产欧美精品| 第一福利在线| 国产精品卡一卡二| 亚洲国产精品影视| 少女频道在线观看高清| 午夜精品免费在线观看| 免费看一级大黄情大片| 日韩不卡免费高清视频| 欧美在线观看视频一区二区| 9l视频白拍9色9l视频| 在线视频成人| 欧美精品一区二| 泷泽萝拉在线播放| 日韩免费高清| 美日韩精品免费观看视频| 国产中文字幕免费| 午夜在线a亚洲v天堂网2018| 国产精品久久久久久久久久免费| 99久久精品日本一区二区免费| 国产a精品视频| 久久久人人爽| 日本精品在线| 亚洲无线码一区二区三区| 日本毛片在线免费观看| 在线看片国产福利你懂的| 日本高清视频一区二区| 无套内谢丰满少妇中文字幕| 欧美成人一区在线观看| 中文字幕视频在线免费欧美日韩综合在线看 | 亚洲视频三区| 亚洲欧美日韩视频一区| 永久免费看mv网站入口| 亚洲综合电影一区二区三区| 国产人妖伪娘一区91| 欧美熟女一区二区| 中文字幕一区二区视频| 精品少妇一区二区三区在线| 国产国产一区| 亚洲国产精品人人爽夜夜爽 | 一区二区三区精品在线观看| 免费在线激情视频| 九九九九九九精品任你躁| 国产午夜精品理论片a级探花| 亚洲一级二级片| 狂野欧美一区| 国产91视觉| 蜜桃av在线免费观看| 大伊人狠狠躁夜夜躁av一区| 国产精品久久久久久久av福利| 色天下一区二区三区| 欧美成人午夜激情在线| 波多野结衣高清在线| av不卡免费电影| 日韩精品一区二区三区电影| 韩国成人在线| 日韩风俗一区 二区| 91香蕉视频在线播放| 三级成人在线视频| 久久久一本精品99久久精品| 中文字幕伦理免费在线视频 | 免费a级毛片在线观看| 亚洲综合清纯丝袜自拍| 天天干天天色天天干| 精品视频日韩| 国产成人亚洲综合青青| 天天干视频在线观看| 亚洲精品福利视频网站| 九九热视频免费| 日韩欧美中字| 国产精品欧美久久久| 久草在现在线| 欧美天堂在线观看| 精品国产一区在线| 亚洲人妖在线| 国产日韩精品久久| rebdb初裸写真在线观看| 精品国产乱码久久久久久闺蜜| av最新在线观看| 激情图区综合网| 一区二区国产日产| 视频欧美精品| 日韩视频免费大全中文字幕| 91麻豆视频在线观看| 国产精品家庭影院| 91视频这里只有精品| 午夜激情久久| 91午夜在线播放| h片在线播放| 日韩女优av电影| 久久精品国产亚洲AV无码麻豆| 国产成都精品91一区二区三| 91免费国产精品| 国产精品15p| 午夜美女久久久久爽久久| 日本黄色免费视频| 婷婷国产v国产偷v亚洲高清| 国产麻豆天美果冻无码视频| 香蕉久久国产| 色综合影院在线观看| 日本黄色成人| 欧美黄色性视频| 香蕉视频黄色片| 色香色香欲天天天影视综合网| 四虎成人免费影院| 国产综合久久久久影院| 国产女教师bbwbbwbbw| 久久男人av| 国产精品444| 成人免费网站在线观看视频| 精品久久久久久久人人人人传媒| www.中文字幕在线观看| 中文文精品字幕一区二区| 污污视频在线免费| 国产欧美日韩一级| 亚洲自拍三区| 99国产精品免费网站| 全亚洲最色的网站在线观看| 日本免费中文字幕在线| 精品国产欧美一区二区| 天天天天天天天干| 一区二区三区免费网站| 久久中文字幕人妻| 九九热在线视频观看这里只有精品| 日本精品福利视频| 久久97视频| 99久久99久久精品国产片| 无遮挡在线观看| 精品国偷自产在线| 亚洲aaa在线观看| 欧美精品1区2区3区| 日韩欧美中文字幕一区二区| 国产精品三级在线观看| 色综合久久五月| 久草在线在线精品观看| 五十路熟女丰满大屁股| 欧美电影免费播放| 精品欧美国产| 欧美视频二区欧美影视| 国产精品久久久精品| 国产盗摄一区二区| 日韩视频亚洲视频| 免费一级毛片在线观看| 日韩欧美一级在线播放| 中文字幕人妻色偷偷久久| 五月婷婷综合激情| 强乱中文字幕av一区乱码| 国产欧美精品区一区二区三区| 亚洲香蕉中文网| 国产综合色视频| 国产三级国产精品国产专区50| 亚洲视频大全| 人妻互换免费中文字幕| 亚欧美无遮挡hd高清在线视频| 欧美在线视频一区二区三区| 老牛精品亚洲成av人片| 亚洲一区二区免费| 日韩精品第二页| 国产福利精品av综合导导航| 久久男人av资源站| 色综合色综合久久综合频道88| 午夜在线视频播放| 一道本无吗dⅴd在线播放一区| 你懂的在线播放| 亚洲精品av在线| 欧美天堂在线视频| 日韩欧美一级在线播放| 国产精选久久久| 欧美男人的天堂一二区| 最新国产中文字幕| 欧美色精品天天在线观看视频| 无码人妻丰满熟妇区bbbbxxxx| 欧美日韩在线免费观看| 日韩精品手机在线| 精品动漫一区二区三区| 国产网址在线观看| 亚洲高清免费观看| 日韩精品视频免费看| 亚洲国产精品精华液网站| 国产亚洲成人av| 亚洲成av人片www| 日韩成人在线免费视频| 激情懂色av一区av二区av| 日本在线观看视频网站| 精品久久久久久久久久| 青草视频在线观看免费| 日韩欧美在线网址| 中文字幕高清在线免费播放| 欧美性感美女h网站在线观看免费 欧美性xxxx在线播放 | 欧美高清性xxxx| 国产毛片一区二区| 日本黄色三级网站| 粉嫩一区二区三区性色av| 无码人妻久久一区二区三区蜜桃| 国产精品亚洲人在线观看| 性xxxxxxxxx| www.在线成人| 亚洲国产无码精品| 中文字幕成人av| 亚洲波多野结衣| 亚洲一本大道在线| 91在线看视频| 在线国产电影不卡| 91中文字幕在线播放| 日韩精品一区二区三区老鸭窝| 好吊视频一二三区| 亚洲精品色婷婷福利天堂| 国产毛片在线| 久久好看免费视频| 免费看电影在线| 欧美最猛性xxxxx亚洲精品| 99re66热这里只有精品4| 国产狼人综合免费视频| 日韩激情综合| 免费看成人午夜电影| 日韩欧美综合| 国产精品视频一二三四区| 国产亚洲欧洲| 在线免费看污网站| 成人小视频在线观看| 美女爆乳18禁www久久久久久| 国产精品夫妻自拍| 五月天婷婷丁香| 欧美色男人天堂| 成人午夜精品福利免费| 国产一区二区黄| 女同视频在线观看| 国产精品久久久久秋霞鲁丝| 国内精品视频| 欧美一区二区福利| 亚洲影视一区| 精品视频无码一区二区三区| 国产一区二区导航在线播放| 在线免费观看日韩av| 亚洲精品五月天| 337p粉嫩色噜噜噜大肥臀| 日韩一区二区电影| 国产黄色在线播放| 91国产高清在线| 国产精品xnxxcom| 欧洲一区二区在线观看| 亚洲网站在线| 国产三级精品三级在线| 久久久久久久综合狠狠综合| 欧美日韩国产精品综合| 在线精品亚洲一区二区不卡| 天堂av在线免费| 欧美精品一区在线播放| 日韩制服一区| 欧美不卡在线一区二区三区| 欧美日韩国产亚洲一区| 国产视频1区2区3区| 2023国产精品自拍| 国产一级av毛片| 欧美一区二区在线免费观看| 波多野结衣在线网站| 欧美最顶级的aⅴ艳星| 福利在线一区| 轻点好疼好大好爽视频| 国产在线精品一区二区| 欧美一区二区三区粗大| 一本一本大道香蕉久在线精品| 欧美特黄一级视频| 久久久久久久久久久av| 视频精品一区| 狠狠精品干练久久久无码中文字幕 | 男女污视频在线观看| 蜜桃一区二区三区在线观看| 日本道在线观看一区二区| va视频在线观看| www.xxxx欧美| 久久免费影院| 日韩一本精品| 奇米影视一区二区三区小说| 91视频在线网站| 欧美视频专区一二在线观看| 黄色一级大片在线免费看国产一| 欧美理论电影在线播放| 99国内精品久久久久| 亚洲一区二区三区免费看| 日本在线不卡视频一二三区| a天堂中文字幕| 欧美在线看片a免费观看| 国产高清av在线| 国产精品极品美女在线观看免费| 国产在视频线精品视频www666| 国产福利一区视频| 中文字幕av一区二区三区| 中文字幕精品无码亚| 最近的2019中文字幕免费一页| 国产情侣一区二区三区| 在线观看成人一级片| 国产一区二区伦理片| 久久久久久久久久久久久久久久久| 日韩精品一区二区在线| 91在线三级| 美女一区视频| 日本不卡免费在线视频| 精品国产视频在线观看| 日韩欧美成人一区| 在线观看爽视频| 亚洲国产欧洲综合997久久| 国产一区二区三区高清播放| 麻豆国产尤物av尤物在线观看| 亚洲第一av网| av亚洲一区二区三区| 超碰免费在线公开| 成人动漫在线一区| 国产午夜麻豆影院在线观看| 色偷偷噜噜噜亚洲男人| 日本精品一区二区三区在线观看视频| 日韩一级性生活片| 久久精品视频在线免费观看| 国产毛片久久久久| 97碰碰碰免费色视频| 欧美在线色图| 国产伦理在线观看| 欧美视频不卡中文| 免费网站成人| 久久久福利视频| 蜜臀久久99精品久久久久久9| 国产va在线播放| 亚洲欧美综合v| 国产一区二区三区视频在线| 欧美成人xxxxx| 亚洲你懂的在线视频| 日韩一区av| 成人在线激情视频| 性高湖久久久久久久久| 伊人久久久久久久久久久久久久| 亚洲国产精品免费| 亚洲国产一区二区久久| 精品视频免费在线播放| 国产精品国产自产拍高清av王其| 亚洲欧美强伦一区二区| 国产久一一精品| 久久一区中文字幕| 九九精品在线观看视频| 尤物九九久久国产精品的特点 |