亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-11-11 17:46:39 來源:億速云 閱讀:1038 作者:小新 欄目:開發技術

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

1、Ingress-nginx 介紹


1.1、Ingress-nginx 組成

nginx-ingress-controller:Kubernetes 入口控制器,通過 ingress-nginx 能夠實現基本的負載均衡、證書卸載、會話加密以及 URL 重寫等功能;

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

1.2、Ingress-nginx 工作原理

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

1.3、Ingress-nginx 作用

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

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

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

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

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

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

生產環境高可用 Kubernetes 部署架構,如下圖所示; LB 可以通過 nginx 實現,也可以通過 HA + keepalive 實現,具體請根據使用場景選擇,Ingress 統一集中集群中的 Service 對外提供服務。當然我們也可以直接使用 Ingress 對外提供服務。

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

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

3.1、鏡像制作

靜態頁面放到 nginx 某個目錄下面,通過 nginx 實現靜態頁面的訪問功能。具體 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 實現,所以你可以直接在 Ingress 資源對象中寫 nginx 配置,如果需要增加或者實現 nginx 中的功能可以通過添加 annotations 實現,具體可以參考:

    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

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

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

    4、總結

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

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

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

    感謝你能夠認真閱讀完這篇文章,希望小編分享使用ingress-nginx進行前后端分離的示例內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    永胜县| 大竹县| 普兰店市| 汝城县| 日土县| 会同县| 梧州市| 阜阳市| 五家渠市| 福贡县| 大同县| 临洮县| 静安区| 师宗县| 五峰| 金寨县| 嘉禾县| 陇川县| 甘德县| 开原市| 铁力市| 怀仁县| 常熟市| 蕲春县| 平武县| 东乌| 赣州市| 武清区| 富裕县| 屏东县| 呈贡县| 同心县| 资溪县| 巴彦淖尔市| 清涧县| 常宁市| 新平| 汕头市| 蛟河市| 绵竹市| 秦皇岛市|