十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本篇內(nèi)容主要講解“Nginx Ingress怎么部署”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Nginx Ingress怎么部署”吧!
創(chuàng)新互聯(lián)建站專注于盧龍企業(yè)網(wǎng)站建設,成都響應式網(wǎng)站建設公司,購物商城網(wǎng)站建設。盧龍網(wǎng)站建設公司,為盧龍等地區(qū)提供建站服務。全流程定制制作,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務
在開源社區(qū)當中,Kubernetes 的 Ingress Controller 的實現(xiàn)有多種方式,Nginx Ingress 只是其中的一種實現(xiàn)方式,當然也是目前社區(qū)中使用量最大的一種 Ingress Controller 的實現(xiàn)方式,其不僅功能強大,而且性能極高。
Nginx Ingress 是 Kubernetes 的一種對象,通過nginx-ingress-controller 將用戶聲明的 nginx-ingress 轉化成 nginx 的轉發(fā)規(guī)則。其核心解決的問題是流量的轉發(fā)和東西向的負載均衡。 主要的工作原理是nginx-ingress-controller監(jiān)聽api-server的變化(Kubernetes Informers),通過 watch Kubernetes 的 Ingress、Service、Endpoint、Secret、ConfigMap 等對象變化,更改 Nginx 實例的配置,進行流量轉發(fā)。

目前社區(qū)中,針對于 Nginx Ingress 主要有如下的兩種實現(xiàn)方式
Kubernetes 開源社區(qū)的實現(xiàn)
Nginx 官方的實現(xiàn)
開源社區(qū)當中,對 Ingress Controller 的實現(xiàn)方式有多種,每一種 Controller 都有其適用的場景以及各自的優(yōu)缺點,為什么推薦使用 nginx-ingress-controller?下面我們來探討一下,如果不使用 nginx-ingress-controller 會給業(yè)務帶來什么困擾
這里以騰訊云容器服務控制臺(以下簡稱 TKE)默認推薦的 ingress controller 為例子,存在如下的一些問題:
CLB 類型的 Ingress 能力無法滿足現(xiàn)有業(yè)務的需求,如無法共享同一個外網(wǎng)入口,支持默認默認轉發(fā)后端等
原有業(yè)務已使用了 nginx-inrgess,并且運維已習慣于配置 nginx.conf,不希望做過多的改變
使用 nginx-ingress-controller,能夠很好地解決以上的問題。
進入騰訊云容器服務控制臺當中,選擇需要部署 Nginx Ingress 的集群,進入集群-組件管理當中,部署安裝 Nginx Ingess 組件,如下圖:


TKE 提供了多種對于nginx-ingress-controller的部署方案以及接入 LB 的方式,適配不同的業(yè)務場景需求,以下會對不同的方案進行介紹。

Nginx 作為關鍵的流量接入網(wǎng)關,是至關重要的組件,不建議將 Nginx 與其他業(yè)務部署在相同的節(jié)點內(nèi),可以通過節(jié)點池設置污點的方式,進行部署。關于節(jié)點池的相關說明,可以查看騰訊云容器服務節(jié)點池概述。

使用此部署方案,應該注意如下幾個事項:
提前準備好部署 nginx-ingress-controller 的節(jié)點池,同時設置節(jié)點池的污點 Taint 和 Label,防止其他 Pod 調(diào)度到該節(jié)點池。
確保已成功部署安裝好 nginx-ingress-operator 組件,部署方式參考上方指引
進入組件詳情,創(chuàng)建
nginx-ingress-controller
實例(單一集群內(nèi)可同時存在多個實例)
部署方式選擇 指定節(jié)點池DaemonSet部署
設置容忍污點
設置 Request/Limit,其中 Request 需設置比節(jié)點池的機型配置?。ü?jié)點本身有資源預留,避免實例因資源不足而不可用),Limit 可不設置
其他參數(shù)根據(jù)業(yè)務需要進行設置即可

使用 Deployment + HPA 的方案進行部署,您可以根據(jù)業(yè)務需要配置污點和容忍,將 Nginx 和業(yè)務 Pod 進行分散部署。搭配 HPA,設置 CPU/內(nèi)存等指標進行彈性伸縮。

使用此部署方案,應該注意如下幾個事項:
在集群中設置即將部署 nginx-ingress-controller 的節(jié)點的 Label
確保已成功部署安裝好 nginx-ingress-operator 組件,部署方式參考上方指引。
進入組件詳情,創(chuàng)建
nginx-ingress-controller
實例(單一集群內(nèi)可同時存在多個實例)
部署方式選擇 自定義Deployment+HPA部署
設置 HPA 觸發(fā)策略
設置 Request/Limit
設置節(jié)點調(diào)度策略,推薦 nginx-ingress-controller 獨占節(jié)點,避免其他業(yè)務資源侵占而導致不可用
其他參數(shù)根據(jù)業(yè)務需要進行設置即可
上文介紹了在 TKE 的集群當中部署 nginx-ingress-operator 和 nginx-ingress-controller 的使用流程和部署方案建議,完成以上步驟,僅僅是在集群內(nèi)部署了 Nginx 的相關組件,但要接收外部的流量,還需要配置,還需要配置 nginx 的前端 LB。當前 TKE 已完成對 Nginx Ingress 的產(chǎn)品化支持,可以根據(jù)業(yè)務需要選擇以下部署模式之一。
前置條件(滿足其一即可):
集群自身網(wǎng)絡插件為
VPC-CNI集群自身網(wǎng)絡插件為
Global Router,并已開啟VPC-CNI的支持(兩種模式混用)
我們以節(jié)點池部署的負載示例
當前方案性能好,所有的 Pod 都使用的彈性網(wǎng)卡,彈性網(wǎng)卡的 Pod 是支持 CLB 直綁 Pod 的,可以繞過 NodePort,并且不需要手動維護 CLB,支持自動擴縮容,是最理想的方案。
當前 TKE 對于 LoadBalancer 類型的 Service 默認的實現(xiàn)是基于 NodePort,CLB 會綁定各節(jié)點的 NodePort 作為后端的 RS,將流量轉發(fā)到節(jié)點的 NodePort,然后節(jié)點再通過 Iptables 或 IPVS 將請求路由到 Service 對應的后端 Pod(指 Nginx Ingress Controller 的 Pod)。
您的集群如果不支持 VPC-CNI 的網(wǎng)絡模式,可以通過常規(guī)的 LoadBalancer 訪問方式的 Service 接入流量。 這是在 TKE 上部署 Nginx Ingress 最簡單的方式,流量會經(jīng)過一層 NodePort,多一層轉發(fā),但可能存在以下的問題:
轉發(fā)路徑較長,流量到 NodePort 后,還會再經(jīng)過 Kubernetes 內(nèi)部負載均衡,通過 Iptables 或 IPVS 轉發(fā)到 Nginx,會增加一點網(wǎng)絡耗時
經(jīng)過 NodePort,必然會發(fā)生 SNAT,如果流量過于集中,容易導致源端口耗盡或者 conntrack 插入沖突而導致丟包,引發(fā)部分流量異常。
每個節(jié)點的 NodePort 也充當一個負載均衡器,CLB 如果綁定大量節(jié)點的 NodePort,負載均衡的狀態(tài)就分散在每個節(jié)點上,容易導致全局負載不均。
CLB 會對 NodePort 進行健康探測,探測包最終會被轉發(fā)到 Nginx Ingress 的 Pod,如果 CLB 綁定的節(jié)點數(shù)量多于 Nginx Ingress 的 Pod,會導致探測包對 Nginx Ingress 造成較大的壓力。
方案二雖然是最簡單的部署方式,但是流量會經(jīng)過一層 NodePort,且可能存在如上所描述的問題,我們可以讓 Nginx Ingress 使用 HostNetwork,CLB 直接綁定節(jié)點 IP + 端口(80,443)。由于使用 HostNetwork,nginx ingress 的 Pod 就不能被調(diào)度到同一個節(jié)點當中,避免端口監(jiān)聽沖突。 由于 TKE 尚未對此方案進行產(chǎn)品化,可以通過提前規(guī)劃,選擇部分節(jié)點,專門用于部署 nginx-ingress-controller,為節(jié)點打上 Label,然后以 DaemonSet 的方式部署在這些節(jié)點上(即 nginx-ingress-controller 的部署方案一)。
TKE 通過集成 騰訊云容器團隊的高性能云原生監(jiān)控服務(傳送門:https://console.cloud.tencent.com/tke2/prometheus ),也可在以前發(fā)布的文章《如何用 Prometheus 監(jiān)控十萬 container 的 Kubernetes 集群》中了解 Prometheus,Kvass 和怎么利用 kvass 為基礎的 Prometheus 集群化技術。


TKE 通過集成 騰訊云日志服務 CLS,提供了全套完整的產(chǎn)品化能力,實現(xiàn) nginx-ingress-controller 的日志采集和消費能力,但需要注意如下幾個事項:
前置要求:確保當前集群已開啟日志采集功能
在 nginx-ingress-controller 實例中,配置日志采集的相關選項。

到此,相信大家對“Nginx Ingress怎么部署”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!