您好,登錄后才能下訂單哦!
這篇文章主要介紹“OpenResty插件怎么使用”,在日常操作中,相信很多人在OpenResty插件怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”OpenResty插件怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Rainbond內部網絡劃分支持多租戶,每個租戶都有一個私有的IP段,不同租戶的網絡相互不可見。當我們把一個容器化應用部署到Rainbond,Rainbond會為該容器分配一個內部IP,用于同一租戶中不同應用在集群內部的通信,而集群外部無法直接訪問,因此我們需要有一個集群入口控制器,以便用戶可以方便地訪問這些應用。
另外,Rainbond中部署的每個應用都可以有多個實例,即假設我們為一個WEB應用部署了三個實例,每個實例分擔一部分流量,我們就需要這三個實例前增加負載均衡控制器來完成分發流量的工作。
除了上述的基本功能以外,負載均衡控制器還必須支持更多功能,例如:
入口控制器能夠根據數據包信息(如協議、端口號、主機名等)將請求轉發給指定的應用
實時發現集群中應用的變化(如添加自定義域名、添加證書、添加端口等)并動態更新自身的轉發規則
同時支持HTTP、TLS、TCP、UDP協議,因為有時不只WEB應用需要向外提供服條,RPC、MySQL等也需要對外開放
支持高可用
綜上所述,我們需要一個同時支持L4或各類應用協議(L7)的負載均衡控制器集群,還必須能夠自動發現集群中的應用變化以更新自己的轉發規則。
web
:表示Rainbond中的一個應用,并且有三個實例
api-server
:kubeneters的kube-apiserver組件
entrance
:Rainbond的負載均衡控制器通用接口,支持多種負載均衡插件
Rainbond中的負載均衡是面向應用的,不同應用可以使用不同的負載均衡。Rainbond的Entrance組件設計,使之可以集成集成多種負載均衡插件,也就是說,Rainbond不僅支持常用的OpenResty,還可以支持其它負載均衡插件,例如商業支持的F5等。
Entrance的主要工作是從kube-apiserver中監聽應用運行節點信息的變化,例如Service、Endpoint、Pod等,然后把這些資源抽象為通用的負載均衡抽象并緩存在etcd中,這些通用抽象包括:
Pool
:負載均衡池,其中包括多個節點,對應上圖中的三個WEB實例
Node
:Pool中的一個節點,對應上圖中的其中一個WEB實例
Domain
:域名,負載均衡控制器可以識別一個數據包中的域名信息然后將數據轉發給對應的Pool
VirtualService
:監聽了某個端口的虛擬主機,還指明了端口的協議名稱,主要用來處理L4入口控制和負載均衡
Rule
:轉發規則,用來描述域名跟Pool的對應關系,還指明了端口的協議名稱與證書信息,處理L7入口控制和負載均衡
當有資源發生變化時,Entrance會將通用資源轉化為相應插件的資源,并根據應用所選擇的不同的插件驅動操作負載均衡控制器。
從架構中可以看到,有兩個Entrance和兩個OpenResty實例,它們的關系是:每個Entrance中持有所有OpenResty的地址,當有信息需要更新時,Entrance會將信息更新到所有的OpenResty。那兩個Entrance之間怎么協調呢?這里我們利用etcd本身的特性做了分布式鎖,保證只有一個Entrance有權限向OpenResty更新信息,如此實現了高可用。
OpenResty是一個可以用Lua腳本來處理請求和業條邏輯的WEB應用,并且內置了眾多Lua相關的指定和函數供開發者使用,很合適開發Restful API服務器,我們將OpenResty作為Entrance的插件之一原因如下:
基于Nginx開發,在穩定性和性能方面表現出色
接近Rainbond的設計目標,它已經幫我們把Lua模塊編譯進去,可以很方便地用Lua腳本豐富負載均衡控制器的功能
同時支持L7和L4的負載均衡
我們在OpenResty端嵌入了一個Rest API服務器,這些API是用Lua寫的。前面說過OpenResty集成了Lua腳本功能,我們可以直接用Lua來處理請求,下面是Nginx配置文件的其中一部分:
# custom api of upstream and server server { listen 10002; location ~ /v1/upstreams/([-_0-9a-zA-Z.@]+) { set $src_name $1; content_by_lua_file lua/upstream.lua; } location ~ /v1/servers/([-_0-9a-zA-Z.@]+) { set $src_name $1; content_by_lua_file lua/server.lua; } }
當我們調用下面的API時:
curl -s localhost:10002/v1/servers/app1 -X POST -d "$json_data"
OpenResty會執行相應的Lua腳中,也就是lua/server.lua
,前面說過,OpenResty內置了很多Lua相關的指命與函數,可以讓Lua與Nginx更好地交互,所以我們在腳本中很容器處理接收到的JSON數據,并將其轉換為配置Nginx文件,由于Lua代碼較多就不貼出來了,可以在本文的引用部分找到該項目地址。
這里有個需要注意的地方,當收到大量修改server和upstream的請求時,OpenResty需要頻繁加載配置文件,這樣會增加負載且影響性能。實際上OpenResty有很多第三方插件可以使用,有一個叫dyups的插件可以做到動態修改upstream,它的使用方式如下,Lua代碼:
-- 增加或更新指定upstream dyups.update("upstream_name", [[server 127.0.0.1:8088;]]) -- 刪除指定upstream dyups.delete("upstream_name")
執行成功后就已經生效了,不需要我們執行nginx -s reload
命令,這會提高一些效率。
對于server的修改暫時還沒有相應用插件做到動態修改,所以實際上我們的負載均衡控制器分兩種情況,如果更新了upstream配置會即時生效,而更新server配置則需要加上nginx -s reload
命令。
到此,關于“OpenResty插件怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。