標題:Kubernetes 中使用網關 API 的現代流量管理

發表:真實

說明:探索 Kubernetes Gateway API 如何透過進階路由、多租用戶和無縫服務網格整合來增強流量管理。

標籤: kubernetes, 微服務, 流量管理, gatewayapi

封面圖:https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5q8leba0lzka02v3r23k.png

使用 100:42 的比例可獲得最佳效果。

發佈於: 2024-11-03 20:41 +0000


隨著 Kubernetes 成為管理微服務的核心元件,有效的流量管理變得至關重要。 Gateway API 旨在作為傳統 Ingress API 的更靈活、更強大的替代方案,增強 Kubernetes 的流量管理能力。在本文中,我們將探討 Gateway API 的優勢、其元件、實際用例以及生產環境的最佳實務。


1.什麼是網關API?

Gateway API 在 Kubernetes 中引入了一種新的流量管理方法,旨在克服 Ingress 的限制。透過提供更靈活、可擴展的架構,它支援多租戶、高級路由要求以及與 Istio 等服務網格的無縫整合。

網關 API 的關鍵元件

  1. GatewayClass :定義網關模板,通常由基礎設施供應商設定。

  2. 網關:代表流量入口點,將偵聽器(HTTP 或 HTTPS 等協定)連接到定義的路由。

  3. 路由(HTTPRoute、TCPRoute、TLSRoute、UDPRoute) :根據協定類型指定路由規則,並允許進階配置,例如基於路徑、基於標頭和加權路由。

  4. 策略:使管理員能夠跨不同的路由和叢集應用策略(例如安全性和速率限制),從而增強控制和安全性。


  1. Ingress 和網關 API 之間的主要區別

|特色 |入口 |網關API |

|----------------------|-------------------------- -- ----------------|------------------------------- ---|

|靈活性 |有限公司|高度靈活|

|協議支援 |主要是 HTTP/HTTPS | HTTP、TCP、UDP、TLS |

|可擴充性|基礎(註釋)|分層,使用路由和類別|

|資源隔離|有限公司|優秀|

|進階路由|有限公司|強大的支援|

|多租戶 |基本 |大力支持 |


  1. 透過範例擴展元件概述

網關類別和網關

GatewayClass由管理員建立,用作設定網關的藍圖。

apiVersion: gateway.networking.k8s.io/v1beta1
kind: GatewayClass
metadata:
  name: my-gateway-class
spec:
  controllerName: example.com/gateway-controller

網關使用 GatewayClass 來設定特定的流量入口點:

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

使用 HTTPRoute 和策略的進階路由

HTTPRoute允許細粒度的路由控制,如以下基於路徑的路由範例所示:

apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  name: my-app-route
spec:
  parentRefs:
    - name: my-gateway
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /app
      backendRefs:
        - name: my-service
          port: 8080

Canary 部署的加權路由

加權路由允許控制流量分配,這對於金絲雀和藍綠部署至關重要。

rules:
  - matches:
      - path:
          type: PathPrefix
          value: /service
    backendRefs:
      - name: service-v1
        port: 8080
        weight: 80
      - name: service-v2
        port: 8080
        weight: 20

策略和存取控制

網關 API 中的策略有助於實施安全性和存取控制。例如, HTTPRoutePolicy可以限制特定 IP 的流量或應用速率限制。

apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoutePolicy
metadata:
  name: allow-list-policy
spec:
  targetRef:
    kind: HTTPRoute
    name: my-app-route
  rules:
    - allowedIPs:
        - 192.168.1.1
        - 10.0.0.0/24

此策略限制對指定 IP 的存取,直接在路由層級新增一層安全性。


  1. 實際用例

場景 1:多租戶應用程式路由

在多團隊環境中,隔離每個團隊的路線至關重要。網關 API 對多租戶的支援允許每個團隊管理自己的網關和路由。

  • 問題:團隊需要隔離的流量控製而不互相干擾。

  • 解決方案:為每個團隊定義單獨的網關和路由,允許針對存取控製或速率限制制定特定策略。

場景 2:從 Ingress 遷移到 Gateway API

從入口 API 過渡到網關 API 使組織能夠採用進階路由和流量管理。

  • 問題:目前的 Ingress 配置僅限於複雜的路由需求。

  • 解決方案:使用分階段遷移,從入口和網關 API 資源共存的混合設定開始。 kube-migrator或自訂腳本等工具可以協助將 Ingress 設定轉換為 Gateway 設定。


  1. 可擴充性和服務網格相容性

網關 API 設計為可跨各種雲端平台擴展,並支援與服務網格的整合。許多服務網格(例如IstioLinkerd )提供與 Gateway API 的兼容性,從而增強流量控制。

範例:Istio 集成

下面的範例使用 Gateway API 設定 Istio 閘道:

apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
  name: istio-gateway
spec:
  gatewayClassName: istio
  listeners:
    - name: https
      protocol: HTTPS
      port: 443
      tls:
        mode: Terminate
        certificateRefs:
          - name: istio-cert

透過利用服務網格和網關 API,組織可以實現進階路由、安全性策略和可觀察性功能。


  1. 生產最佳實踐

多租戶和分層策略

為不同的團隊或應用程式使用不同的網關,透過 GatewayClasses 或路由設定分層策略來管理安全性和存取控制。

監控和可觀察性

PrometheusGrafana等監控工具對於追蹤網關效能和成功率至關重要。為網關和路由配置集中日誌記錄有助於提高可觀察性。

安全和 TLS 終止

在網關上集中 TLS 終止可簡化憑證管理,提高跨應用程式的安全性和 HTTPS 實作。


  1. 可視化網關 API 流量

可視化元件互動:

  1. GatewayClass定義模板。

  2. 網關偵聽流量並根據協定引導流量。

  3. HTTPRoute將流量路由到後端服務。

網關API流量

此圖說明了流量如何從 GatewayClass 流向網關和路由,從而將請求引導至後端服務。


八、結論

Gateway API 代表了 Kubernetes 流量管理的重大進步。其先進的路由、多租戶支援以及服務網格的可擴展性使其成為現代應用程式的強大解決方案。

此更新的 API 是需要可擴充性、靈活性和進階安全性的複雜架構的理想選擇。透過分階段遷移策略、政策和最佳實踐,網關 API 可以成為 Kubernetes 環境中流量管理的支柱。


原文出處:https://dev.to/alialp/modern-traffic-management-with-gateway-api-in-kubernetes-19dp


共有 0 則留言