<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          這篇文章教你看明白 nginx-ingress 控制器

          共 6231字,需瀏覽 13分鐘

           ·

          2021-09-27 19:22

          點(diǎn)擊上方 藍(lán)字關(guān)注我們




          主機(jī) Nginx

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

          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,就是所謂的具體的服務(wù),比如 order 訂單服務(wù)。

          pod nginx-ingress

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

          1、Pod

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

          controller:和kubernetes api通訊實(shí)時更新nginx配置(就是ingress yaml資源了) nginx:正常的反向代理

          與主機(jī)nginx的區(qū)別是,該pod nginx-ingress是運(yùn)行在pod里。主機(jī)在定義反向代理配置文件時,需要監(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

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

          2、ingress 資源

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

          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ā)送到內(nèi)部order服務(wù)的80端口上。接下來我們看pod(nginx-ingress)如何把ingress資源轉(zhuǎn)化為該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; # 對應(yīng)ingress 資源 name: order
              }
          }

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

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

          upstream order{
              server order:80;
          }

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

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

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

          • create一個service,該service暴漏nodePort
          • forward 映射

          我們一般采用第一種。

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

          4、nginx-ingress工作流程

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

          作者:dakesolo

          鏈接:https://juejin.cn/post/6844903957479817230

          Linux命令查詢工具

          有收獲,點(diǎn)個在看 

          瀏覽 36
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  婷婷在线观看免费 | 日本一级黄 | 高跟鞋少妇一级A片 | 做爱www | 77777亚洲和欧洲视频在线观看 |