<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      apisix~lua插件開發與插件注冊

      開發插件的步驟

      在APISIX中,要自定義插件,一般需要按照以下步驟進行操作:

      1. 編寫Lua腳本:首先,你需要編寫Lua腳本來實現你想要的功能。可以根據APISIX提供的插件開發文檔和示例進行編寫。

      2. 將Lua腳本放置到APISIX插件目錄:將編寫好的Lua腳本文件放置到APISIX的插件目錄下,一般是/usr/local/apisix/lua-plugins/目錄。

      3. 編輯配置文件:修改APISIX的配置文件,啟用自定義插件。在conf/config.yaml文件中添加對應的插件配置,指定使用你編寫的Lua腳本。

      4. 重啟APISIX服務:完成以上步驟后,記得重啟APISIX服務使配置生效,可以使用命令apisix restart來重啟APISIX。

      5. 測試插件:在完成上述步驟后,你就可以通過發送請求測試你自定義的插件是否按照預期工作了。

      總的來說,自定義插件的過程主要包括編寫Lua腳本、放置到插件目錄、編輯配置文件、重啟APISIX服務以及測試插件。詳細的開發步驟和示例可以參考APISIX官方文檔。

      多個plugins的配置,value.yaml中的配置

      apisix:
        customPlugins:
          enabled: true
          luaPath: "/opt/?.lua"
          plugins:
            - name: "user-xx-auth"
              configMap:
                name: "apisix-plugins-config"
                mounts:
                  - name: "user-xx-auth.lua"
                    path: "/opt/apisix/plugins/" # 如果只有path參數,這塊到目錄級就可以了,配置中的文件自動復制到這個目錄下面
            - name: "file-upload-proxy"
              configMap:
                name: "apisix-plugins-config"
                mounts:
                  - name: "file-upload-proxy.lua"
                    path: "/opt/apisix/plugins/"
      

      部署到k8s

      如果你使用Helm將APISIX部署到Kubernetes中,并且想要添加自定義插件,可以按照以下步驟進行操作:

      1. 編寫Lua腳本:首先,按照之前提到的步驟編寫Lua腳本,實現你需要的功能。

      2. 創建ConfigMap:將編寫好的Lua腳本內容放入一個ConfigMap中,可以使用如下命令創建一個ConfigMap:

        kubectl create configmap my-custom-plugin --from-file=my_plugin.lua
        
      3. 修改Helm Chart模板:編輯APISIX的Helm Chart模板,找到對應的配置文件(一般是values.yaml或者configmap.yaml),在其中添加對應的ConfigMap配置,指定使用你的Lua腳本。

      4. 升級APISIX部署:通過Helm命令升級APISIX的部署,使新的ConfigMap生效:

       helm -n apisix upgrade apisix -f ./apisix/values.override.yaml ./apisix
      
      
      1. 驗證插件:升級完成后,可以發送請求測試你自定義的插件是否按照預期工作了。

      通過以上步驟,你就可以在使用Helm部署的APISIX中添加自定義插件。記得根據實際情況修改對應的文件路徑和配置項,確保插件能夠成功加載并發揮作用。

      對dash board可見自定義插件

      1 配置中添加插件

      只有添加到配置文件中的插件才可以被apisix使用。在apisix 的conf 目錄的config.yaml 中有個plugins字段,將示例插件的插件名"insert-header"添加到該字段下。

      2 裝載插件

      需要對apisix 進行reload。直接運行 apisix reload 就可以裝載插件

      3 dashboard中添加插件

      雖然apisix 提供了管理接口可以通過接口的方式給路由添加插件,但使用dashboard 操作會方便很多。

      1、重新生成schema.json.

      curl 127.0.0.1:9092/v1/schema > /usr/local/apisix/dashboard/conf/schema.json

      2、重啟dashboard

      kill -9
      (ps -ef|grep "/usr/local/apisix/dashboard"|gawk '

      OpenResty

      OpenResty階段

      在OpenResty中,階段(phase)指的是請求處理過程中的不同階段或環節。OpenResty基于Nginx并使用Lua語言進行擴展,通過定義不同的階段可以在請求處理過程中插入自定義的Lua代碼來實現各種功能。

      在OpenResty中,請求經過一系列預定義的處理階段,每個階段都有對應的處理函數,開發者可以在這些階段中編寫Lua代碼來實現各種功能,例如請求重寫、訪問控制、日志記錄等。這些階段可以被稱為請求生命周期中的鉤子點,允許開發者在特定的時機執行自定義邏輯。

      常見的OpenResty階段包括:

      • init_by_lua:在Nginx啟動時執行,用于初始化Lua代碼。
      • init_worker_by_lua:在Worker進程啟動時執行,用于初始化Lua代碼。
      • ssl_certificate_by_lua:用于SSL證書處理。
      • rewrite_by_lua:用于請求重寫。
      • access_by_lua:用于訪問控制。
      • content_by_lua:用于生成響應內容。
      • header_filter_by_lua:用于處理響應頭。
      • body_filter_by_lua:用于處理響應體。

      通過在不同階段插入Lua代碼,開發者可以實現高度定制化的請求處理邏輯,從而滿足各種需求,如API網關、反向代理、緩存控制等。因此,OpenResty的階段機制提供了靈活且強大的擴展能力,使得開發者能夠更好地控制請求處理流程。

      相關處理器方法

      在APISIX中,這些_M開頭的方法是OpenResty的階段處理器,用于對請求或響應進行處理。下面是它們各自的作用:

      • _M.check_schema**:用于定義插件配置的校驗規則,可以確保插件配置符合預期的格式和類型。通過定義校驗規則,可以在配置插件時進行參數檢查,避免配置錯誤導致的問題。
      • _M.header_filter:用于處理響應頭,在API響應返回給客戶端之前執行。
      • _M.new:用于創建新的請求或響應對象,可以在此階段對請求或響應進行初始化操作。
      • _M.incoming:用于處理請求體,在請求被路由到后端服務之前執行。
      • _M.access:用于訪問控制,可以在此階段進行權限驗證、IP過濾等操作。
      • _M.rewrite:用于重寫請求,可以在此階段修改請求的URI、參數等信息。
      • _M.api()**:用于注冊插件的API接口,使得插件可以通過API方式被外部調用。通過定義API接口,可以讓插件暴露特定的功能給用戶使用,實現更加靈活的插件擴展和定制
        除了上述提到的預置方法外,APISIX還提供了其他一些預置的方法,例如:
      • _M.balancer:用于負載均衡,可以在此階段選擇合適的后端節點進行請求轉發。
      • _M.init_worker:用于初始化Worker進程,在啟動時執行一次,通常用于加載配置、初始化數據等操作。
      • _M.log:用于日志記錄,可以在此階段記錄請求、響應信息到日志系統。

      總結來說,APISIX通過這些預置的方法(階段處理器)提供了豐富的擴展點,開發者可以根據需求在不同階段對請求和響應進行定制化處理,實現靈活的API網關功能。

      一個完整的插件demo

      • 向響應頭輸出X-Custom-Header頭
      -- 定義一個 Lua 函數,用于處理請求
      local core      = require("apisix.core")
      local ngx = ngx
      local ngx_encode_base64 = ngx.encode_base64
      local ngx_decode_base64 = ngx.decode_base64
      local ngx_time = ngx.time
      
      local schema={} -- 注意,需要先定義它,再使用它
      
      local _M={
          version=0.1,
          priority=1011,
          name = "lind-test",
          schema=schema
      }
      
      function _M.access(api_ctx)
          core.log.warn("hit access phase")
      end
      
      
      function _M.header_filter(ctx)
          core.log.warn("hit header_filter phase") -- 在apisix控制臺打印日志
          core.response.add_header("X-Custom-Header", "apisix-3.9.1")
      end
      
      
      function _M.body_filter(ctx)
          core.log.warn("hit body_filter phase")
      end
      
      
      function _M.log(ctx)
          core.log.warn("hit log phase")
      end
      
      -- 注冊插件
      return _M
      
      

      注冊插件

      values.yaml

      • 找到plugins節點,將現有的config-default.xml中的默認插件添加,避免自定義插件覆蓋默認插件的情況
      • 默認插件列表獲取方式:http://127.0.0.1:9180/apisix/admin/plugins/list 9180是apisix-admin的容器端口
      plugins: ["real-ip","ai","client-control","proxy-control","request-id","zipkin","ext-plugin-pre-req","fault-injection","mocking","serverless-pre-function","cors","ip-restriction","ua-restriction","referer-restriction","csrf","uri-blocker","request-validation","chaitin-waf","multi-auth","openid-connect","cas-auth","authz-casbin","authz-casdoor","wolf-rbac","ldap-auth","hmac-auth","basic-auth","jwt-auth","jwe-decrypt","key-auth","consumer-restriction","forward-auth","opa","authz-keycloak","proxy-cache","body-transformer","proxy-mirror","proxy-rewrite","workflow","api-breaker","limit-conn","limit-count","limit-req","gzip","server-info","traffic-split","redirect","response-rewrite","degraphql","kafka-proxy","grpc-transcode","grpc-web","public-api","prometheus","datadog","loki-logger","elasticsearch-logger","echo","loggly","http-logger","splunk-hec-logging","skywalking-logger","google-cloud-logging","sls-logger","tcp-logger","kafka-logger","rocketmq-logger","syslog","udp-logger","file-logger","clickhouse-logger","tencent-cloud-cls","inspect","example-plugin","aws-lambda","azure-functions","openwhisk","openfunction","serverless-post-function","ext-plugin-post-req","ext-plugin-post-resp"]
      

      values.override.yaml

      • 添加自定義插件
      • 通過ConfigMap的方式將插件內容放到配置文件中
      apisix:
        admin:
          type: NodePort
          nodePort: 30087
      
        customPlugins:
          enabled: true
          luaPath: "/opt/?.lua"
          plugins:
            - name: "lind-test"
              configMap:
                name: "my-plugins-config"
                mounts:
                  - key: "lind-test.lua"
                    path: "/opt/apisix/plugins/lind-test.lua" #相當于把my-plugins-config下的lind-test.lua這個key,映射到容器下面/opts/custom_plugins目錄,apisix/plugins是相對目錄(是固定的),文件名還是lind-test.lua
      
      

      向route添加自定義插件

      • 目前在dashborad中無法看到自定義插件
      • 在/apisix/admin/plugins/list中可以看到插件
      curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
      {
          "methods": ["GET"],
          "uri": "/test",
          "id": 1,
          "plugins": {
              "lind-test": {
              }
          },
          "upstream": {
              "type": "roundrobin",
              "nodes": {
                  "127.0.0.1:1980": 1
              }
          }
      }'
      

      訪問頁面

      • http://apisix-gateway/test
      • 將test前綴的請求,轉發到upstream,真實地址是127.0.0.1的1980端口指向的服務
      • 在瀏覽器的響應頭中,看到由lind-test插件添加的標識X-Custom-Header
      posted @ 2024-05-14 09:09  張占嶺  閱讀(2102)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 男女吃奶做爰猛烈紧视频| 国产特级毛片AAAAAA视频| 欧美激情精品久久久久久| 91色老久久精品偷偷性色| 色一伊人区二区亚洲最大| 国产女高清在线看免费观看 | 亚洲免费观看视频| 男女一级国产片免费视频| 亚洲国产精品日韩专区av| 人人爽人人爽人人片a免费| 精品免费看国产一区二区| 日韩不卡在线观看视频不卡| 丰满的少妇被猛烈进入白浆| 国产99青青成人A在线| 人人爽亚洲aⅴ人人爽av人人片| 成人午夜福利免费专区无码| 欧美深度肠交惨叫| 国产精品成人午夜久久| 真人性囗交视频| 亚洲女初尝黑人巨| 免费观看日本污污ww网站69| 精品一区二区三区少妇蜜臀| 中文字幕在线视频不卡| 国产不卡av一区二区| 18禁黄无遮挡网站免费| 人妻激情乱人伦视频| 在线精品国产中文字幕| 亚洲美女被黑人巨大在线播放| 亚洲欧美日韩愉拍自拍美利坚| 国产男女爽爽爽免费视频| 亚洲码亚洲码天堂码三区| 日韩亚洲精品中文字幕| 在线人人车操人人看视频| 亚洲老熟女一区二区三区| 久久精品不卡一区二区| 成人网站免费观看| 国产精品国产三级国产an| 亚洲日本欧美日韩中文字幕| 上司人妻互换中文字幕| 日韩精品二区三区四区| 日韩高清亚洲日韩精品一区二区|