0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文透析Nginx-ingress 控制器如何實現(xiàn)的

Linux愛好者 ? 來源:掘金 ? 作者: dakesolo ? 2021-09-01 14:44 ? 次閱讀

主機nginx

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

upstream order{

server 192.168.1.10:5001;

server 192.168.1.11:5001;

}

server {

listen 80;

server_name order.example.com;

access_log /var/log/nginx/order.example.com-access.log;

error_log /var/log/nginx/order.example.com-error.log;

location / {

proxy_pass_header Server;

proxy_set_header Host $http_host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Scheme $scheme;

proxy_pass http://order;

}

}

復制代碼

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

pod nginx-ingress

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

1、Pod

nginx-ingress pod有兩個功能,controller和nginx:

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

nginx:正常的反向代理

復制代碼

與主機nginx的區(qū)別是,該pod nginx-ingress是運行在pod里。主機在定義反向代理配置文件時,需要監(jiān)聽一個對外開放的端口,比如上邊的80端口。那么pod中的nginx端口是如何配置的呢?我們在github上找到了nginx-ingress的deployment.yaml

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

復制代碼

其中一段

apiVersion: apps/v1

kind: Deployment

metadata:

name: nginx-ingress-controller

namespace: ingress-nginx

labels:

app.kubernetes.io/name: ingress-nginx

app.kubernetes.io/part-of: ingress-nginx

spec:

replicas: 1

selector:

matchLabels:

app.kubernetes.io/name: ingress-nginx

app.kubernetes.io/part-of: ingress-nginx

template:

metadata:

labels:

app.kubernetes.io/name: ingress-nginx

app.kubernetes.io/part-of: ingress-nginx

annotations:

prometheus.io/port: “10254”

prometheus.io/scrape: “true”

spec:

# wait up to five minutes for the drain of connections

terminationGracePeriodSeconds: 300

serviceAccountName: nginx-ingress-serviceaccount

containers

- name: nginx-ingress-controller

image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1

。。。

。。。

。。。

ports:

- name: http

containerPort: 80

- name: https

containerPort: 443

復制代碼

我們看到

- name: http

containerPort: 80

- name: https

containerPort: 443

復制代碼

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

2、ingress 資源

ingress 資源通過yaml進行管理的,比如以下:

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

name: order

spec:

rules:

- host: order.example.com

http:

paths: /

backend:

serviceName: order

servicePort: 80

復制代碼

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

upstream order{

server order:80;

}

server {

listen 80;

server_name order.example.com;

。。。

。。。

location / {

proxy_pass_header Server;

proxy_set_header Host $http_host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Scheme $scheme;

proxy_pass http://order; # 對應ingress 資源 name: order

}

}

復制代碼

當然ingress如果包含https,那么會轉化nginx對應的443端口及證書的配置文件內容,這里就不寫了。

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

upstream order{

server order:80;

}

復制代碼

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

3、nginx-ingress對外提供服務

一般來講,pod直接對外提供服務就只有兩種方式:

create一個service,該service暴漏nodePort

forward 映射

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

4、nginx-ingress工作流程

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

來源:掘金 - dakesolo

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 主機
    +關注

    關注

    0

    文章

    996

    瀏覽量

    35139
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68625
  • nginx
    +關注

    關注

    0

    文章

    149

    瀏覽量

    12176

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

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    nginx+lua+redis實現(xiàn)灰度發(fā)布

    作者:馬仁喜 前言: 授人以魚不如授人以漁 .先學會用,在學原理,在學創(chuàng)造,可能輩子用不到這種能力,但是不能不具備這種能力。這篇文章主要是沉淀使用nginx+lua+redis實現(xiàn)灰度,當我們具備
    的頭像 發(fā)表于 12-17 10:01 ?71次閱讀

    nginx隱藏版本號與WEB服務信息

    nginx不僅可以隱藏版本信息,還支持自定義web服務信息 先看看最終的隱藏結果吧 具體怎么實現(xiàn)呢,其實也很簡單,請往下看 1 官網(wǎng)下載最新穩(wěn)定版 wget http://nginx
    的頭像 發(fā)表于 11-22 10:25 ?167次閱讀
    <b class='flag-5'>nginx</b>隱藏版本號與WEB服務<b class='flag-5'>器</b>信息

    讀懂單燈控制器工作原理

    讀懂單燈控制器工作原理
    的頭像 發(fā)表于 11-11 13:13 ?242次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>讀懂單燈<b class='flag-5'>控制器</b>工作原理

    nginx負載均衡配置介紹

    目錄 nginx負載均衡 nginx負載均衡介紹 反向代理與負載均衡 nginx負載均衡配置 Keepalived高可用nginx負載均衡器 修改Web服務
    的頭像 發(fā)表于 11-10 13:39 ?246次閱讀
    <b class='flag-5'>nginx</b>負載均衡配置介紹

    nginx重啟命令linux步驟是什么?

    ./nginx -s reload 即可   方法二:查找當前nginx進程號,然后輸入命令:kill -HUP 進程號 實現(xiàn)重啟nginx服務   
    發(fā)表于 07-11 17:13

    nginx重啟命令linux步驟是什么?

    ./nginx -s reload 即可   方法二:查找當前nginx進程號,然后輸入命令:kill -HUP 進程號 實現(xiàn)重啟nginx服務   
    發(fā)表于 07-10 16:40

    控制器有哪兩種實現(xiàn)方式?各有何優(yōu)缺點?

    控制器是計算機系統(tǒng)中的個關鍵組件,負責協(xié)調和管理計算機硬件和軟件資源。在不同的應用場景和系統(tǒng)中,控制器實現(xiàn)方式可能會有所不同。以下是兩種常見的
    的頭像 發(fā)表于 06-30 10:33 ?1262次閱讀

    組合邏輯控制器的基本概念、實現(xiàn)原理及設計方法

    組合邏輯控制器(Combinatorial Logic Controller)是種在數(shù)字電路中實現(xiàn)邏輯功能的設備,它根據(jù)輸入信號的當前狀態(tài)來產(chǎn)生輸出信號,而不考慮輸入信號的歷史狀態(tài)。組合邏輯
    的頭像 發(fā)表于 06-30 10:26 ?2099次閱讀

    組合邏輯控制器和硬布線控制器樣嗎

    組合邏輯控制器和硬布線控制器是兩種不同的計算機控制系統(tǒng),它們在設計、實現(xiàn)和應用方面存在些差異。 組合邏輯
    的頭像 發(fā)表于 06-30 10:24 ?875次閱讀

    組合邏輯控制器是用什么實現(xiàn)

    組合邏輯控制器種用于控制和管理復雜系統(tǒng)中各個組件之間交互的邏輯設備。它可以應用于各種領域,如計算機科學、通信、自動化控制等。在這篇文章中,我們將詳細探討組合邏輯
    的頭像 發(fā)表于 06-30 10:11 ?508次閱讀

    控制器的限速線是哪

    景。 控制器限速線的基本概念 控制器是電子系統(tǒng)中用于接收輸入信號并根據(jù)輸入信號控制輸出信號的設備。在許多應用場景中,控制器需要對輸出信號進行限制,以確保系統(tǒng)的穩(wěn)定性和安全性。
    的頭像 發(fā)表于 06-30 10:02 ?1166次閱讀

    運動控制器與plc編程樣嗎

    運動控制器和PLC(可編程邏輯控制器)都是工業(yè)自動化領域中常用的控制設備,但它們在功能、應用場景和編程方式上存在些差異。本文將詳細介紹運動控制器
    的頭像 發(fā)表于 06-12 11:03 ?724次閱讀

    PID控制器與PWM控制器的區(qū)別

    在工業(yè)自動化和控制系統(tǒng)設計中,PID控制器(比例-積分-微分控制器)和PWM控制器(脈沖寬度調制控制器)是兩種常用的
    的頭像 發(fā)表于 06-05 18:25 ?3179次閱讀

    功率因數(shù)校正控制器KA7526英手冊

    電子發(fā)燒友網(wǎng)站提供《功率因數(shù)校正控制器KA7526英手冊.pdf》資料免費下載
    發(fā)表于 03-22 09:48 ?0次下載

    騰訊云和華為云的ingress路徑匹配規(guī)則把我繞暈了

    本文主要調研了Tke的兩類ingress,分別是應用型CLB和Nginx ingress Controller,這兩類ingress在頁面創(chuàng)建時均不支持選擇路徑匹配規(guī)則,而二者關于路徑
    的頭像 發(fā)表于 01-08 15:59 ?951次閱讀
    騰訊云和華為云的<b class='flag-5'>ingress</b>路徑匹配規(guī)則把我繞暈了