自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Gateway API 用什么方式來管理 Kubernetes 中的流量

開發(fā) 前端
Kubernetes Gateway API 通過引入標(biāo)準(zhǔn)化的、Kubernetes 原生框架來管理流量,從而解決了這些挑戰(zhàn)。它旨在擴(kuò)展和改進(jìn) Ingress,支持高級路由、強(qiáng)大的負(fù)載均衡、增強(qiáng)的安全性和多租戶;所有這些都原生支持 Kubernetes 聲明式配置。

在 Kubernetes 中,流量管理可能相當(dāng)復(fù)雜,尤其是當(dāng)現(xiàn)代應(yīng)用由多個(gè)服務(wù)組成時(shí),如前端、API 和后端分布在混合和多云環(huán)境中。隨著這些環(huán)境的擴(kuò)展,確保服務(wù)之間的安全、高效和可靠通信變得越來越困難。

傳統(tǒng)方法通常涉及結(jié)合使用 Ingress 進(jìn)行路由、NGINX 進(jìn)行負(fù)載均衡和 NetworkPolicies 進(jìn)行安全保障。雖然有效,但這種分散的設(shè)置可能會帶來運(yùn)營挑戰(zhàn),例如管理多個(gè)配置、確保工具之間的一致性、在動態(tài)環(huán)境中擴(kuò)展以及維護(hù)統(tǒng)一的安全策略。這些復(fù)雜性可能會減慢部署速度,使其更難適應(yīng)快節(jié)奏的微服務(wù)環(huán)境,而在這些環(huán)境中,可擴(kuò)展性和可靠性至關(guān)重要。

Kubernetes Gateway API 通過引入標(biāo)準(zhǔn)化的、Kubernetes 原生框架來管理流量,從而解決了這些挑戰(zhàn)。它旨在擴(kuò)展和改進(jìn) Ingress,支持高級路由、強(qiáng)大的負(fù)載均衡、增強(qiáng)的安全性和多租戶;所有這些都原生支持 Kubernetes 聲明式配置。Devtron 進(jìn)一步簡化了這一過程,提供了一個(gè)原生集成新 Kubernetes 網(wǎng)絡(luò)技術(shù)(如 Gateway API)的 DevOps 平臺。從部署自動化到安全和監(jiān)控,Devtron 讓您的應(yīng)用程序在沒有運(yùn)營復(fù)雜性的情況下順利運(yùn)行。

Kubernetes 中的網(wǎng)絡(luò)

當(dāng)您在 Kubernetes 中部署應(yīng)用程序時(shí),它們在由多個(gè)節(jié)點(diǎn)組成的集群中運(yùn)行。這些節(jié)點(diǎn)可能是虛擬機(jī)或裸機(jī)服務(wù)器,Kubernetes 使用 pod 將您的應(yīng)用程序分布在它們之間。Pod 是 Kubernetes 中最小的可部署單元,它可以根據(jù)擴(kuò)展、復(fù)制和資源可用性等因素在節(jié)點(diǎn)之間移動。

為了將用戶連接到您的應(yīng)用程序,Kubernetes 依賴于服務(wù)。服務(wù)充當(dāng)運(yùn)行應(yīng)用程序的 pod 和網(wǎng)絡(luò)之間的橋梁。針對不同用例,有不同類型的服務(wù):

  • ClusterIP:默認(rèn)類型,提供內(nèi)部 IP,使應(yīng)用程序只能在集群內(nèi)訪問。
  • NodePort:在每個(gè)節(jié)點(diǎn) IP 的靜態(tài)端口上暴露服務(wù),允許有限的外部訪問。
  • LoadBalancer:分配外部 IP 地址,使服務(wù)可以被集群外的用戶訪問。

對于需要外部訪問的應(yīng)用程序,LoadBalancer 服務(wù)是常見選擇。然而,為每個(gè)應(yīng)用程序使用單獨(dú)的負(fù)載均衡器并不能很好地?cái)U(kuò)展。隨著服務(wù)數(shù)量的增長,它變得昂貴、浪費(fèi)且難以管理。

為了解決這個(gè)問題,Kubernetes 引入了 Ingress 的概念。Ingress 充當(dāng)集中入口點(diǎn),根據(jù) URL 路徑或主機(jī)名等規(guī)則將傳入流量路由到正確的服務(wù)。例如,到 my-site.com/bills 的流量可以路由到計(jì)費(fèi)服務(wù)。這消除了為每個(gè)服務(wù)配置負(fù)載均衡器的需求,使其成為更高效的解決方案。

然而,Ingress 只是一組規(guī)則,它需要 Ingress 控制器(如 NGINX 或 Traefik)來處理流量并實(shí)現(xiàn)這些規(guī)則。雖然 Ingress 簡化了 Kubernetes 中的網(wǎng)絡(luò),但它也有自己的一系列限制。

Kubernetes Ingress 的局限性

現(xiàn)在您已經(jīng)了解了流量如何通過 LoadBalancers 和 Ingress 流入您的 Kubernetes 應(yīng)用程序,讓我們深入了解 Ingress 的局限性。

雖然 Ingress 簡化了 Kubernetes 中的應(yīng)用程序網(wǎng)絡(luò),但它確實(shí)有一些限制,使其對現(xiàn)代復(fù)雜設(shè)置的效果較差:

  • 協(xié)議限制:標(biāo)準(zhǔn) Ingress 僅為 HTTP/HTTPS 流量(第 7 層)設(shè)計(jì)。如果您的應(yīng)用程序使用其他協(xié)議如 TCP 或 UDP(第 4 層),單靠 Ingress 無法處理它們。您需要額外的工具或?qū)⑺鼈兣c Kubernetes 服務(wù)結(jié)合使用,以啟用 TCP 或 UDP 協(xié)議。
  • 缺乏標(biāo)準(zhǔn)化:高級功能如負(fù)載均衡和流量路由不是標(biāo)準(zhǔn) Ingress 規(guī)范的一部分。相反,它們依賴于您使用的特定 Ingress 控制器,如 NGINX 或 Traefik。每個(gè)控制器都有自己配置這些功能的方式,通常需要注解或自定義設(shè)置。這種缺乏標(biāo)準(zhǔn)化可能令人沮喪,尤其是當(dāng)您管理多個(gè)集群或想要切換控制器時(shí)。
  • 有限的可擴(kuò)展性:SSL/TLS 終止、管理證書或與 Cert-Manager 等工具集成等功能不是由 Ingress 本身原生處理的。相反,這些依賴于 Ingress 控制器,支持水平各不相同。這可能使確保一致性變得困難,尤其是在多集群或多云環(huán)境中。對于高級功能,如無需額外配置或工具即可原生處理 SSL/TLS,可以引入像 Istio 這樣的服務(wù)網(wǎng)格。服務(wù)網(wǎng)格通過提供內(nèi)置支持任務(wù)如 SSL 終止、流量加密等,擴(kuò)展了 Kubernetes 的能力。

這些限制使標(biāo)準(zhǔn) Ingress 對于復(fù)雜或大規(guī)模應(yīng)用程序不太理想,尤其是在處理多樣化協(xié)議或高級流量控制需求時(shí)。認(rèn)識到這些挑戰(zhàn),Kubernetes 社區(qū)開發(fā)了 Gateway API,這是一個(gè)更靈活和可擴(kuò)展的解決方案,用于解決 Ingress 模型中的差距。

什么是 Gateway API

Kubernetes Gateway API 是一個(gè)規(guī)范,它標(biāo)準(zhǔn)化了 Kubernetes 集群內(nèi)流量路由的管理方式。它由 Kubernetes SIG-NETWORK 組創(chuàng)建,作為 Ingress API 限制的更靈活和強(qiáng)大的替代方案。Gateway API 使處理入口、負(fù)載均衡、服務(wù)發(fā)現(xiàn)和流量路由變得更容易,并且與 Kubernetes 的原生資源(如 Services 和 Endpoints)良好集成。雖然 Kubernetes 不提供默認(rèn)實(shí)現(xiàn),但有幾個(gè)流行的開源和商業(yè)工具,如 Istio 和 Envoy Gateway,支持 Gateway API。

Gateway API由三個(gè)主要組件組成:

  • GatewayClass:將其視為設(shè)置 Gateway 的模板或藍(lán)圖。它定義了一組共享相同配置并由遵循該類規(guī)范的控制器管理的 Gateway。
  • Gateway:這是流量處理發(fā)生的地方。Gateway 就像集群的入口點(diǎn),例如云負(fù)載均衡器,根據(jù)您的配置將傳入流量引導(dǎo)到適當(dāng)?shù)哪康牡亍?/span>
  • HTTPRoute:這是您設(shè)置 HTTP 流量路由規(guī)則的地方。它幫助將流量從 Gateway 映射到您的后端服務(wù),例如在 Kubernetes Pod 中運(yùn)行的服務(wù),基于 URL 路徑、頭部或主機(jī)等因素。

這些組件共同提供了一種結(jié)構(gòu)化和靈活的方式來管理 Kubernetes 環(huán)境中的流量流動和路由。

Gateway API 如何工作

到目前為止,我們已經(jīng)介紹了 Kubernetes Gateway API 是什么,為什么它很重要,以及它的關(guān)鍵組件?,F(xiàn)在,讓我們深入了解它是如何工作的,讓您更清楚地了解其功能。

以下是其每個(gè)組件的邏輯分解及其工作原理:

Gateway API流程圖

Gateway 控制器

與 Ingress 控制器類似,Gateway 控制器是管理所有 Gateway 資源的中央組件。它負(fù)責(zé)確保 Gateway 資源中定義的配置得到正確實(shí)施。Gateway 控制器監(jiān)聽 Gateway、GatewayClass 和 Route 對象的變化,然后相應(yīng)地更新網(wǎng)絡(luò)配置以處理傳入流量。這使 Kubernetes 集群能夠?qū)β酚膳渲玫淖兓龀龇磻?yīng)并高效地管理流量。

GatewayClass

GatewayClass 定義了集群中 Gateway 的行為和配置。將其視為 Gateway 資源的模板或藍(lán)圖。它指定哪個(gè)控制器將管理 Gateway(這可能是開源解決方案如 Istio 或自定義實(shí)現(xiàn))。GatewayClass 還包含 IP 池和資源限制等配置?;A(chǔ)設(shè)施提供商負(fù)責(zé)定義和管理 GatewayClass。

以下是 GatewayClass 的示例代碼片段:

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: example-gatewayclass
spec:
  controller: example.com/gateway-controller

這定義了一個(gè)名為example-gatewayclass的 GatewayClass。它指定了負(fù)責(zé)管理此 Gateway 的控制器(example.com/gateway-controller)。

Gateway

一旦定義了 GatewayClass,您就可以基于它創(chuàng)建 Gateway 對象。Gateway 對象是基于特定 GatewayClass 創(chuàng)建的。它定義了流量如何進(jìn)入集群以及哪些監(jiān)聽器將處理流量(例如 HTTP、HTTPS)。單個(gè) Gateway 可以處理多個(gè)應(yīng)用程序的流量,這些應(yīng)用程序可以共享同一個(gè) Gateway,同時(shí)仍然保持各自的路由規(guī)則。

以下是 Gateway 的示例代碼片段:

apiVersion: gateway.networking.k8s.io/v1
kind:Gateway
metadata:
name:example-gateway
spec:
gatewayClassName:example-gatewayclass
listeners:
    -name:http
      port:80
      protocol:HTTP

這定義了一個(gè)名為example-gateway的 Gateway,它使用之前創(chuàng)建的example-gatewayclass。它在端口 80 上使用 HTTP 協(xié)議來處理傳入的流量。

HTTPRoute

在設(shè)置好 Gateway 后,您需要定義 HTTPRoute(或其他路由類型,如 TCPRoute)來指定如何將流量轉(zhuǎn)發(fā)到集群中的服務(wù)。HTTPRoute 對象定義了路由 HTTP 流量的規(guī)則,例如匹配路徑、標(biāo)頭或其他 HTTP 屬性。HTTPRoute 對象本質(zhì)上充當(dāng)了一組指令,告訴 Gateway 如何將傳入流量定向到 Kubernetes 集群中的特定應(yīng)用程序或服務(wù)。

以下是 HTTPRoute 配置的示例:

apiVersion: gateway.networking.k8s.io/v1
kind:HTTPRoute
metadata:
name:example-httproute
spec:
hosts:
    -"example.com"
rules:
    -matches:
        -path:
            type:Prefix
            value:/app
      forwardTo:
        -serviceName:app-service
          port:80

這定義了一個(gè)名為example-httproute的 HTTPRoute,它監(jiān)聽發(fā)送到example.com的請求。它將路徑為/app的請求轉(zhuǎn)發(fā)到端口 80 上的app-service。

這些組件協(xié)同工作,使 Kubernetes 中的流量路由管理變得更加簡單。它們讓團(tuán)隊(duì)對網(wǎng)絡(luò)流量的流向和安全性處理有更多的控制權(quán)。該系統(tǒng)的設(shè)計(jì)使得不同的團(tuán)隊(duì),如基礎(chǔ)設(shè)施提供商、集群運(yùn)營商和應(yīng)用程序開發(fā)人員,可以順暢地協(xié)作,而不會干擾彼此的任務(wù)。

Gateway API 與 Kubernetes Ingress 對比

現(xiàn)在我們已經(jīng)清楚地了解了 Gateway API 的工作原理,讓我們探討一下 Gateway API 和 Kubernetes Ingress 之間的主要區(qū)別,這兩者都用于 Kubernetes 中的流量管理。

安裝和使用 Gateway API

到目前為止,Gateway API 的必要性應(yīng)該已經(jīng)很明確了。接下來,讓我們看看如何在集群中安裝 Gateway API 并有效地使用它來管理流量。

前提條件

要跟隨本教程,您需要一個(gè)具有兩個(gè)或更多節(jié)點(diǎn)的 Kubernetes 集群。您可以使用minikube創(chuàng)建一個(gè),或者使用以下 Kubernetes 實(shí)驗(yàn)環(huán)境之一:

  • Killercoda
  • Play with Kubernetes

在本教程中,我們將安裝 Kubernetes Gateway API 并使用它來路由電子商務(wù)應(yīng)用的前端和后端之間的流量。到最后,您將了解如何設(shè)置 GatewayClass、Gateway 和 HTTPRoute 以實(shí)現(xiàn)高效的流量管理。

步驟 1:安裝 Gateway API CRD

首先,在我們的集群中安裝 Gateway API 自定義資源定義(CRD):

kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/latest/download/standard-install.yaml

驗(yàn)證安裝:

kubectl get crds | grep gateway

步驟 2:部署網(wǎng)關(guān)控制器

Gateway API 本身并不提供內(nèi)置控制器。您可以使用現(xiàn)有的控制器,如 Istio、Kong 或 Envoy Gateway。例如,要安裝 Istio Gateway 控制器,請運(yùn)行:

istioctl install --set profile=default

kubectl apply -f https://github.com/istio/istio/releases/latest/download/gateway.yaml

步驟 3:定義 GatewayClass

GatewayClass 定義了網(wǎng)關(guān)的動作,類似于 IngressClass。

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: my-gateway-class
spec:
  controllerName: istio.io/gateway-controller

直接應(yīng)用:

kubectl apply -f gatewayclass.yaml

步驟 4:創(chuàng)建網(wǎng)關(guān)

網(wǎng)關(guān)是處理流量的實(shí)際網(wǎng)絡(luò)入口點(diǎn)。

apiVersion: gateway.networking.k8s.io/v1
kind:Gateway
metadata:
name:ecommerce-gateway
spec:
gatewayClassName:my-gateway-class
listeners:
-name:http
    protocol:HTTP
    port:80

應(yīng)用:

kubectl apply -f gateway.yaml

步驟 5:定義 HTTP 路由

路由定義了如何將傳入請求轉(zhuǎn)發(fā)到后端服務(wù)。

apiVersion: gateway.networking.k8s.io/v1
kind:HTTPRoute
metadata:
name:frontend-to-backend
spec:
parentRefs:
-name:ecommerce-gateway
rules:
-matches:
    -path:
        type:Prefix
        value:"/api"
    backendRefs:
    -name:backend-service
      port:8080

應(yīng)用:

kubectl apply -f httproute.yaml

步驟 6:部署前端和后端服務(wù)

為了簡化,部署一個(gè)基本的前端和后端。

前端服務(wù):

apiVersion: v1
kind:Service
metadata:
name:frontend-service
spec:
selector:
    app:frontend
ports:
    -protocol:TCP
      port:80
      targetPort:3000

后端服務(wù):

apiVersion: v1
kind:Service
metadata:
name:backend-service
spec:
selector:
    app:backend
ports:
    -protocol:TCP
      port:8080
      targetPort:8080

應(yīng)用:

kubectl apply -f frontend-service.yaml
kubectl apply -f backend-service.yaml

步驟 7:測試設(shè)置

獲取網(wǎng)關(guān)的外部 IP:

kubectl get gateway ecommerce-gateway

發(fā)送請求:

curl http://<GATEWAY-IP>/api

如果一切設(shè)置正確,請求應(yīng)該被路由到后端服務(wù)。

結(jié)論

總而言之,與傳統(tǒng)的 Ingress 相比,Gateway API 提供了一種更靈活、更可擴(kuò)展的方式來管理 Kubernetes 中的流量。通過引入 GatewayClass、Gateway 和 HTTPRoute 等新資源,它使團(tuán)隊(duì)能夠更好地控制路由、安全性和基礎(chǔ)設(shè)施。其面向角色的設(shè)計(jì)促進(jìn)了不同團(tuán)隊(duì)之間的協(xié)作,在定義網(wǎng)絡(luò)策略和處理復(fù)雜流量場景方面提供了更大的靈活性。此外,憑借對多種協(xié)議的支持和加權(quán)路由等高級功能,Gateway API 成為在現(xiàn)代 Kubernetes 環(huán)境中處理流量的強(qiáng)大工具。

責(zé)任編輯:姜華 來源: k8s技術(shù)圈
相關(guān)推薦

2023-12-25 07:46:35

GatewayAPI開源

2023-11-08 00:23:08

網(wǎng)關(guān)API

2024-01-30 07:58:41

KubernetesGAMMA網(wǎng)關(guān)

2023-11-07 07:08:57

2022-01-06 07:46:01

Traefik 開源Gateway API

2021-10-15 08:27:14

Kubernetes 工具Mizu

2024-01-22 12:46:00

KubernetesAPI接口

2012-04-06 10:35:30

SpringJavaHibernate

2024-05-09 08:24:01

2024-05-17 09:44:49

Kubernetes均衡器Envoy

2024-07-05 11:13:05

2010-11-12 12:51:26

2011-03-01 15:30:52

用MySQLProftpd

2023-10-27 12:36:37

gRPCKubernetes

2023-09-08 08:01:40

Gateway測試配置

2021-02-07 08:00:00

Kubernetes集群云原生

2023-03-10 22:14:49

KustomizeKubernetes

2022-01-13 11:00:58

Kubernetes Gateway APILinux

2013-08-02 09:33:31

Android碎片化Google

2024-09-23 08:03:59

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號