跳至主要内容

叢集網路

概念​

叢集網路​

自 v1.1.0 起可用

在 Harvester v1.1.0 中,我們引入了一個名為叢集網路的新概念,用於流量隔離。

以下圖表描述了將資料中心(DC)流量與帶外(OOB)流量分離的典型網路架構。

我們將 Harvester 上流量隔離轉發路徑上的裝置、連結和配置的總和抽象化為叢集網路。

在上述情況下,將有兩個叢集網路對應於兩條流量隔離的轉發路徑。

網路配置​

Harvester 主機的規格(包括網路裝置)可能不同。為了與這種異質叢集相容,我們設計了網路配置。

網路配置僅在特定叢集網路下運作。每個網路配置對應於一組具有統一網路規格的主機。因此,在非統一主機上的叢集網路需要多個網路配置。

VM 網路​

VM 網路是虛擬機器中連接到主機網路的介面。與網路配置一樣,除了內建的管理網路外,每個網路都必須在叢集網路下。

Harvester 支援為一個 VM 添加多個網路。如果某個網路的叢集網路未在某些主機上啟用,擁有此網路的 VM 將不會被排程到這些主機上。

有關網路的更多詳細資訊,請參閱網路部分。

叢集網路、網路配置、VM 網路之間的關係​

以下圖表顯示了叢集網路、網路配置和 VM 網路之間的關係。

所有 Network Configs 和 VM Networks 都分組在叢集網路下。

  • 可以為每個主機分配標籤,根據其網路規格對主機進行分類。
  • 可以使用節點選擇器為每組主機添加網路配置。

例如,在上圖中,ClusterNetwork-A 中的主機分為以下三組:

  • 第一組包括 host0,對應於 network-config-A。
  • 第二組包括 host1 和 host2,對應於 network-config-B。
  • 第三組包括其餘主機(host3、host4 和 host5),它們沒有任何相關的網路配置,因此不屬於 ClusterNetwork-A。

叢集網路僅在網路配置覆蓋的主機上有效。使用特定叢集網路下的 VM network 的 VM 只能被排程到該叢集網路處於活動狀態的主機上。

在上圖中,我們可以看到:

  • ClusterNetwork-A 在 host0、host1 和 host2 上處於活動狀態。VM0 使用 VM-network-A,因此它可以被排程到這些主機中的任何一個。
  • VM1 同時使用 VM-network-B 和 VM-network-C,因此它只能被排程到 ClusterNetwork-A 和 ClusterNetwork-B 都處於活動狀態的 host2 上。
  • VM0、VM1 和 VM2 無法在兩個叢集網路都不活動的 host3 上執行。

總體而言,此圖表清楚地視覺化了叢集網路、網路配置和 VM 網路之間的關係,以及它們如何影響主機上的 VM 排程。

叢集網路詳細資訊​

叢集網路是用於在 Harvester 叢集內傳輸網路流量的流量隔離轉發路徑。

當部署 Harvester 叢集時,會自動建立一個名為 mgmt 的叢集網路。您還可以建立可專用於虛擬機器流量的自訂叢集網路。

內建叢集網路​

當部署 Harvester 叢集時,會自動建立一個名為 mgmt 的叢集網路用於叢集內通訊。mgmt 由與每個 Harvester 主機使用管理網卡連接的外部基礎設施網路相同的網橋、綁定和網卡組成。由於此設計,mgmt 還允許從外部基礎設施網路存取虛擬機器以進行叢集管理。

mgmt 不需要網路配置,並且始終在所有主機上啟用。您無法停用和刪除 mgmt。

備註

在 Harvester v1.5.x 及更早版本中,整個 VLAN ID 範圍(2 到 4094)被分配給 mgmt 介面。然而,這超出了某些網卡支援的 VLAN 上限,因此硬體 VLAN 卸載停止正常工作。

有關更多資訊,請參閱 issue #7650。

從 v1.6.0 開始,只有在安裝期間提供的主要 VLAN ID 會自動添加到 mgmt-br 網橋和 mgmt-bo 介面。您可以在安裝完成後添加次要 VLAN 介面。

在安裝第一個叢集節點期間,您可以使用 install.management_interface 設定來配置 mgmt 的 MTU 值。mtu 欄位的預設值為 1500,這是 mgmt 通常使用的值。但是,如果您指定的 MTU 值不是 0 或 1500,則必須在部署叢集後添加相應的註解。

警告
  • 某些 ARP 設定可能會中斷叢集通訊。例如,使用 arp_ignore=2 時,只有當發送者 IP 位址與請求 MAC 位址的目標 IP 位址在同一子網路中時,才會發送回覆。這在 Harvester 叢集中不是這種情況,因此在所有介面上使用 arp_ignore=2 會導致連線檢查失敗,並阻止 Longhorn pod(特別是 backing-image 和 instance-manager)轉換到 Ready 狀態。如果這些 Longhorn pod 未就緒,則無法將磁碟區附加到虛擬機器。
  • Harvester 叢集中的所有節點必須使用相同的 MTU 值。由於 Harvester 不會在節點加入時自動偵測差異,因此您必須手動確保值相同,以防止意外的系統行為。

添加次要 VLAN 介面​

將以下命令添加到 /oem/90_custom.yaml 檔案並重新開機節點。

  • /etc/wicked/scripts/setup_bond.sh 區段
    bridge vlan add vid <vlan-id> dev $INTERFACE
  • /etc/wicked/scripts/setup_bridge.sh 區段
    bridge vlan add vid <vlan-id> dev $INTERFACE self
    bridge vlan add vid <vlan-id> dev mgmt-bo
important

您必須為每個不同的 VLAN ID 包含單獨的命令。確保將 vlan-id 佔位符替換為實際 ID。

安裝後為 mgmt 註解非預設 MTU 值​

自 v1.6.0 起可用

如果您在 install.management_interface 設定的 mtu 欄位中指定了 0 或 1500 以外的值,則必須將此值註解到 mgmt clusternetwork 物件。如果沒有註解,所有建立的 VM 網路都會使用預設 MTU 值 1500,而不是自動繼承您指定的值。

範例:

$ kubectl annotate clusternetwork mgmt network.harvesterhci.io/uplink-mtu="9000"
警告

您必須確保以下事項:

安裝後更改 mgmt 的 MTU 值​

mgmt 網路的 MTU 儲存在每個節點上的內部檔案 /oem/90_custom.yaml 中。該檔案儲存了系統的許多基本配置。

警告

編輯 /oem/90_custom.yaml 時請格外謹慎。不要更改其他設定和檔案的格式,以避免破壞系統。

  1. 在每個節點上建立 /oem/90_custom.yaml 檔案的備份。

當節點無法重新開機時,您可以使用此備份來還原檔案。

  1. 停止所有附加到 mgmt 網路的虛擬機器。

  2. (選填)如果儲存網路使用 mgmt 並已啟用,請停用它。

  3. 在每個節點上更改 /oem/90_custom.yaml 檔案中的 MTU 值。

    找到以下路徑,然後更改 MTU=1500 中的值。

    • path: /etc/sysconfig/network/ifcfg-mgmt-bo
    • path: /etc/sysconfig/network/ifcfg-mgmt-br

    範例:

    - path: /etc/sysconfig/network/ifcfg-mgmt-bo
    permissions: 384
    owner: 0
    group: 0
    content: |+
    ...
    MTU=1500 // MTU 是 content 下的最後一項,可能是空白行,請添加或更改它
    encoding: ""
    ownerstring: ""
    - path: /etc/sysconfig/network/ifcfg-mgmt-br
    permissions: 384
    owner: 0
    group: 0
    content: |+
    ...
    MTU=1500 // MTU 是 content 下的最後一項,可能是空白行,請添加或更改它
    encoding: ""
    ownerstring: ""
  4. 使用 yq -e /oem/90_custom.yaml 命令驗證檔案的格式是否仍然有效。除非發生錯誤,否則此命令會列印檔案的內容。

  5. 重新開機每個節點以套用更改。

  6. 使用 ip link 命令檢查 MTU 值。

  7. 使用新的 MTU 值為 mgmt clusternetwork 物件添加註解。

    範例:

    $ kubectl annotate clusternetwork mgmt network.harvesterhci.io/uplink-mtu="9000"

    所有附加到 mgmt 的 VM 網路會自動繼承新的 MTU 值。

  8. (選填)啟用您在更改 MTU 值之前停用的儲存網路。

  9. 啟動所有附加到 mgmt 的虛擬機器。

  10. 驗證虛擬機器工作負載是否正常執行。

有關更多資訊,請參閱更改具有附加儲存網路的網路配置的 MTU。

自訂叢集網路​

如果每個主機連接了多個網路介面,您可以建立自訂叢集網路以實現更好的流量隔離。每個叢集網路必須至少有一個定義了範圍和綁定模式的網路配置。

備註

見證節點通常不涉及自訂叢集網路。

配置​

建立新的叢集網路​

提示

為簡化叢集維護,請為每個節點或節點組建立一個網路配置。如果沒有專用的網路配置,某些維護任務(例如,用不同插槽中的網卡替換舊網卡)將需要您在更新網路配置之前停止和/或遷移受影響的虛擬機器。

  1. 確保符合硬體要求。

  2. 前往 Networks > ClusterNetworks/Configs,然後點擊 Create。

  3. 為叢集網路指定名稱。

  4. 在 ClusterNetworks/Configs 畫面上,點擊您建立的叢集網路的 Create Network Config 按鈕。

  5. 在 Network Config:Create 畫面上,為配置指定名稱。

  6. 在 Node Selector 標籤上,選擇定義此特定網路配置範圍的方法。

    備註
    • Select all nodes(選擇所有節點)方法僅在所有節點對此特定自訂叢集網路使用完全相同的專用網卡時有效。在其他情況下(例如,當叢集有見證節點時),您必須選擇其餘方法之一。
    • 如果您希望配置套用到所選方法未覆蓋的節點,則必須建立另一個網路配置。
  7. 在 Uplink 標籤上,配置以下設定:

    • NICs:列表包含所有所選節點共有的網卡。無法選擇的網卡在一個或多個節點上不可用,必須進行配置。故障排除完成後,重新整理畫面並驗證是否可以選擇這些網卡。
    • Bond Options:預設綁定模式為 active-backup。
    • Attributes:您必須在自訂叢集網路的所有網路配置中使用相同的 MTU。如果您未指定 MTU,則使用預設值 1500。如果新網路配置的 MTU 與現有網路配置的 MTU 不匹配,Harvester webhook 會拒絕該網路配置。

  8. 點擊 Save。

更改網路配置​

對現有網路配置的更改可能會影響 Harvester 虛擬機器和工作負載,以及交換器和路由器等外部裝置。有關更多資訊,請參閱網路拓撲。

important

在更改網路配置之前,您必須停止所有受影響的虛擬機器。

一般更改​

  1. 找到目標叢集網路和網路配置。

    在以下範例中,叢集網路為 cn-data,網路配置為 nc-1。

  2. 選擇 ⋮ > Edit Config,然後更改相關欄位。

    • Node Selector 標籤:

    • Uplink 標籤:

    important

    您必須在自訂叢集網路的所有網路配置中對 Bond Options 和 Attributes 欄位使用相同的值。

  3. 點擊 Save。

以下章節概述了更改網路配置 MTU 所必須執行的步驟。這些章節中使用的範例叢集網路具有使用 MTU 值 1500 建立的 cn-data,並打算更改為值 9000。

更改沒有附加儲存網路的網路配置的 MTU​

在此場景中,儲存網路未啟用也未附加到目標叢集網路。

警告
  • MTU 會影響 Harvester 節點和交換器、路由器等網路裝置。需要仔細規劃和測試以確保更改 MTU 不會對系統產生不利影響。有關更多資訊,請參閱網路拓撲。
  • 您必須在自訂叢集網路的所有網路配置中使用相同的 MTU。
  • 在配置更改期間,叢集操作會中斷。
  • 本節中的資訊不適用於內建的 mgmt 叢集網路。

如果您必須更改 MTU,請執行以下步驟:

  1. 停止所有附加到目標叢集網路的虛擬機器。

    您可以使用 VM 網路和您可能使用的任何次要網路來檢查這一點。當任何連接的虛擬機器仍在執行時,Harvester 不允許您更改 MTU。

  2. 檢查目標叢集網路的網路配置。

    如果存在多個網路配置,請記錄每個的節點選擇器,並移除配置直到只剩下一個。

  3. 更改剩餘網路配置的 MTU。

    important

    您還必須在對等外部交換器或路由器上更改 MTU。

  4. 使用 Linux ip link 命令驗證 MTU 是否已更改。如果網路配置選擇多個 Harvester 節點,請在每個節點上執行該命令。

    輸出必須顯示相關 *-br 裝置的新 MTU 和狀態 UP。在以下範例中,裝置為 cn-data-br,新 MTU 為 9000。

    Harvester node $ ip link show dev cn-data-br
    |new MTU| |state UP|
    3: cn-data-br: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:6e:5c:2a brd ff:ff:ff:ff:ff:ff
    備註

    當狀態為 UNKNOWN 時,Harvester 和外部交換器或路由器上的 MTU 值可能不匹配。

  5. 使用 ping 等命令在 Harvester 節點上測試新 MTU。您必須將訊息發送到具有新 MTU 的 Harvester 節點或具有外部 IP 的節點。

    在以下範例中,網路為 cn-data,CIDR 為 192.168.100.0/24,閘道為 192.168.100.1。

    1. 在網橋裝置上設定 IP 192.168.100.100。

      $ ip addr add dev cn-data-br 192.168.100.100/24
    2. 透過閘道為目標 IP(例如,8.8.8.8)添加路由。

      $ ip route add 8.8.8.8 via 192.168.100.1 dev cn-data-br
    3. 從新 IP 192.168.100.100 ping 目標 IP。

      $ ping 8.8.8.8 -I 192.168.100.100
      PING 8.8.8.8 (8.8.8.8) from 192.168.100.100 : 56(84) bytes of data.
      64 bytes from 8.8.8.8: icmp_seq=1 ttl=59 time=8.52 ms
      64 bytes from 8.8.8.8: icmp_seq=2 ttl=59 time=8.90 ms
      ...
    4. 使用不同的封包大小 ping 目標 IP 以驗證新 MTU。

      $ ping 8.8.8.8 -s 8800 -I 192.168.100.100
      PING 8.8.8.8 (8.8.8.8) from 192.168.100.100 : 8800(8828) bytes of data
      參數 `-s` 指定 ping 封包大小,可以測試新 MTU 是否真正有效
    5. 移除您用於測試的路由。

      $ ip route delete 8.8.8.8 via 192.168.100.1 dev cn-data-br
    6. 移除您用於測試的 IP。

      $ ip addr delete 192.168.100.100/24 dev cn-data-br
  6. 添加回您移除的網路配置。

    important

    您必須在每個配置中更改 MTU,並驗證新 MTU 是否已套用。如果新網路配置的 MTU 與現有網路配置的 MTU 不匹配,Harvester webhook 會拒絕該網路配置。

    所有附加到目標叢集網路的 VM 網路會自動繼承新的 MTU 值。

    在以下範例中,網路名稱為 vm100。執行命令 kubectl get NetworkAttachmentDefinition.k8s.cni.cncf.io vm100 -oyaml 以驗證 MTU 值是否已更新。

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
    annotations:
    network.harvesterhci.io/route: '{"mode":"auto","serverIPAddr":"","cidr":"","gateway":""}'
    creationTimestamp: '2025-04-25T10:21:01Z'
    finalizers:
    - wrangler.cattle.io/harvester-network-nad-controller
    - wrangler.cattle.io/harvester-network-manager-nad-controller
    generation: 1
    labels:
    network.harvesterhci.io/clusternetwork: cn-data
    network.harvesterhci.io/ready: 'true'
    network.harvesterhci.io/type: L2VlanNetwork
    network.harvesterhci.io/vlan-id: '100'
    name: vm100
    namespace: default
    resourceVersion: '1525839'
    uid: 8dacf415-ce90-414a-a11b-48f041d46b42
    spec:
    config: >-
    {"cniVersion":"0.3.1","name":"vm100","type":"bridge","bridge":"cn-data-br","promiscMode":true,"vlan":100,"ipam":{},"mtu":9000} // MTU 已更新
  7. 啟動所有附加到目標叢集網路的虛擬機器。

    虛擬機器應該已經繼承了新的 MTU。您可以在客體作業系統中使用 ip link 和 ping 8.8.8.8 -s 8800 命令來驗證這一點。

  8. 驗證虛擬機器工作負載是否正常執行。

important

Harvester 對更改 MTU 值時可能發生的任何損壞或資料遺失不承擔責任。

更改具有附加儲存網路的網路配置的 MTU​

在此場景中,儲存網路已啟用並附加到目標叢集網路。

儲存網路由 driver.longhorn.io 使用,這是 Harvester 的預設 CSI 驅動程式。Longhorn 負責佈建根磁碟區,因此更改 MTU 會影響所有虛擬機器。

警告
  • MTU 會影響 Harvester 節點和交換器、路由器等網路裝置。需要仔細規劃和測試以確保更改 MTU 不會對系統產生不利影響。有關更多資訊,請參閱網路拓撲。
  • 您必須在自訂叢集網路的所有網路配置中使用相同的 MTU。
  • 在配置更改期間,所有叢集操作都會中斷。
  • 本節中的資訊不適用於內建的 mgmt 叢集網路。

如果您必須更改 MTU,請執行以下步驟:

  1. 停止所有虛擬機器。

  2. 停用儲存網路。

    等待一段時間讓設定被停用,然後驗證更改是否已套用。

  3. 檢查目標叢集網路的網路配置。

    如果存在多個網路配置,請記錄每個的節點選擇器,並移除配置直到只剩下一個。

  4. 更改剩餘網路配置的 MTU。

    important

    您還必須在對等外部交換器或路由器上更改 MTU。

  5. 使用 Linux ip link 命令驗證 MTU 是否已更改。

    如果網路配置選擇多個 Harvester 節點,請在每個節點上執行該命令。

    輸出必須顯示相關 *-br 裝置的新 MTU 和狀態 UP。在以下範例中,裝置為 cn-data-br,新 MTU 為 9000。

    Harvester node $ ip link show dev cn-data-br
    |new MTU| |state UP|
    3: cn-data-br: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:6e:5c:2a brd ff:ff:ff:ff:ff:ff
    備註

    當狀態為 UNKNOWN 時,Harvester 和外部交換器或路由器上的 MTU 值可能不匹配。

  6. 使用 ping 等命令在 Harvester 節點上測試新 MTU。您必須將訊息發送到具有新 MTU 的 Harvester 節點或具有外部 IP 的節點。

    在以下範例中,網路為 cn-data,CIDR 為 192.168.100.0/24,閘道為 192.168.100.1。

    1. 在網橋裝置上設定 IP 192.168.100.100。

      $ ip addr add dev cn-data-br 192.168.100.100/24
    2. 透過閘道為目標 IP(例如,8.8.8.8)添加路由。

      $ ip route add 8.8.8.8 via 192.168.100.1 dev cn-data-br
    3. 從新 IP 192.168.100.100 ping 目標 IP。

      $ ping 8.8.8.8 -I 192.168.100.100
      PING 8.8.8.8 (8.8.8.8) from 192.168.100.100 : 56(84) bytes of data.
      64 bytes from 8.8.8.8: icmp_seq=1 ttl=59 time=8.52 ms
      64 bytes from 8.8.8.8: icmp_seq=2 ttl=59 time=8.90 ms
      ...
    4. 使用不同的封包大小 ping 目標 IP 以驗證新 MTU。

      $ ping 8.8.8.8 -s 8800 -I 192.168.100.100
      PING 8.8.8.8 (8.8.8.8) from 192.168.100.100 : 8800(8828) bytes of data
      參數 `-s` 指定 ping 封包大小,可以測試新 MTU 是否真正有效
    5. 移除您用於測試的路由。

      $ ip route delete 8.8.8.8 via 192.168.100.1 dev cn-data-br
    6. 移除您用於測試的 IP。

      $ ip addr delete 192.168.100.100/24 dev cn-data-br
  7. 添加回您移除的網路配置。

    important

    您必須在每個配置中更改 MTU,並驗證新 MTU 是否已套用。如果新網路配置的 MTU 與現有網路配置的 MTU 不匹配,Harvester webhook 會拒絕該網路配置。

  8. 啟用並配置 Harvester 儲存網路設定,確保符合先決條件。

  9. 等待一段時間讓設定被啟用,然後驗證更改是否已套用。storagenetwork 會使用新的 MTU 值執行。

    所有附加到目標叢集網路的 VM 網路會自動繼承新的 MTU 值。

    在以下範例中,網路名稱為 vm100。執行命令 kubectl get NetworkAttachmentDefinition.k8s.cni.cncf.io vm100 -oyaml 以驗證 MTU 值是否已更新。

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
    annotations:
    network.harvesterhci.io/route: '{"mode":"auto","serverIPAddr":"","cidr":"","gateway":""}'
    creationTimestamp: '2025-04-25T10:21:01Z'
    finalizers:
    - wrangler.cattle.io/harvester-network-nad-controller
    - wrangler.cattle.io/harvester-network-manager-nad-controller
    generation: 1
    labels:
    network.harvesterhci.io/clusternetwork: cn-data
    network.harvesterhci.io/ready: 'true'
    network.harvesterhci.io/type: L2VlanNetwork
    network.harvesterhci.io/vlan-id: '100'
    name: vm100
    namespace: default
    resourceVersion: '1525839'
    uid: 8dacf415-ce90-414a-a11b-48f041d46b42
    spec:
    config: >-
    {"cniVersion":"0.3.1","name":"vm100","type":"bridge","bridge":"cn-data-br","promiscMode":true,"vlan":100,"ipam":{},"mtu":9000} // MTU 已更新
  10. 啟動所有附加到目標叢集網路的虛擬機器。

    虛擬機器應該已經繼承了新的 MTU。您可以從客體作業系統使用 Linux ip link 命令和 ping 8.8.8.8 -s 8800 命令來驗證這一點。

  11. 驗證虛擬機器工作負載是否正常執行。

important

Harvester 對更改 MTU 值時可能發生的任何損壞或資料遺失不承擔責任。