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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是Ingress?Igress對(duì)外訪問(wèn)的三種方案

阿銘linux ? 來(lái)源:阿銘linux ? 2023-04-28 14:22 ? 次閱讀

什么是Ingress

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

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

三個(gè)核心概念:Ingress、Ingress Controller、IngressClass

Ingress用來(lái)定義具體的路由規(guī)則,要實(shí)現(xiàn)什么樣的訪問(wèn)效果;

Ingress Controller是實(shí)現(xiàn)Ingress定義具體規(guī)則的工具或者叫做服務(wù),在K8s里就是具體的Pod;

IngressClass是介于Ingress和Ingress Controller之間的一個(gè)協(xié)調(diào)者,它存在的意義在于,當(dāng)有多個(gè)Ingress Controller時(shí),可以讓Ingress和Ingress Controller彼此獨(dú)立,不直接關(guān)聯(lián),而是通過(guò)IngressClass實(shí)現(xiàn)關(guān)聯(lián)。

Ingress實(shí)戰(zhàn)

1)編輯ingress YAML文件

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


spec:
  ingressClassName: myingc  ##定義關(guān)聯(lián)的IngressClass


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


spec:
  controller: nginx.org/ingress-controller  ##定義要使用哪個(gè)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  ##說(shuō)明,執(zhí)行這個(gè)腳本會(huì)部署幾個(gè)ingress相關(guān)資源,包括namespace、configmap、secrect等
編輯controller YAML文件
vi  ingress-controller.yaml #內(nèi)容如下
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
應(yīng)用YAML
kubectl apply -f ingress-controller.yaml
查看pod、deployment:
kubectl get po -n nginx-ingress
kubectl get deploy -n nginx-ingress
將ingress對(duì)應(yīng)的pod端口映射到master上臨時(shí)測(cè)試:
kubectl port-forward -n nginx-ingress ngx-ing-547d6575c7-fhdtt 8888:80 &
注意,測(cè)試前可以修改ng-deploy對(duì)應(yīng)的兩個(gè)pod里的/usr/share/nginx/html/index.html文件內(nèi)容,用于區(qū)分兩個(gè)pod。 使用curl測(cè)試:
curl -x127.0.0.1:8888 aminglinux.com
或者:
curl -H 'Host:aminglinux.com' http://127.0.0.1:8888
Igress對(duì)外訪問(wèn)的三種方案

上面對(duì)ingress做端口映射,然后通過(guò)其中一個(gè)節(jié)點(diǎn)的IP來(lái)訪問(wèn)ingress只是一種臨時(shí)方案。那么正常如何做呢?有三種常用的方案:

1)Deployment+LoadBalancer

如果要把ingress部署在公有云,那用這種方式比較合適。用Deployment部署ingress-controller,創(chuàng)建一個(gè)type為L(zhǎng)oadBalancer的service關(guān)聯(lián)這組pod。 大部分公有云,都會(huì)為L(zhǎng)oadBalancer的service自動(dòng)創(chuàng)建一個(gè)負(fù)載均衡器,通常還綁定了公網(wǎng)地址。 只要把域名解析指向該地址,就實(shí)現(xiàn)了集群服務(wù)的對(duì)外暴露。

2)Deployment+NodePort

同樣用deployment模式部署ingress-controller,并創(chuàng)建對(duì)應(yīng)的服務(wù),但是type為NodePort。這樣,ingress就會(huì)暴露在集群節(jié)點(diǎn)ip的特定端口上。 由于nodeport暴露的端口是隨機(jī)端口,一般會(huì)在前面再搭建一套負(fù)載均衡器來(lái)轉(zhuǎn)發(fā)請(qǐng)求。該方式一般用于宿主機(jī)是相對(duì)固定的環(huán)境ip地址不變的場(chǎng)景。 NodePort方式暴露ingress雖然簡(jiǎn)單方便,但是NodePort多了一層NAT,在請(qǐng)求量級(jí)很大時(shí)可能對(duì)性能會(huì)有一定影響。

3)DaemonSet+nodeSelector

用DaemonSet結(jié)合nodeselector來(lái)部署ingress-controller到特定的node上,然后使用HostNetwork直接把該pod與宿主機(jī)node的網(wǎng)絡(luò)打通(如,上面的臨時(shí)方案kubectl port-forward),直接使用宿主機(jī)的80/433端口就能訪問(wèn)服務(wù)。 這時(shí),ingress-controller所在的node機(jī)器就很類(lèi)似傳統(tǒng)架構(gòu)的邊緣節(jié)點(diǎn),比如機(jī)房入口的nginx服務(wù)器。該方式整個(gè)請(qǐng)求鏈路最簡(jiǎn)單,性能相對(duì)NodePort模式更好。 缺點(diǎn)是由于直接利用宿主機(jī)節(jié)點(diǎn)的網(wǎng)絡(luò)和端口,一個(gè)node只能部署一個(gè)ingress-controller pod。比較適合大并發(fā)的生產(chǎn)環(huán)境使用。





審核編輯:劉清

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

    關(guān)注

    0

    文章

    142

    瀏覽量

    12154
  • YAML
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    2311
  • 負(fù)載均衡器
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    2573

原文標(biāo)題:一篇文章助你搞懂Ingress

文章出處:【微信號(hào):aming_linux,微信公眾號(hào):阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Kubernetes Ingress 高可靠部署最佳實(shí)踐

    在Kubernetes集群中,Ingress是授權(quán)入站連接到達(dá)集群服務(wù)的規(guī)則集合,為您提供七層負(fù)載均衡能力,您可以通過(guò) Ingress 配置提供外部可訪問(wèn)的 URL、負(fù)載均衡、SSL、基于名稱(chēng)的虛擬主機(jī)等。作為集群流量
    發(fā)表于 04-17 14:35

    三種訪問(wèn)過(guò)程映像的方法

    硬實(shí)時(shí)的需求。用戶可以通過(guò)python等高級(jí)語(yǔ)言編寫(xiě)程序,并且可以通過(guò)存儲(chǔ)器中的過(guò)程映像便捷的寫(xiě)入或者讀取所有當(dāng)前過(guò)程值。本文將介紹從過(guò)程映像中訪問(wèn)數(shù)據(jù)的三種方法:直接從文件中讀取、ioctl以及
    發(fā)表于 02-02 16:40

    常見(jiàn)的三種無(wú)線接入方式是什么?

    藍(lán)牙無(wú)線組網(wǎng)的優(yōu)點(diǎn)是什么?常見(jiàn)的三種無(wú)線接入方式是什么?藍(lán)牙無(wú)線組網(wǎng)原理與上網(wǎng)方案分享
    發(fā)表于 05-26 06:33

    三種電源方案

    三種電源方案   電源+充電線路方案               &
    發(fā)表于 11-13 15:05 ?1091次閱讀

    三種3D眼鏡解決方案

    介紹了三種3D眼鏡解決方案,MSP430方案,TPS65835方案,射頻穿梭3D電視眼鏡。
    發(fā)表于 09-14 10:23 ?36次下載
    <b class='flag-5'>三種</b>3D眼鏡解決<b class='flag-5'>方案</b>

    阿里云Serverless Kubernetes通過(guò)Ingress提供7層服務(wù)訪問(wèn)

    摘要:?在阿里云Serverless Kubernetes集群中,我們可以通過(guò)LoadBalancer Service對(duì)外提供四層服務(wù)訪問(wèn),同樣我們也可以通過(guò)Ingress來(lái)對(duì)外提供七
    發(fā)表于 07-23 14:02 ?1764次閱讀
    阿里云Serverless Kubernetes通過(guò)<b class='flag-5'>Ingress</b>提供7層服務(wù)<b class='flag-5'>訪問(wèn)</b>

    訪問(wèn)集成Xilinx模數(shù)轉(zhuǎn)換器的三種方法介紹

    了解訪問(wèn)集成Xilinx模數(shù)轉(zhuǎn)換器(XADC)的三種方法; 通過(guò)直接連接到PS,作為PS或Microblaze的AXI外設(shè),或作為邏輯的IP核。
    的頭像 發(fā)表于 11-20 06:16 ?2621次閱讀

    三種pads解決方案的對(duì)比

    三種墊解決方案交付核心能力來(lái)加速你的設(shè)計(jì)周期,提高生產(chǎn)率,提高質(zhì)量。了解每個(gè)解決方案當(dāng)你開(kāi)始你的比較過(guò)程。
    的頭像 發(fā)表于 10-30 07:06 ?3425次閱讀

    C語(yǔ)言訪問(wèn)MCU寄存器的三種方式

    C語(yǔ)言訪問(wèn)MCU寄存器的三種方式 MCU中的特殊功能寄存器SFR,實(shí)際上就是SRAM地址已經(jīng)確定的SRAM單元,在C語(yǔ)言環(huán)境下對(duì)其訪問(wèn)歸納起來(lái)有3方法。
    發(fā)表于 10-28 17:21 ?11次下載
    C語(yǔ)言<b class='flag-5'>訪問(wèn)</b>MCU寄存器的<b class='flag-5'>三種</b>方式

    刺激能量收集發(fā)展的三種解決方案

    新技術(shù)星期二:刺激能量收集發(fā)展的三種解決方案
    的頭像 發(fā)表于 12-30 09:40 ?540次閱讀

    《中新社》關(guān)注“本源悟空”境外訪問(wèn)量美國(guó)排第一

    走進(jìn)本源量子計(jì)算機(jī)組裝與測(cè)試實(shí)驗(yàn)室,中國(guó)第代自主超導(dǎo)量子計(jì)算機(jī)“本源悟空”正伴隨著機(jī)器運(yùn)行的嗡鳴聲,運(yùn)算來(lái)自世界各地的量子計(jì)算任務(wù)。據(jù)介紹,在“本源悟空”的境外訪問(wèn)
    的頭像 發(fā)表于 07-06 08:22 ?251次閱讀
    《中新社》關(guān)注“本源悟空”境<b class='flag-5'>外訪問(wèn)</b>量美國(guó)排第一

    從零到一:構(gòu)建高效穩(wěn)定的HTTP海外訪問(wèn)策略

    在當(dāng)今全球化的互聯(lián)網(wǎng)時(shí)代,無(wú)論是企業(yè)拓展海外市場(chǎng),還是個(gè)人追求更廣闊的信息視野,高效穩(wěn)定的HTTP海外訪問(wèn)策略都顯得尤為重要。
    的頭像 發(fā)表于 09-24 08:03 ?174次閱讀

    探索HTTP海外訪問(wèn)的奧秘:解鎖全球互聯(lián)網(wǎng)資源

    探索HTTP海外訪問(wèn)的奧秘,實(shí)際上是在揭開(kāi)如何高效、安全地解鎖全球互聯(lián)網(wǎng)資源的面紗。
    的頭像 發(fā)表于 09-24 08:11 ?217次閱讀

    優(yōu)化HTTP海外訪問(wèn):技術(shù)挑戰(zhàn)與解決方案

    優(yōu)化HTTP海外訪問(wèn)需要從多個(gè)方面入手,包括使用CDN加速、部署代理服務(wù)器或VPN、優(yōu)化網(wǎng)絡(luò)路由、采用高效的網(wǎng)絡(luò)協(xié)議、加強(qiáng)數(shù)據(jù)安全與隱私保護(hù)以及選擇可靠的云服務(wù)提供商等。
    的頭像 發(fā)表于 09-25 08:08 ?207次閱讀

    HTTP海外訪問(wèn)優(yōu)化:提升跨國(guó)網(wǎng)絡(luò)性能的秘訣

    HTTP海外訪問(wèn)優(yōu)化是提升跨國(guó)網(wǎng)絡(luò)性能的關(guān)鍵,涉及多個(gè)方面的技術(shù)和策略。
    的頭像 發(fā)表于 10-15 08:04 ?255次閱讀