<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

什么是Ingress?Igress對外訪問的三種方案

阿銘linux ? 來源:阿銘linux ? 2023-04-28 14:22 ? 次閱讀

什么是Ingress

有了Service之后,我們可以訪問這個Service的IP(clusterIP)來請求對應的Pod,但是這只能是在集群內部訪問。 要想讓外部用戶訪問此資源,可以使用NodePort,即在node節點上暴漏一個端口出來,但是這個非常不靈活。為了解決此問題,K8s引入了一個新的API資源對象Ingress,它是一個七層的負載均衡器,類似于Nginx。

98bd8d22-e57a-11ed-ab56-dac502259ad0.png

三個核心概念:Ingress、Ingress Controller、IngressClass

Ingress用來定義具體的路由規則,要實現什么樣的訪問效果;

Ingress Controller是實現Ingress定義具體規則的工具或者叫做服務,在K8s里就是具體的Pod;

IngressClass是介于Ingress和Ingress Controller之間的一個協調者,它存在的意義在于,當有多個Ingress Controller時,可以讓Ingress和Ingress Controller彼此獨立,不直接關聯,而是通過IngressClass實現關聯。

Ingress實戰

1)編輯ingress YAML文件

vimying.yaml#內容如下
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mying  ##ingress名字


spec:
  ingressClassName: myingc  ##定義關聯的IngressClass


  rules:  ##定義具體的規則
  - host: aminglinux.com  ##訪問的目標域名
    http:
      paths:
      - path: /
        pathType: Exact
        backend:  ##定義后端的service對象
          service:
            name: ngx-svc
            port:
              number: 80
查看ingress
kubectl get ing
kubectl describe ing mying
2)編輯IngressClass YAML文件
vimyingc.yaml#內容如下
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name:myingc


spec:
  controller: nginx.org/ingress-controller  ##定義要使用哪個controller
查看ingressClass
kubectl get ingressclass

3)安裝ingress-controller

首先做一下前置工作

curl -O 'https://gitee.com/aminglinux/linux_study/raw/master/k8s/ingress.tar.gz'
tar zxf ingress.tar.gz
cd ingress
./setup.sh  ##說明,執行這個腳本會部署幾個ingress相關資源,包括namespace、configmap、secrect等
編輯controller YAML文件
vi  ingress-controller.yaml #內容如下
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ngx-ing
namespace:nginx-ingress


spec:
  replicas: 1
  selector:
    matchLabels:
app:ngx-ing


  template:
    metadata:
      labels:
        app: ngx-ing
     #annotations:
       #prometheus.io/scrape: "true"
       #prometheus.io/port: "9113"
       #prometheus.io/scheme: http
    spec:
      serviceAccountName: nginx-ingress
      containers:
      - image: nginx/nginx-ingress:2.2-alpine
        imagePullPolicy: IfNotPresent
        name: ngx-ing
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443
        - name: readiness-port
          containerPort: 8081
        - name: prometheus
          containerPort: 9113
        readinessProbe:
          httpGet:
            path: /nginx-ready
            port: readiness-port
          periodSeconds: 1
        securityContext:
          allowPrivilegeEscalation: true
          runAsUser: 101 #nginx
          capabilities:
            drop:
            - ALL
            add:
            - NET_BIND_SERVICE
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        args:
          - -ingress-class=myingc
          - -health-status
          - -ready-status
--nginx-status


          - -nginx-configmaps=$(POD_NAMESPACE)/nginx-config
          - -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret
應用YAML
kubectl apply -f ingress-controller.yaml
查看pod、deployment:
kubectl get po -n nginx-ingress
kubectl get deploy -n nginx-ingress
將ingress對應的pod端口映射到master上臨時測試:
kubectl port-forward -n nginx-ingress ngx-ing-547d6575c7-fhdtt 8888:80 &
注意,測試前可以修改ng-deploy對應的兩個pod里的/usr/share/nginx/html/index.html文件內容,用于區分兩個pod。 使用curl測試:
curl -x127.0.0.1:8888 aminglinux.com
或者:
curl -H 'Host:aminglinux.com' http://127.0.0.1:8888
Igress對外訪問的三種方案

上面對ingress做端口映射,然后通過其中一個節點的IP來訪問ingress只是一種臨時方案。那么正常如何做呢?有三種常用的方案:

1)Deployment+LoadBalancer

如果要把ingress部署在公有云,那用這種方式比較合適。用Deployment部署ingress-controller,創建一個type為LoadBalancer的service關聯這組pod。 大部分公有云,都會為LoadBalancer的service自動創建一個負載均衡器,通常還綁定了公網地址。 只要把域名解析指向該地址,就實現了集群服務的對外暴露。

2)Deployment+NodePort

同樣用deployment模式部署ingress-controller,并創建對應的服務,但是type為NodePort。這樣,ingress就會暴露在集群節點ip的特定端口上。 由于nodeport暴露的端口是隨機端口,一般會在前面再搭建一套負載均衡器來轉發請求。該方式一般用于宿主機是相對固定的環境ip地址不變的場景。 NodePort方式暴露ingress雖然簡單方便,但是NodePort多了一層NAT,在請求量級很大時可能對性能會有一定影響。

3)DaemonSet+nodeSelector

用DaemonSet結合nodeselector來部署ingress-controller到特定的node上,然后使用HostNetwork直接把該pod與宿主機node的網絡打通(如,上面的臨時方案kubectl port-forward),直接使用宿主機的80/433端口就能訪問服務。 這時,ingress-controller所在的node機器就很類似傳統架構的邊緣節點,比如機房入口的nginx服務器。該方式整個請求鏈路最簡單,性能相對NodePort模式更好。 缺點是由于直接利用宿主機節點的網絡和端口,一個node只能部署一個ingress-controller pod。比較適合大并發的生產環境使用。





審核編輯:劉清

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

    關注

    0

    文章

    136

    瀏覽量

    12019
  • YAML
    +關注

    關注

    0

    文章

    21

    瀏覽量

    2285
  • 負載均衡器
    +關注

    關注

    0

    文章

    18

    瀏覽量

    2556

原文標題:一篇文章助你搞懂Ingress

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Kubernetes Ingress 高可靠部署最佳實踐

    在Kubernetes集群中,Ingress是授權入站連接到達集群服務的規則集合,為您提供七層負載均衡能力,您可以通過 Ingress 配置提供外部可訪問的 URL、負載均衡、SSL、基于名稱的虛擬主機等。作為集群流量
    發表于 04-17 14:35

    SRAM的基礎模塊存有三種情況

    介紹的是關于SRAM的基礎模塊存有三種情況:standby(空余),read(讀)和write(寫)。 第一情況:standby假如WL沒有選為上拉電阻,那么M5和M62個做為操縱用的晶體極管處在
    發表于 09-02 11:56

    SRAM的基礎模塊存有三種情況分析

    介紹的是關于SRAM的基礎模塊存有三種情況:standby(空余),read(讀)和write(寫)。
    發表于 12-28 06:17

    三種調整處理器系統功耗的方法分享

    Teledyne e2v為系統設計師提供的定制方案處理器功耗的背景知識三種調整處理器系統功耗的方法
    發表于 01-01 06:04

    三種訪問過程映像的方法

    硬實時的需求。用戶可以通過python等高級語言編寫程序,并且可以通過存儲器中的過程映像便捷的寫入或者讀取所有當前過程值。本文將介紹從過程映像中訪問數據的三種方法:直接從文件中讀取、ioctl以及
    發表于 02-02 16:40

    分享三種硬件方案助力網絡系統安全

    分享三種硬件方案助力網絡系統安全
    發表于 05-19 06:34

    主流的三種RF方案及其優缺點對比分析

    主流的三種RF方案及其優缺點對比分析RF IC的主要性能是什么?
    發表于 05-25 06:34

    常見的三種無線接入方式是什么?

    藍牙無線組網的優點是什么?常見的三種無線接入方式是什么?藍牙無線組網原理與上網方案分享
    發表于 05-26 06:33

    STM32有三種啟動模式

    01STM32的三種啟動模式STM32有三種啟動模式:FLASH啟動、SRAM啟動和系統存儲器啟動,通常三種啟動方式由外部引腳boot0和boot1的電平決定。每個系列boot0和boot1電平對應
    發表于 08-18 07:52

    STM32的三種boot模式介紹

    淺識STM32的三種boot模式文章目錄淺識STM32的三種boot模式任務摘要一、認識boot1.三種BOOT模式介紹2.開發BOOT模式選擇3.STM32三種啟動模式4.
    發表于 12-10 07:46

    如何使用三種方式進行文件的創建

    ,使用文本編輯器進行創建,使用重定向符號進行創建,接下來就演示如何使用這三種方式進行文件的創建。使用touch命令進行文件創建touch命令最初的作用是對文件的“訪問時間”或“修改時間”進行修改,...
    發表于 12-15 08:42

    STM32的三種Boot模式的差異

    如有錯誤,歡迎指正,謝謝!目錄一、STM32的三種Boot模式的差異二、創建基于MDK創建純匯編語言的STM32工程模板、匯編基本語法的學習四、編程練習一、STM32的三種Boot模式的差異參考自
    發表于 12-20 07:54

    記錄三種DMA模式

    串口模式實現有三種1.普通模式:在主函數中接收函數2.中斷模式:產生的不影響主程序運行3. DMA模式:與主函數互不影響,獨立運行本文記錄三種DMA模式。
    發表于 02-28 07:54

    阿里云Serverless Kubernetes通過Ingress提供7層服務訪問

    摘要:?在阿里云Serverless Kubernetes集群中,我們可以通過LoadBalancer Service對外提供四層服務訪問,同樣我們也可以通過Ingress對外提供七
    發表于 07-23 14:02 ?1688次閱讀
    阿里云Serverless Kubernetes通過<b class='flag-5'>Ingress</b>提供7層服務<b class='flag-5'>訪問</b>

    APISIX Ingress VS Ingress NGINX詳細對比

    下列表格中,對比了 Ingress NGINX 和 APISIX Ingress 基本功能,包括協議支持、鑒權方式、上游探針/策略、負載均衡策略、Kubenertes 集成等。以下表格數據取自learnk8s.io。
    的頭像 發表于 01-11 15:31 ?826次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>