欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

使用ingress-nginx進行前后端分離的示例-創(chuàng)新互聯(lián)

這篇文章主要介紹了使用ingress-nginx進行前后端分離的示例,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)公司主營泰興網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,App定制開發(fā),泰興h5重慶小程序開發(fā)搭建,泰興網(wǎng)站營銷推廣歡迎泰興等地區(qū)企業(yè)咨詢

1、Ingress-nginx 介紹


1.1、Ingress-nginx 組成


nginx-ingress-controller:Kubernetes 入口控制器,通過 ingress-nginx 能夠?qū)崿F(xiàn)基本的負載均衡、證書卸載、會話加密以及 URL 重寫等功能;


ingress 資源對象:能夠?qū)?nginx 配置抽象成 Ingress 對象,每添加一個Service,只需要添加相應(yīng)的 Ingress 規(guī)則,添加完成后,nginx-ingress-controller 通過 lua reload 配置,使其自動生效。


1.2、Ingress-nginx 工作原理

Ingress 通過跟 Kubernetes ApiServer 交互,動態(tài)感知 ingress 集群規(guī)則的變化;讀取規(guī)則,動態(tài)生成相應(yīng)的 nginx 配置文件,并把配置寫到 nginx-ingress-controller 的 Pod 里面,Pod 里面運行著 nginx 服務(wù),最終把配置寫到 nginx.conf 中;最后動態(tài) reload 配置,使其自動生效。簡單理解就是原先需要修改 Nginx 配置,然后配置不同的轉(zhuǎn)發(fā)規(guī)則到 Service 這個過程抽象出來變成一個 Ingress 對象,后續(xù) Nginx 的變更再通過 Ingress Controller 與 Kubernetes API 交互,動態(tài)的去感知集群中 Ingress 規(guī)則變化,再寫到 Nginx Pod 里。

1.3、Ingress-nginx 作用

在此之前,曾經(jīng)總結(jié)過 Kubernetes Service 資源類型 Kubernetes里的Service究竟是如何工作的呢?通常情況下,我們會定義一個 Service 來管理一組 Pod 暴露相關(guān)的服務(wù),如果要對外暴露服務(wù)的話,只需要定義相應(yīng)的端口即可(NodePort模式),但每增加一個服務(wù),就需要定義了一個 Service 對象并暴露服務(wù)的話就需要配置很多端口,不僅后續(xù)維護起來就會變的很復(fù)雜,而且會存在一定的安全性隱患,所以 Kubernetes 中還使用了 Ingress 的機制,比如使用 Nginx 綁定一個固定端口 80,后續(xù)的請求通過轉(zhuǎn)發(fā)到 Service 即可。這樣如果每次新增服務(wù)的話,只需要修改 Ingress 資源對象即可。具體配置見如下示例:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress
spec:
  tls:
  - hosts:
    - cafe.example.com
      secretName: cafe-secret
  rules:
    - host: cafe.example.com
      http:
        paths:
        - path: /tea
          backend:
            serviceName: tea-svc
            servicePort: 80
        - path: /coffee
          backend:
             serviceName: coffee-svc
             servicePort: 80

2、Ingress-nginx 安裝

其安裝非常簡單,執(zhí)行一條命令即可,具體可以參考:


https://github.com/kubernetes/ingress-nginx/blob/nginx-0.28.0/docs/deploy/index.md

因為鏡像需要外網(wǎng)下載,可能會出現(xiàn)鏡像下載失敗的問題,可以通過在daemon.json 中添加如下代理完成鏡像下載。

{
  "registry-mirrors": [
        "https://1nj0zren.mirror.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn",
        "http://f1361db2.m.daocloud.io"
  ]
}

3、前后端分離項目使用示例

生產(chǎn)環(huán)境高可用 Kubernetes 部署架構(gòu),如下圖所示; LB 可以通過 nginx 實現(xiàn),也可以通過 HA + keepalive 實現(xiàn),具體請根據(jù)使用場景選擇,Ingress 統(tǒng)一集中集群中的 Service 對外提供服務(wù)。當(dāng)然我們也可以直接使用 Ingress 對外提供服務(wù)。


使用ingress-nginx進行前后端分離的示例

毋庸置疑,動態(tài)服務(wù)部署在 Kubernetes 集群中,但靜態(tài)頁面卻有多種選擇,可以放在 Ingress 中實現(xiàn)動態(tài)調(diào)度和灰度發(fā)布,也可以放在 LB、甚至 CDN 上提高靜態(tài)文件加載速度,提升用戶體驗。放在 LB 上,用法和原生使用一樣,這里不在過多介紹。下面主要介紹如何放在 Ingress 上實現(xiàn)動靜分離和反向代理。


3.1、鏡像制作


靜態(tài)頁面放到 nginx 某個目錄下面,通過 nginx 實現(xiàn)靜態(tài)頁面的訪問功能。具體 dockerfile 如下所示:


From docker.harbou.com/base/nginx:1.6.2

MAINTAINER  <slj@qq.com>

ADD web.tar.gz  /home/web/

ADD nginx.conf  /usr/nginx/conf/http_vhost/

    3.2、前端k8s yaml 文件編寫

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web
      template:
        metadata:
         labels:
          app: web
        spec:
          containers:
          - name: web
            image: docker.habour.com/base/web:2020
            ports:
            - containerPort: 80
            volumeMounts:
              - mountPath: /etc/localtime
                name: date-conf
              - mountPath: /usr/nginx/logs/
                name: nginx-vol-logs
          volumes:
          - name: date-conf
            hostPath:
              path: /etc/localtime
          - name: nginx-vol-logs
            hostPath:
              path: /home/logs/nginx/
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: web
      labels:
        app: web
    spec:
      ports:
      - name: http
        port: 80
        targetPort: 80
      selector:
        app: web

    3.3、后端k8s yaml 文件編寫


    后端 yaml 文件這里不是重點,為了不影響閱讀,省略不必要的部分。


    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment
    spec:
      selector:
        matchLabels:
          app: cluster
      replicas: 2
      template:
        metadata:
          labels:
            app: cluster
        spec:
          initContainers:
    ..........
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tomcat-service
      labels:
        app: tomcat-service
    spec:
      ports:
      - name: http
        port: 80
        targetPort: 8080
      selector:
        app: cluster

    3.4、Ingress-nginx yaml 文件編寫


    因為 Ingress 核心是基于 nginx 實現(xiàn),所以你可以直接在 Ingress 資源對象中寫 nginx 配置,如果需要增加或者實現(xiàn) nginx 中的功能可以通過添加 annotations 實現(xiàn),具體可以參考:


    https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: http-test
      namespace: default
      annotations:
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
        nginx.ingress.kubernetes.io/use-regex: "true"
    spec:
      tls:
        - hosts:
          - docker.test.com
          secretName: tls-secret
      rules:
      - host: docker.test.com
        http:
          paths:
          - path: /soaw/(.*\.(html|htm|js|css|ico|png|jpg|gif|ipa|apk|eot|svg|ttf|woff|woff2))$
            backend:
              serviceName: web
              servicePort: 80
          - path: /soaw
            backend:
              serviceName: tomcat-service
              servicePort: 80

    通過如上的配置可以實現(xiàn),前端頁面路由到 nginx 中,而動態(tài)服務(wù)路由到后端動態(tài) svc 中,從而實現(xiàn)動靜分離,注意如下配置是重點。

        nginx.ingress.kubernetes.io/use-regex: "true"

    4、總結(jié)

    本文主要講解了兩個知識點:

    第一 、Ingress 這個概念在 Kubernetes 中到底是怎樣一種存在,正如本文所介紹的,Ingress 實際上就是對 Kubernetes 反向代理的一種抽象,Ingress 工作在七層,Service 工作在四層,所以如果你想在 Kubernetes 集群中完成 Http 相關(guān)的操作時,都必須借助類似 ingress 資源對象來完成。


    第二、如何通過 Ingress 完成動靜分離,這一部分可能不同的人看到都會有不同的疑問,eg 我的靜態(tài)頁面一直都沒有分離,跟我的動態(tài)服務(wù)放在一起(tomcat webapps 文件夾)。這種情況下,沒有特殊需求的話,暫時可以不用考慮 ingress 動靜分離,只需要提供一個后端 svc 即可。本文說的主要是針對前后端分離的項目;如果你的前端靜態(tài)頁面不涉及到灰度發(fā)布的功能,可以放在最前端 CDN 上,提升用戶體驗;如果需要考慮灰度發(fā)布的功能,建議把靜態(tài)頁面打成鏡像,通過 nginx pod 實現(xiàn)靜態(tài)頁面訪問功能;因為 Kubernetes 調(diào)度不是人為能夠預(yù)想到的,所以不建議使用靜態(tài)頁面掛載。可能你會說,我可以通過文件共享,比如 ceph、nfs等,把靜態(tài)頁面放在共享存儲中訪問,如果動態(tài)共享存儲出現(xiàn)問題,那么將帶來一系列的問題,而通過使用 deployment 管理靜態(tài)頁面,出現(xiàn)問題后,Kubernetes 能夠進行有效監(jiān)控和故障轉(zhuǎn)移,在一定程度上降低出錯幾率。當(dāng)然仁者見仁智者見智,具體還要根據(jù)使用場景進行評估和選擇。

    感謝你能夠認真閱讀完這篇文章,希望小編分享使用ingress-nginx進行前后端分離的示例內(nèi)容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,詳細的解決方法等著你來學(xué)習(xí)!

    當(dāng)前題目:使用ingress-nginx進行前后端分離的示例-創(chuàng)新互聯(lián)
    標(biāo)題鏈接:http://chinadenli.net/article10/cdosdo.html

    成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站建站公司做網(wǎng)站品牌網(wǎng)站建設(shè)網(wǎng)站內(nèi)鏈標(biāo)簽優(yōu)化

    廣告

    聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

    商城網(wǎng)站建設(shè)