主頁 > 軟體設計 > 為 Rainbond Ingress Controller 設定負載均衡

為 Rainbond Ingress Controller 設定負載均衡

2021-12-08 08:26:29 軟體設計

Rainbond 作為一款云原生應用管理平臺,天生帶有引導南北向網路流量的分布式網關 rbd-gateway,rbd-gateway 組件,實際上是好雨科技團隊開發的一種 Ingress Controller 實作,那么作為集群中部署的服務的網路流量出入口,如何為它設定反向代理呢?這篇文章會做出詳細的解讀,

實際場景

Rainbond 在企業內部一般會扮演云原生應用管理平臺的角色,通過一站式開箱即用的使用體驗,可以大幅度降低企業運維人員的管理成本,在網關策略方面,免去了運維人員配置相對復雜的 Service 、Ingress 資源組態檔的麻煩,在圖形化界面下, 即可實作 L4 或 L7 的網關策略配置,

Rainbond 的網關組件 rbd-gateway 天生支持分布式部署,這就意味著,我們可以在外部流量和 Rainbond 網關集群之間設立負載均衡,來進行流量的分發,使網關具備容錯能力的同時,成倍提升其抗并發的能力,

這種負載均衡可以是物理的,也可以是軟體定義的,當然也可以是云服務商提供的,今天重點探討如何使用 Nginx 實作的全域負載均衡器實作對網關的負載,

在這里插入圖片描述

負載均衡與VIP的對比

當企業沒有負載均衡時,也可以直接將 Rainbond 的網關直接暴露給外部訪問流量,在這種情況下,我們一般會為集群部署 VIP 虛擬IP,這個 IP 地址可以在多個網關節點之間漂移,當網關節點發生故障時提供高可用特性,通過將域名決議指向 VIP,網關節點集群擁有了一個統一的訪問入口,但是相對于負載均衡而言,VIP 方案還是有些劣勢的,

  • VIP 方案不提供高并發:由于VIP同時只會系結在一個網關節點上,所以同一時刻,只會有一個網關節點接受流量,負載均衡方案可以將流量分發到每一個網關節點,故而提供了高并發能力,
  • VIP 方案相當于將網關直接暴露向公網,這在安全方面有一定的隱患,負載均衡同時也是一種反向代理,可以將網關節點保護在其身后,

我們可以得出結論:當企業內部存在負載均衡設施的時候,就不再需要為網關節點集群設定 VIP ,

Nginx 負載均衡特性

Nginx 提供了強大的流量轉發能力,作為負載均衡時,Nginx 提供的穩定性和性能表現都堪稱驚艷,甚至不遜色硬體負載均衡,這些特性,使它成為了大部分企業在軟體定義負載均衡領域的第一選擇,它可以同時提供 L4 、L7 層負載均衡能力,支持 SSL 證書、多種負載均衡演算法等高級特性,

L4負載均衡

L4 負載均衡策略,其目的是在 Nginx 負載均衡的配置中,實作負載均衡的埠,到后端所有網關節點的指定埠的流量轉發,一般用于最終業務并非使用 Http 協議作業的場景,比如 Mysql 業務對外暴露 3306 埠的場景,

在這里插入圖片描述

Rainbond網關配置

在 Rainbond 一側,需要在網關策略中,為 Mysql 一鍵開啟如下的設定:

image-20211206213814012

對上述配置作出如下解釋:

- 埠號: 3306                # Mysql 業務監聽的埠
- 埠協議: mysql             # 業務埠協議,可選值包括 TCP、UDP、HTTP、MYSQL、Grpc,此處 MYSQL 可以理解為 TCP中的一種
- 對外服務: 開啟               # 用戶通過開啟此開關來將 Mysql 的 3306 埠對外暴露服務
- 訪問策略: 0.0.0.0:10001     # 網關的代理策略,這里意味著將 Mysql 的 3306 埠,通過所有網關節點的 10001 埠對外代理

負載均衡配置

在負載均衡一側,則需要添加一段 Nginx 配置,將所有網關的 10001 埠,通過四層代理,對外暴露,

Nginx 的組態檔,需要在最頂層創建一個 stream{} 塊,這一句翻譯自 Nginx 官方檔案,實際操作時,其意義是不要將 stream 放入到 http 塊中去,

繼續在 stream{}塊中分別創建 upstream{}server{} 塊,

stream {
    upstream lbserver {
        server 192.168.0.1:10001;
        server 192.168.0.2:10001;
        server 192.168.0.3:10001;
    }

    server {
        listen 10001;
        proxy_pass lbserver;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
    }
}

重新加載組態檔之后,就可以通過 Nginx 對外IP地址的 10001 埠,訪問到 Mysql 業務的 3306 埠了,

L7負載均衡

L7負載均衡,一般用于 Http 業務的處理,當我們希望通過一個域名,可以訪問到部署在 Rainbond 上的 Http 業務時,這種用法就會派上用場,接下來聊一聊如何在負載均衡上,處理 Http 請求,

實際上,Rainbond 的網關節點也是一種負載均衡,網關節點負載均衡是為了將流量分發到運行于 Rainbond 集群中的業務實體上去,根據網關所使用的負載均衡策略,我們可以在使用 L7負載均衡的情況下,繼續細分兩種場景:

  • 網關使用 L4 負載均衡
  • 網關使用 L7 負載均衡

而這兩種場景下,我們都希望通過一個決議到 Nginx 負載均衡對外 IP 地址的域名,訪問到部署于 Rainbond 集群中的 web 服務,假定這個域名是 index.guox.grapps.cn .

網關使用 L4 負載均衡

在這里插入圖片描述

網關使用 L4 負載均衡時,Rainbond 一側的配置是不需要進行調整的,接下來的用例,我使用一個作業于 80 埠的 web 服務作為示例,依然在 tcp 協議下,開啟訪問策略,

image-20211206222033543

此時,web 服務的 80 埠會通過網關的 10002 埠暴露出來,

而在 Nginx 負載均衡一側,則需要基于域名配置一個虛擬服務器(Virtual Servers),并將所有的網關節點的 10002 埠作為這一虛擬服務器的上游,

Nginx 的組態檔,在 http{} 塊中進行配置,分別創建 server{}upstream{}

upstream lbserver {
        server 192.168.0.1:10002;
        server 192.168.0.2:10002;
        server 192.168.0.3:10002;
}

server {
        listen 80;
        server_name index.guox.grapps.cn;

        location / {
        proxy_pass http://lbserver;
    }
}

重新加載組態檔后,訪問 http://index.guox.grapps.cn/ 就可以訪問到 web 服務的主頁,

網關使用 L7 負載均衡

在這里插入圖片描述

網關使用 L7 負載均衡時,我們需要為 web 服務的 80 埠系結目標域名,在埠協議為 http 時,點擊添加域名即可添加目標域名,

image-20211206225729118

即使這個域名并沒有直接決議到 Rainbond 的網關上,我們依然需要系結這個域名,因為 Rainbond 網關在 7 層作業時,需要通過域名來決定將流量轉發到哪個服務實體上去,

那么如何將這個域名資訊傳遞到 Rainbond 網關上去呢?答案是 proxy_set_header HOST $host, Nginx 負載均衡在接受到帶有指定域名的請求時,可以將域名資訊編輯到 header 資訊中向后方的 Rainbond 網關傳遞,

Nginx 的組態檔需要添加這一配置,

upstream lbserver {
        server 192.168.0.1:80;
        server 192.168.0.2:80;
        server 192.168.0.3:80;
}

server {
        listen 80;
        server_name index.guox.grapps.cn;

        location / {
        proxy_pass http://lbserver;
        proxy_set_header HOST $host       # 將域名資訊保存在 HOST 傳遞給下一層代理
    }
}

優劣對比

L7 作為更高級的協議,提供了埠復用、TLS加密以及基于HTTP協議實作的各種高級功能,L4 是更通用的協議,所有基于 TCP/IP 協議堆疊實作的業務都可以使用,對于最外層的 Nginx 負載均衡而言,無論是 L4 還是 L7 都有各自合適的使用場景,所以并沒有優劣之分,用戶根據自己的需要被訪問的業務型別判斷:Http 業務使用 L7,其余情況使用 L4 ,

但是,在最外層的 Nginx 使用 L7 負載均衡時,對于 Rainbond 網關使用哪一層的負載均衡策略是有區別的,在這里我推薦網關使用 L4 負載均衡,因為在實作同樣效果的前提下,L4 比 L7 的開銷更小,

一點擴展

當為一個基于 http 協議作業的埠開啟對外服務的時候,Rainbond 會默認生成一個可以被直接訪問的域名,比如下圖中的 http://80.gr6538fd.0c9yg42x.695d35.grapps.cn/ ,但是我們今天并沒有探討直接通過網關分配域名的訪問方式,關于這個自動生成域名的實作機制,感興趣的同學請關注 詳解 Rainbond Ingress 泛決議域名機制 ,

在 Rainbond 網關策略管理中,對同一個埠,是可以同時系結多個訪問策略的,下圖中既有基于域名的 L7 訪問策略,也有基于 IP 埠轉發的 L4 訪問策略,

image-20211206220135606


Rainbond是一個開源的云原生應用管理平臺,使用簡單,不需要懂容器和Kubernetes,支持管理多個Kubernetes集群,提供企業級應用的全生命周期管理,功能包括應用開發環境、應用市場、微服務架構、應用持續交付、應用運維、應用級多云管理等,

圖片

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/375823.html

標籤:其他

上一篇:dhcp實驗

下一篇:nginx如何自定義404頁面隱藏中間鍵及其版本

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more