偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

自定義 Traefik(本地)插件

網(wǎng)絡(luò) 通信技術(shù)
Traefik Pilot 是一個(gè) SaaS 平臺(tái),和 Traefik 進(jìn)行鏈接來(lái)擴(kuò)展其功能,它提供了很多功能,通過(guò)一個(gè)全局控制面板和 Dashboard 來(lái)增強(qiáng)對(duì) Traefik 的觀測(cè)和控制。

[[442556]]

Traefik 已經(jīng)默認(rèn)實(shí)現(xiàn)了很多中間件,可以滿足大部分我們?nèi)粘5男枨?,但是在?shí)際工作中,用戶仍然還是有自定義中間件的需求,為解決這個(gè)問(wèn)題,官方推出了一個(gè) Traefik Pilot[1] 的功能了,此外在 Traefik v2.5 版本還推出了支持本地私有插件的功能。

Traefik Pilot

Traefik Pilot 是一個(gè) SaaS 平臺(tái),和 Traefik 進(jìn)行鏈接來(lái)擴(kuò)展其功能,它提供了很多功能,通過(guò)一個(gè)全局控制面板和 Dashboard 來(lái)增強(qiáng)對(duì) Traefik 的觀測(cè)和控制:

  • Traefik 代理和代理組的網(wǎng)絡(luò)活動(dòng)的指標(biāo)
  • 服務(wù)健康問(wèn)題和安全漏洞警報(bào)
  • 擴(kuò)展 Traefik 功能的插件

在 Traefik 可以使用 Traefik Pilot 的功能之前,必須先連接它們,我們只需要對(duì) Traefik 的靜態(tài)配置進(jìn)行少量更改即可。

[[442557]]

Traefik 代理必須要能訪問(wèn)互聯(lián)網(wǎng)才能連接到 Traefik Pilot,通過(guò) HTTPS 在 443 端口上建立連接。

首先我們需要在 Traefik Pilot 主頁(yè)上(https://pilot.traefik.io/)創(chuàng)建一個(gè)帳戶,注冊(cè)新的 Traefik 實(shí)例并開始使用 Traefik Pilot。登錄后,可以通過(guò)選擇 Register New Traefik Instance來(lái)創(chuàng)建新實(shí)例。

另外,當(dāng)我們的 Traefik 尚未連接到 Traefik Pilot 時(shí),Traefik Web UI 中將出現(xiàn)一個(gè)響鈴圖標(biāo),我們可以選擇 Connect with Traefik Pilot 導(dǎo)航到 Traefik Pilot UI 進(jìn)行操作。

登錄完成后,Traefik Pilot 會(huì)生成一個(gè)新實(shí)例的令牌,我們需要將這個(gè) Token 令牌添加到 Traefik 靜態(tài)配置中。

在 Traefik 安裝配置文件中啟用 Pilot 的配置:

  1. # Activate Pilot integration 
  2. pilot: 
  3.   enabled: true 
  4.   token: "e079ea6e-536a-48c6-b3e3-f7cfaf94f477" 

更新完成后,我們?cè)?Traefik 的 Web UI 中就可以看到 Traefik Pilot UI 相關(guān)的信息了。

接下來(lái)我們就可以在 Traefik Pilot 的插件頁(yè)面選擇我們想要使用的插件,比如我們這里使用 Demo Plugin[2] 這個(gè)插件。

點(diǎn)擊右上角的 Install Plugin 按鈕安裝插件會(huì)彈出一個(gè)對(duì)話框提示我們?nèi)绾伟惭b。

首先我們需要將當(dāng)前 Traefik 注冊(cè)到 Traefik Pilot(已完成),然后需要以靜態(tài)配置的方式添加這個(gè)插件到 Traefik 中,然后添加插件啟動(dòng)參數(shù):

  1. # Activate Pilot integration 
  2. pilot: 
  3.   enabled: true 
  4.   token: "e079ea6e-536a-48c6-b3e3-f7cfaf94f477" 
  5.  
  6. additionalArguments: 
  7. # 添加 demo plugin 的支持 
  8. --experimental.plugins.plugindemo.modulename=github.com/traefik/plugindemo 
  9. --experimental.plugins.plugindemo.version=v0.2.1 
  10. # 其他配置 

更新完成后創(chuàng)建一個(gè)如下所示的 Middleware 對(duì)象:

  1. ➜ cat <<EOF | kubectl apply -f - 
  2. apiVersion: traefik.containo.us/v1alpha1 
  3. kind: Middleware 
  4. metadata: 
  5.   name: myplugin 
  6. spec: 
  7.   plugin: 
  8.     plugindemo:  # 插件名 
  9.       Headers: 
  10.         X-Demo: test 
  11.         Foo: bar 
  12. EOF 

然后添加到上面的 whoami 應(yīng)用的 IngressRoute 對(duì)象中去:

  1. apiVersion: traefik.containo.us/v1alpha1 
  2. kind: IngressRoute 
  3. metadata: 
  4.   name: ingressroute-demo 
  5.   namespace: default 
  6. spec: 
  7.   entryPoints: 
  8.   - web 
  9.   routes: 
  10.   - match: Host(`who.qikqiak.com`) && PathPrefix(`/notls`) 
  11.     kind: Rule 
  12.     services: 
  13.     - name: whoami  # K8s Service 
  14.       port: 80 
  15.     middlewares: 
  16.     - name: myplugin  # 使用上面新建的 middleware 

更新完成后,當(dāng)我們?nèi)ピL問(wèn) http://who.qikqiak.com/notls 的時(shí)候就可以看到新增了兩個(gè)上面插件中定義的兩個(gè) Header。

當(dāng)然除了使用 Traefik Pilot 上開發(fā)者提供的插件之外,我們也可以根據(jù)自己的需求自行開發(fā)自己的插件,可以自行參考插件開發(fā)文檔[3]。

本地私有插件

上面我們介紹了可以使用 Traefik Pilot 來(lái)使用插件,但是這是一個(gè) SaaS 服務(wù)平臺(tái),對(duì)于大部分企業(yè)場(chǎng)景下面不是很適用,我們更多的場(chǎng)景下需要在本地環(huán)境加載插件,為解決這個(gè)問(wèn)題,在 Traefik v2.5 版本后,就提供了一種直接從本地存儲(chǔ)目錄加載插件的新方法,不需要啟用 Traefik Pilot,只需要將插件源碼放入一個(gè)名為 /plugins-local 的新目錄,相對(duì)于當(dāng)前工作目錄去創(chuàng)建這個(gè)目錄,比如我們直接使用的是 traefik 的 docker 鏡像,則入口點(diǎn)則是根目錄 /,Traefik 本身會(huì)去構(gòu)建你的插件,所以我們要做的就是編寫源代碼,并把它放在正確的目錄下,讓 Traefik 來(lái)加載它即可。

需要注意的是由于在每次啟動(dòng)的時(shí)候插件只加載一次,所以如果我們希望重新加載你的插件源碼的時(shí)候需要重新啟動(dòng) Traefik。

下面我們使用一個(gè)簡(jiǎn)單的自定義插件示例來(lái)說(shuō)明如何使用私有插件。首先我們定義一個(gè)名為 Dockerfile.demo 的 Dockerfile 文件,先從 git 倉(cāng)庫(kù)中克隆插件源碼,然后以 traefik:v2.5 為基礎(chǔ)鏡像,將插件源碼拷貝到 /plugins-local 目錄,如下所示:

  1. FROM alpine:3 
  2. ARG PLUGIN_MODULE=github.com/traefik/plugindemo 
  3. ARG PLUGIN_GIT_REPO=https://github.com/traefik/plugindemo.git 
  4. ARG PLUGIN_GIT_BRANCH=master 
  5. RUN apk add --update git && \ 
  6.     git clone ${PLUGIN_GIT_REPO} /plugins-local/src/${PLUGIN_MODULE} \ 
  7.       --depth 1 --single-branch --branch ${PLUGIN_GIT_BRANCH} 
  8.  
  9. FROM traefik:v2.5 
  10. COPY --from=0 /plugins-local /plugins-local 

我們這里使用的演示插件和上面 Pilot 中演示的是同一個(gè)插件,我們可以通過(guò)該插件去自定義請(qǐng)求頭信息。

然后在 Dockerfile.demo 目錄下面,構(gòu)建鏡像:

  1. ➜ docker build -f Dockerfile.demo -t cnych/traefik-private-demo-plugin:2.5.4 . 
  2. # 推送到鏡像倉(cāng)庫(kù) 
  3. ➜ docker push cnych/traefik-private-demo-plugin:2.5.4 

鏡像構(gòu)建完成后就可以使用這個(gè)鏡像來(lái)測(cè)試 demo 插件了,將鏡像修改成上面我們自定義的鏡像地址:

  1. image: 
  2.   name: cnych/traefik-private-demo-plugin 
  3.   tag: 2.5.4 
  4.  
  5. # 其他省略 
  6.  
  7. # 不需要開啟 pilot 了 
  8. pilot: 
  9.   enabled: false 
  10.  
  11. additionalArguments: 
  12. # 添加 demo plugin 的本地支持 
  13. --experimental.localPlugins.plugindemo.moduleName=github.com/traefik/plugindemo 
  14. # 其他省略 

注意上面我們添加 Traefik 的啟動(dòng)參數(shù)的時(shí)候使用的 --experimental.localPlugins。更新完成后就可以使用我們的私有插件來(lái)創(chuàng)建一個(gè) Middleware 對(duì)象了:

  1. ➜ cat <<EOF | kubectl apply -f - 
  2. apiVersion: traefik.containo.us/v1alpha1 
  3. kind: Middleware 
  4. metadata: 
  5.   name: my-private-plugin 
  6. spec: 
  7.   plugin: 
  8.     plugindemo:  # 插件名 
  9.       Headers: 
  10.         X-Demo: private-demo 
  11.         Foo: bar 
  12. EOF 

然后添加到上面的 whoami 應(yīng)用的 IngressRoute 對(duì)象中去:

  1. apiVersion: traefik.containo.us/v1alpha1 
  2. kind: IngressRoute 
  3. metadata: 
  4.   name: ingressroute-demo 
  5.   namespace: default 
  6. spec: 
  7.   entryPoints: 
  8.   - web 
  9.   routes: 
  10.   - match: Host(`who.qikqiak.com`) && PathPrefix(`/notls`) 
  11.     kind: Rule 
  12.     services: 
  13.     - name: whoami  # K8s Service 
  14.       port: 80 
  15.     middlewares: 
  16.     - name: my-private-plugin  # 使用上面新建的 middleware 

更新上面的資源對(duì)象后,我們?cè)偃ピL問(wèn) http://who.qikqiak.com/notls 就可以看到新增了兩個(gè)上面插件中定義的兩個(gè) Header,證明我們的私有插件配置成功了:

有了本地私有插件的支持,Traefik 才算真正開始起飛吧?

參考資料

[1]Traefik Pilot: https://pilot.traefik.io/

[2]Demo Plugin: https://github.com/traefik/plugindemo

[3]Plugin dev doc: https://doc.traefik.io/traefik-pilot/plugins/plugin-dev/

 

責(zé)任編輯:姜華 來(lái)源: k8s技術(shù)圈
相關(guān)推薦

2022-01-14 09:17:13

PythonAPISIX插件

2023-03-31 07:17:16

2021-12-31 08:43:45

插件KubeScheduler

2012-11-19 11:07:42

IBMdw

2011-08-25 11:44:21

LUA腳本魔獸世界

2015-02-12 15:33:43

微信SDK

2015-02-12 15:38:26

微信SDK

2016-11-16 21:55:55

源碼分析自定義view androi

2016-12-26 15:25:59

Android自定義View

2011-06-23 10:49:13

Qt 自定義信號(hào)

2023-06-15 08:01:01

Vite插件機(jī)制

2024-05-08 17:05:44

2009-07-06 16:59:26

JSP自定義標(biāo)簽

2010-09-14 16:47:23

SQL自定義函數(shù)

2023-09-06 10:33:40

夜鶯監(jiān)控數(shù)據(jù)庫(kù)

2015-07-22 10:57:36

watchOS圖表自定義

2013-06-27 11:10:01

iOS開發(fā)自定義UISlider

2013-04-19 10:14:24

2022-04-24 15:17:56

鴻蒙操作系統(tǒng)

2013-04-01 14:35:10

Android開發(fā)Android自定義x
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)