Nginx-ingress 控制器到底怎樣實(shí)現(xiàn)的,這篇文章教你看明白了

主機(jī) nginx

一般 nginx 做主機(jī)反向代理(網(wǎng)關(guān))有以下配置

upstream order{

其中 192.168.1.10:5001,192.168.1.10:5001 我們把他們稱為 Endpoint,就是所謂的具體的服務(wù),比如 order 訂單服務(wù)。

pod nginx-ingress

nginx-ingress也是一種代理,是一個(gè)pod,外部的數(shù)據(jù)統(tǒng)一經(jīng)過(必經(jīng))這個(gè)pod,然后通過該pod內(nèi)部的nginx方向代理到各各服務(wù)(Endpoint)。nginx-ingress是ingress控制器插件的一種,這些插件有很多,比如istio-ingressgateway。

1、Pod

nginx-ingress pod有兩個(gè)功能,controller 和 nginx:

controller:和kubernetes api通訊實(shí)時(shí)更新nginx配置(就是ingress yaml資源了)

與主機(jī)nginx的區(qū)別是,該pod nginx-ingress是運(yùn)行在pod里。主機(jī)在定義反向代理配置文件時(shí),需要監(jiān)聽一個(gè)對(duì)外開放的端口,比如上邊的80端口。那么pod中的nginx端口是如何配置的呢?

我們?cè)趃ithub上找到了nginx-ingress的deployment.yaml

https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

其中一段

apiVersion: apps/v1

我們看到

- name: http

默認(rèn)對(duì)外監(jiān)聽了兩個(gè)端口80和443,也就是說,有這兩個(gè)端口對(duì)外就可以web服務(wù)了。

2、ingress 資源

ingress 資源通過yaml進(jìn)行管理的,比如以下:

apiVersion: extensions/v1beta1

以上我們定義了一個(gè)單一規(guī)則的ingress,該pod(nginx-ingress)接收到外部所有的請(qǐng)求,將被發(fā)送到內(nèi)部order服務(wù)的80端口上。接下來我們看pod(nginx-ingress)如何把ingress資源轉(zhuǎn)化為該pod中的nginx反向代理配置文件

upstream order{

當(dāng)然ingress如果包含https,那么會(huì)轉(zhuǎn)化nginx對(duì)應(yīng)的443端口及證書的配置文件內(nèi)容,這里就不寫了。

那么,單一個(gè)規(guī)則的ingress資源代理多個(gè)服務(wù)(比如order服務(wù),product服務(wù))或者多個(gè)ingress資源文件如何轉(zhuǎn)化為nginx配置? 猜測(cè),其實(shí)就是轉(zhuǎn)化成了多個(gè)。

upstream order{

當(dāng)然,被轉(zhuǎn)化的nginx配置文件要比這些復(fù)雜的多,據(jù)說還是用lua腳本寫的,靈活如openresty。

3、nginx-ingress對(duì)外提供服務(wù)

一般來講,pod直接對(duì)外提供服務(wù)就只有兩種方式:

  • create一個(gè)service,該service暴漏nodePort
  • forward 映射

我們一般采用第一種。nginx-ingress也是一個(gè)pod,所以,為了能使外部通過該pod代理訪問,還需要nginx-ingress對(duì)外提供一個(gè)nodePort的service。這個(gè)service這里也不再寫了。

4、nginx-ingress工作流程

圖片

我們可以看到,因?yàn)?nginx-ingress 這個(gè)pod做了所有service的代理,在高并發(fā)情況下將承受巨大壓力,我們可以增加多個(gè)pod實(shí)例。

作者:dakesolo
鏈接:https://juejin.cn/post/6844903957479817230

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容