日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源

發(fā)布時(shí)間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Kubernetes Ingress 介紹

通常情況下,Kubernetes 集群內(nèi)的網(wǎng)絡(luò)環(huán)境與外部是隔離的,也就是說(shuō) Kubernetes 集群外部的客戶端無(wú)法直接訪問(wèn)到集群內(nèi)部的服務(wù),這屬于不同網(wǎng)絡(luò)域如何連接的問(wèn)題。解決跨網(wǎng)絡(luò)域訪問(wèn)的常規(guī)做法是為目標(biāo)集群引入一個(gè)入口點(diǎn),所有外部請(qǐng)求目標(biāo)集群的流量必須訪問(wèn)這個(gè)入口點(diǎn),然后由入口點(diǎn)將外部請(qǐng)求轉(zhuǎn)發(fā)至目標(biāo)節(jié)點(diǎn)。

同樣,Kubernetes 社區(qū)也是通過(guò)增設(shè)入口點(diǎn)的方案來(lái)解決集群內(nèi)部服務(wù)如何對(duì)外暴露的問(wèn)題。Kubernetes 一貫的作風(fēng)是通過(guò)定義標(biāo)準(zhǔn)來(lái)解決同一類(lèi)問(wèn)題,在解決集群對(duì)外流量管理的問(wèn)題也不例外。Kubernetes 對(duì)集群入口點(diǎn)進(jìn)行了進(jìn)一步的統(tǒng)一抽象,提出了 3 種解決方案:NodePort、LoadBalancer 和 Ingress。下圖是這三種方案的對(duì)比:

通過(guò)以上對(duì)比,我們可以發(fā)現(xiàn),NodePort 和 LoadBalancer 主要工作在四層流量上,只能用于暴露集群中一個(gè)服務(wù)。當(dāng)集群中對(duì)外暴露的服務(wù)數(shù)量增多時(shí),NodePort 方案最終會(huì)因端口耗盡而無(wú)法暴露更多的服務(wù),而 LoadBalancer 方案則會(huì)引入同等數(shù)量的 SLB,在增加成本的同時(shí)也給運(yùn)維帶來(lái)一定的負(fù)擔(dān)。定位在七層流量上的 Ingress 方案可以通過(guò)定義基于虛擬主機(jī)域和路徑的路由規(guī)則來(lái)完成對(duì)集群中服務(wù)的代理,Ingress 與后端服務(wù)是一對(duì)多的關(guān)系,有效的降低了機(jī)器成本。

此外,因?yàn)橥獠吭L問(wèn)集群中服務(wù)的所有入口流量都先經(jīng)過(guò)共享的 Ingress Provider 節(jié)點(diǎn),所以集群管理者可以在 Ingress Provider 中額外實(shí)施訪問(wèn)控制策略來(lái)保證集群中服務(wù)的安全性和穩(wěn)定性,并且可以通過(guò)采集監(jiān)控指標(biāo)、記錄訪問(wèn)日志以及開(kāi)啟鏈路追蹤來(lái)增強(qiáng)可觀測(cè)建設(shè)。因此,目前 Ingress 方案是主流的選擇。

Kubernetes Ingress Provider 介紹

上文提到,Ingress 是 Kubernetes 應(yīng)對(duì)集群管理外部訪問(wèn)流量的場(chǎng)景抽象出來(lái)一個(gè)資源對(duì)象,用來(lái)描述集群外部如何訪問(wèn)集群內(nèi)部服務(wù)的方式。通過(guò) Ingress 資源來(lái)配置不同的轉(zhuǎn)發(fā)規(guī)則,從而達(dá)到根據(jù)不同的規(guī)則設(shè)置外部訪問(wèn)集群內(nèi)不同的 Service 所對(duì)應(yīng)的后端 Pod。Ingress Provider 是真實(shí)存在的 Workload 節(jié)點(diǎn),是真正意義上 Ingress 規(guī)則的實(shí)現(xiàn)者與執(zhí)行者。Kubernetes 提出 Ingress 的規(guī)范,將 Ingress 具體實(shí)現(xiàn)方式交給各種 Provider 以及云提供商,有效保證了 Ingress 不會(huì)被具體的 Provider 或者云廠商綁定,符合 Kubernetes 一直秉承的開(kāi)放、標(biāo)準(zhǔn)的思想。

在云原生技術(shù)浪潮下,Ingress Provider 產(chǎn)品種類(lèi)如雨后春筍般涌現(xiàn),其中用戶知名度最高當(dāng)屬 Kubernetes Nginx Ingress。接下來(lái)會(huì)簡(jiǎn)單介紹一下 Nginx Ingress Controller 和阿里云推出的下一代網(wǎng)關(guān)——MSE Ingress Controller(MSE 云原生網(wǎng)關(guān))。

Nginx Ingress Controller

Nginx Ingress Controller 是由 Kubernetes 官方維護(hù)的,內(nèi)部由 Controller 和數(shù)據(jù)面 Nginx 組成。Nginx Ingress Controller 由用戶部署在 Kubernetes 集群中,通過(guò)訪問(wèn)集群的 API Server 來(lái)實(shí)時(shí)監(jiān)聽(tīng)用戶應(yīng)用到集群中的 Ingress 資源,經(jīng) Controller 解析并轉(zhuǎn)化為 Nginx 配置文件(nginx.conf),然后通過(guò) reload 數(shù)據(jù)面 Nginx 的方式使得配置生效。

當(dāng)外部請(qǐng)求訪問(wèn)集群入口點(diǎn) Nginx Ingress Controller 時(shí),匹配 Nginx Ingress 轉(zhuǎn)發(fā)規(guī)則的流量轉(zhuǎn)發(fā)到后端 Service 所對(duì)應(yīng)的 Pod,由 Pod 處理外部請(qǐng)求,其流程圖如下:

MSE Ingress Controller(MSE 云原生網(wǎng)關(guān))

隨著云原生技術(shù)持續(xù)演進(jìn),云原生應(yīng)用微服務(wù)化不斷深入,Nginx Ingress 在面對(duì)復(fù)雜路由規(guī)則配置、支持多種應(yīng)用層協(xié)議(Dubbo 和 QUIC 等)、服務(wù)訪問(wèn)的安全性以及流量的可觀測(cè)性等問(wèn)題上略顯疲憊。

為了解決用戶對(duì)大規(guī)模流量治理的強(qiáng)烈訴求,MSE 云原生網(wǎng)關(guān)應(yīng)運(yùn)而生,這是阿里云推出的兼容標(biāo)準(zhǔn) Ingress 規(guī)范的下一代網(wǎng)關(guān),具備低成本、安全、高集成和高可用的產(chǎn)品優(yōu)勢(shì)。將傳統(tǒng)的流量網(wǎng)關(guān)和微服務(wù)網(wǎng)關(guān)合并,在降低 50%資源成本的同時(shí)為用戶提供了精細(xì)化的流量治理能力,支持 ACK 容器服務(wù)、Nacos、Eureka、固定地址、FaaS 等多種服務(wù)發(fā)現(xiàn)方式,支持多種認(rèn)證登錄方式快速構(gòu)建安全防線,提供全方面、多視角的監(jiān)控體系,如指標(biāo)監(jiān)控、日志分析以及鏈路追蹤,并且支持解析單、多 Kubernetes 集群模式下的標(biāo)準(zhǔn) Ingress 資源,滿足云原生應(yīng)用場(chǎng)景下以聲明式進(jìn)行統(tǒng)一流量治理的訴求。

MSE Ingress Controller 通過(guò) List-Watch 機(jī)制獲取關(guān)聯(lián)的 ACK 集群中 Ingress 資源的變化,然后以熱更新的方式動(dòng)態(tài)更新 MSE 云原生網(wǎng)關(guān)的路由規(guī)則。當(dāng) MSE 云原生網(wǎng)關(guān)收到請(qǐng)求時(shí),匹配 Ingress 轉(zhuǎn)發(fā)規(guī)則轉(zhuǎn)發(fā)請(qǐng)求到后端 Service 所對(duì)應(yīng)的 Pod。

相比 Nginx Ingress Controller,首先 MSE Ingress Controller 是以熱更新的方式秒級(jí)生效監(jiān)聽(tīng)到的 Ingress 資源,這種無(wú)需重啟數(shù)據(jù)面即可生效配置的方式大大提高了集群入口網(wǎng)關(guān)的穩(wěn)定性,有效保障了業(yè)務(wù)流量無(wú)損。更重要的是,MSE Ingress Controller 可以進(jìn)行多集群管理,即同時(shí)作為多個(gè)集群的入口網(wǎng)關(guān),意味著可以同時(shí)監(jiān)聽(tīng)多個(gè)集群中的 Ingress 資源,解決用戶跨 Kubernetes 集群流量調(diào)度和流量治理問(wèn)題。

下圖是 MSE Ingress Controller 在多 ACK 集群模式下 Ingress 的應(yīng)用場(chǎng)景。

通過(guò) MSE 云原生網(wǎng)關(guān)解析 Ingress

我們將基于 MSE 云原生網(wǎng)關(guān)和阿里云 ACK 產(chǎn)品進(jìn)行實(shí)踐,由云原生網(wǎng)關(guān)解析并執(zhí)行 ACK 集群中定義的 Ingress 資源,完成對(duì)外暴露 ACK 集群中指定服務(wù)。

前提條件
? 已擁有一個(gè) MSE 云原生網(wǎng)關(guān)
? 已擁有一個(gè) ACK 運(yùn)維集群

步驟一:關(guān)聯(lián) ACK 集群并配置監(jiān)聽(tīng) Ingress

  • 在 MSE 云原生網(wǎng)關(guān)控制臺(tái)->服務(wù)管理->來(lái)源管理中,關(guān)聯(lián)對(duì)應(yīng)的 ACK 集群,開(kāi)啟監(jiān)聽(tīng) Kubernetes Ingress 配置,并配置 IngressClass 和監(jiān)聽(tīng)的目標(biāo)命名空間。
  • 步驟二:部署服務(wù)

    創(chuàng)建并拷貝以下內(nèi)容到 httpbin.yaml 文件中,用于部署名稱為 httpbin Deployment,以及名稱為 httpbin 的 Service,然后應(yīng)用到 ACK 集群中。

    apiVersion: v1 kind: Service metadata:name: httpbinlabels:app: httpbinservice: httpbin spec:ports:- name: httpport: 8000targetPort: 80selector:app: httpbin --- apiVersion: apps/v1 kind: Deployment metadata:name: httpbin spec:replicas: 1selector:matchLabels:app: httpbintemplate:metadata:labels:app: httpbinspec:containers:- image: mse-gw-demo-registry.cn-hangzhou.cr.aliyuncs.com/gw/httpbinimagePullPolicy: IfNotPresentname: httpbinports:- containerPort: 80

    步驟三:配置 Ingress

    創(chuàng)建并拷貝以下內(nèi)容到 ingress.yaml 中,然后應(yīng)用到 ACK 集群中。

    ACK 1.19 版本之前

    apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata:name: ingress-demo spec:rules:- host: test.comhttp:paths:- path: /ipbackend:serviceName: httpbinservicePort: 800 ACK 1.19 及之后版本 apiVersion: networking.k8s.io/v1 kind: Ingress metadata:name: ingress-demo spec:rules:- host: test.comhttp:paths:- path: /ipbackend:service:name: httpbinport:number: 8000pathType: Exact

    步驟四:訪問(wèn)服務(wù)

    在 MSE 云原生網(wǎng)關(guān)控制臺(tái)的基本信息查看網(wǎng)關(guān) IP 地址。

    通過(guò)以下命令行測(cè)試訪問(wèn)服務(wù)。

    curl -H "host: test.com" 47.97.127.61/ip

    預(yù)期結(jié)果:

    {"origin": "x.x.x.x" }

    步驟五:查看域名、路由相關(guān)配置

    我們可以在 MSE 云原生網(wǎng)關(guān)控制臺(tái)查看已監(jiān)聽(tīng)的域名和路由相關(guān)的配置,例如,上述 ingress.yaml 在云原生網(wǎng)關(guān)控制臺(tái)的解析結(jié)果。

    域名管理如下:

    路由管理如下:

    總結(jié)

    以上是生活随笔為你收集整理的无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。