跳至主要内容

IP Pool

自 v1.2.0 起可用

Harvester IP Pool 是專為 Harvester 負載平衡器(LB)提供的內建 IP 位址管理(IPAM)解決方案。

功能特點​

  • 多重 IP 範圍: 每個 IP Pool 可以包含多個 IP 範圍或 CIDR。

  • 分配歷史記錄: IP Pool 會追蹤每個 IP 位址的分配歷史記錄,並優先根據負載平衡器名稱分配先前已分配過的位址。

    status:
    allocatedHistory:
    192.168.178.8: default/rke2-default-lb-pool-2fab9ac0
  • 範圍: IP Pool 可以限定於特定的網路、專案、命名空間或客體叢集。

如何建立​

若要建立新的 IP Pool:

  1. 前往 Networks > IP Pools 頁面並選擇 Create。

  2. 指定 IP Pool 的 Name。

  3. 前往 Range 標籤頁,為 IP Pool 指定 IP ranges。您可以新增多個 IP 範圍。

  4. 前往 Selector 標籤頁,指定 IP Pool 的 Scope 和 Priority。

當您從 Harvester UI 操作時,Scope 僅包含 Namespace。點擊 Add Scope 以新增項目。

從 Rancher Manager UI 建立 IP Pool​

如果 Harvester 叢集是從 Rancher Manager UI > Virtualization Management 匯入到 Rancher Manager,IP Pools 區段中的 Network 標籤頁看起來會有所不同。

Scope 包含 Project、Namespace 和 Guest Kubernetes Cluster。更多資訊請參閱多租戶範例和 Rancher 的專案與 Kubernetes 命名空間。

當一個 Pool 只有一個 Scope 且每個都選擇 All 時,此 IP Pool 會自動標記為 global。

選擇策略​

每個 IP Pool 都有特定的範圍,您可以在 LB annotations 中指定相應的需求。符合指定需求的 IP Pool 會自動為 LB 分配 IP 位址。

  • LB 使用以下 annotations 來表達需求(所有 annotations 都是選填的):

    • loadbalancer.harvesterhci.io/network 指定客體叢集節點使用的 VM 網路。
    • loadbalancer.harvesterhci.io/project 和 loadbalancer.harvesterhci.io/namespace 識別組成客體叢集的 VM 的專案和命名空間。
    • loadbalancer.harvesterhci.io/cluster 表示客體叢集的名稱。
  • IP Pool 有一個選擇器,包含網路和範圍,用於匹配 LB 的需求。

    • 網路是硬性條件。可選的 IP Pool 必須匹配 LB annotation loadbalancer.harvesterhci.io/network 的值。
    • 除了全域 IP Pool 之外,如果優先級為 0,每個 IP Pool 都有一個與其他 Pool 不同的唯一範圍。如果 LB 想要從此 Pool 取得 IP,其專案、命名空間或叢集名稱應在 IP Pool 的範圍內。
  • spec.selector.priority 指定 IP Pool 的優先級。數字越大,優先級越高。如果優先級不是 0,則值應該不同。優先級可協助您將舊的 IP Pool 遷移到新的 IP Pool。

  • 如果 IP Pool 的範圍匹配所有專案、命名空間和客體叢集,則稱為全域 IP Pool,且只允許一個全域 IP Pool。如果沒有 IP Pool 符合 LB 的需求,IPAM 將從全域 IP Pool(如果存在)分配 IP 位址。

範例​

  • 範例 1: 您希望為 default 命名空間設定一個範圍為 192.168.100.0/24 的 IP Pool。在此情況下,default 命名空間內的所有負載平衡器都將從此指定的 IP Pool 接收 IP 位址:

    apiVersion: networking.harvesterhci.io/v1beta1
    kind: IPPool
    metadata:
    name: default-ip-pool
    spec:
    ranges:
    - subnet: 192.168.100.0/24
    selector:
    scope:
    namespace: default
  • 範例 2: 您有一個部署在網路 default/vlan1 內的客體叢集 rke2,其 project/namespace 名稱為 product/default。如果您想為它設定一個專屬的 IP Pool 範圍 192.168.10.10-192.168.10.20。請參考以下 YAML 設定:

    apiVersion: networking.harvesterhci.io/v1beta1
    kind: IPPool
    metadata:
    name: rke2-ip-pool
    spec:
    ranges:
    - subnet: 192.168.10.0/24
    rangeStart: 192.168.10.10
    rangeEnd: 192.168.10.20
    selector:
    network: default/vlan1
    scope:
    - project: product
    namespace: default
    guestCluster: rke2
  • 範例 3: 如果您已經為 default 命名空間指定了 IP Pool default-ip-pool,而您想將 IP Pool default-ip-pool 遷移到範圍為 192.168.200.0/24 的不同 IP Pool default-ip-pool-2。不允許為相同範圍指定超過一個 IP Pool,但您可以給 IP Pool default-ip-pool-2 比 default-ip-pool 更高的優先級。請參考以下 YAML 設定:

    apiVersion: networking.harvesterhci.io/v1beta1
    kind: IPPool
    metadata:
    name: default-ip-pool-2
    spec:
    ranges:
    - subnet: 192.168.200.0/24
    selector:
    priority: 1 # 優先級高於 default-ip-pool
    scope:
    namespace: default
  • 範例 4: 您想設定一個 CIDR 範圍為 192.168.20.0/24 的全域 IP Pool:

    apiVersion: networking.harvesterhci.io/v1beta1
    kind: IPPool
    metadata:
    name: global-ip-pool
    labels:
    loadbalancer.harvesterhci.io/global-ip-pool: 'true' # 由控制器自動新增
    spec:
    ranges:
    - subnet: 192.168.20.0/24
    selector:
    scope:
    - project: "*"
    namespace: "*"
    guestCluster: "*"

分配策略​

  • IP Pool 根據分配歷史記錄優先分配先前已分配過的 IP 位址。
  • IP 位址按升序分配。

最佳實踐​

VM 類型負載平衡器的 IP Pool​

  1. 建議直接從 Harvester UI 建立 IP Pool,這會將選擇器範圍的 Project 和 Guest Kubernetes Cluster 留空。
  2. 如果您只能從 Rancher Manager UI 建立 IP Pool,請將範圍的 Project 和 Guest Kubernetes Cluster 設定為 All 或 None。

客體叢集類型負載平衡器的 IP Pool​

  1. 建議從 Rancher Manager UI 建立 IP Pool,因為它允許您調整 Project 和 Guest Kubernetes Cluster 以實現更好的資源管理和隔離。
  2. 建立全域 IP Pool 時請謹慎,因為一個客體叢集可能會分配過多 IP 而導致其他叢集資源匱乏。如果任何 IP 仍在使用中,則無法刪除該 Pool。