共用方式為


使用 Azure Kubernetes Fleet Manager 的多叢集 DNS 型負載平衡 (預覽)

Azure Kubernetes Fleet Manager 可用來建立和管理 DNS 型多叢集負載平衡,以用於跨成員叢集部署的公開工作負載。

這很重要

Azure Kubernetes 機群管理員預覽功能由客戶自行決定取用。 預覽是「依現況」及「可用時」提供的,並不包括在服務等級協定和有限保固之內。 客戶支援部門會竭盡全力支援一部分的 Azure Kubernetes 機群管理員預覽功能。 因此,這些功能不適合實際執行用途。

我們的數據平面網路預覽會透過我們的 networking.fleet.azure.com/v1beta1 API 發行。 如果您沒有看到預覽物件,請檢查您是否在與 Fleet Manager 中樞叢集互動時要求 networking.fleet.azure.com/v1beta1 API。

這個圖表展示了 Fleet Manager 如何透過 Azure 流量管理員和 Kubernetes ServiceExport 資源,來支援橫跨三個成員叢集的 DNS 負載平衡的概念性總覽。

為了使用 DNS 傳遞多叢集公用負載平衡,Fleet Manager 會利用具有加權路由配置檔Azure 流量管理員作為從成員叢集導出的Services前端。 第 4 層和 7 層負載平衡都可使用這項功能。

車隊系統管理員會使用 kubectl 在 Fleet Manager 中樞叢集上建立及設定 TrafficManagerProfile 和資源 TrafficManagerBackendTrafficManagerProfile 定義 Azure 流量管理器設定檔,其中包含 端點健康情況監視設置,並且相關的 TrafficManagerBackend 定義 Service 要進行負載平衡。

成員叢集上的服務可以藉由在叢集上建立 ServiceExport ,並設定 Service的唯一 DNS 主機名,以新增至負載平衡。 您可以定義選擇性權數,以設定叢集之間的流量路由行為。 如果使用 Fleet Manager 的叢集資源放置來部署工作負載,則可以在放置時配置 DNS 主機名ResourceOverride

相關聯的流量管理員的建立和設定是由 Fleet Manager 所管理,車隊系統管理員能夠使用 Kubernetes API 來驅動端對端體驗。

TrafficManagerProfile 屬性

資源 TrafficManagerProfile 會提供標準 Azure 流量管理員配置檔的 Kubernetes 物件表示法。

apiVersion: networking.fleet.azure.com/v1beta1
kind: TrafficManagerProfile
metadata:
  name: myatm
  namespace: work
spec:
  monitorConfig:
    protocol: HTTP
    path: /api
    port: 8080
    intervalInSeconds: 30
    timeoutInSeconds: 10
    toleratedNumberOfFailures: 3

要瞭解的重要屬性包括:

  • name:作為 trafficmanager.net DNS 名稱的 DNS 前綴。 不得重複。 如果名稱已在使用中,部署就會失敗。
  • namespace:必須與對應的 TrafficManagerBackendService 資源相同。
  • monitorCOnfig:對應至標準 Azure Traffic Manager 監控配置。 不支援的 Azure 流量管理員端點監視選項包括:自定義標頭設定;預期的狀態代碼。

TrafficManagerBackend 屬性

資源 TrafficManagerBackend 會提供 Kubernetes 物件,用來儲存流量管理員可視為接收流量的後端端點。 必須先建立 ServiceExport,然後才能將流量路由傳送至端點。

apiVersion: networking.fleet.azure.com/v1beta1
kind: TrafficManagerBackend
metadata:
  name: app
  namespace: work
spec:
  profile:
    name: myatm
  backend:
    name: app
  weight: 100

要瞭解的重要屬性包括:

  • spec/profile/name:必須符合對應的 TrafficManagerProfile
  • spec/backend/name:必須符合導出的服務名稱才能進行負載平衡。
  • spec/weight:可選擇性套用於此後端的優先權重。 介於 0 到 1,000 之間的整數值。 如果省略,流量管理員會使用預設權數 『1』。 設定為 『0』 以停用流量路由,而不刪除相關聯的流量管理員配置檔資源。 如需詳細資訊,請參閱 Azure 流量管理員加權路由方法

ServiceExport 屬性

要將端點 Service 新增至流量管理器,請在包含服務的成員叢集上建立 ServiceExport 資源。 資源 ServiceExport 必須建立在與 Service 要匯出之 相同的命名空間中。

apiVersion: networking.fleet.azure.com/v1alpha1
kind: ServiceExport
metadata:
  name: kuard-export
  namespace: kuard-demo
  annotations:
    networking.fleet.azure.com/weight: "50"

要瞭解的重要屬性包括:

  • metadata/namespace:必須符合要匯出之 的 Service 命名空間。
  • metadata/annotations/networking.fleet.azure.com/weight:此服務匯出可選的優先權重。 介於 0 到 1,000 之間的整數值。 如果省略,流量管理員會使用預設權數 『1』。 設定為 '0' 以停用流量路由,而不刪除相關聯的服務端點。 如需詳細資訊,請參閱 Azure 流量管理員加權路由方法

透過服務批注的唯一 DNS 主機名

必須先具有唯一的 DNS 主機名,才能將 Service 新增至流量管理員。 您可以按照 AKS 的建議方法,使用 service.beta.kubernetes.io/azure-dns-label-name 註釋來設定 DNS 主機名,如下所示。

apiVersion: v1
kind: Service
metadata:
  name: kuard-svc
  namespace: kuard-demo
  labels:
    app: kuard
  annotations:
    service.beta.kubernetes.io/azure-dns-label-name: kuard-demo-cluster-01
spec:
  selector:
    app: kuard
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

您可以使用 Fleet Manager 的ResourceOverride功能覆寫 DNS 標籤設定,以便在多個叢集中部署獨特的主機名稱。 如需詳細資訊,請參閱 DNS 負載平衡作指南

控制流量路由

在本節中,我們將探討控制叢集之間流量路由的常見案例。

跨叢集分散流量

若要允許流量管理員考慮接收流量的任何叢集,請使用顯示的定義。

  1. 建立 TrafficManagerBackend 資源並省略 weight 屬性。

    apiVersion: networking.fleet.azure.com/v1beta1
    kind: TrafficManagerBackend
    metadata:
      name: app
      namespace: work
    spec:
      profile:
        name: myatm
      backend:
        name: app
    
  2. 在每個叢集上,建立 ServiceExport 並省略 weight 屬性。

    apiVersion: networking.fleet.azure.com/v1alpha1
    kind: ServiceExport
    metadata:
      name: kuard-export
      namespace: kuard-demo
    

部署之後,流量管理員會隨機挑選叢集,並考慮擁有權數相等的叢集。

將流量分配到具有不同權重的叢集

若要在選取叢集時提供流量管理員喜好設定提示,請在 weightTrafficManagerBackend 物件上設定 ServiceExport 屬性。

  1. 建立 TrafficManagerBackend 資源,並將 屬性設定 weight100

    apiVersion: networking.fleet.azure.com/v1beta1
    kind: TrafficManagerBackend
    metadata:
      name: app
      namespace: work
    spec:
      profile:
        name: myatm
      backend:
        name: app
      weight: 100
    
  2. 創建ServiceExport並將weight屬性設置為一個值,此值代表流量管理員在考慮選擇叢集接收流量時使用的優先權。

    apiVersion: networking.fleet.azure.com/v1alpha1
    kind: ServiceExport
    metadata:
      name: kuard-export
      namespace: kuard-demo
      annotations:
        networking.fleet.azure.com/weight: "40"
    

部署之後,流量管理員會偏好使用較高權數的叢集。 您不需要在每個叢集上設定權數值。 如果您在多個叢集上設定相同的權數值,流量管理員會同樣考慮這些叢集。

將叢集排除於流量路由之外

若要從流量路由中排除叢集,請將 weight 資源上的 屬性設定為 0ServiceExport 。 此權數會從流量管理員設定中移除端點。

apiVersion: networking.fleet.azure.com/v1alpha1
kind: ServiceExport
metadata:
  name: kuard-export
  namespace: kuard-demo
  annotations:
    networking.fleet.azure.com/weight: "0"

TrafficManagerProfile 的刪除方式

刪除 Kubernetes 資源時,相關的 Azure 流量管理員及其端點也會一併刪除,因此要求不再被路由到叢集。

如果您要停止流量路由,但保留 Azure 流量管理員及其端點,請將資源上的 屬性設定 weight0TrafficManagerBackend

後續步驟