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:
-
前往 Networks > IP Pools 頁面並選擇 Create。
-
指定 IP Pool 的 Name。
-
前往 Range 標籤頁,為 IP Pool 指定 IP ranges。您可以新增多個 IP 範圍。

-
前往 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 的範圍內。
- 網路是硬性條件。可選的 IP Pool 必須匹配 LB annotation
-
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 Pooldefault-ip-pool,而您想將 IP Pooldefault-ip-pool遷移到範圍為192.168.200.0/24的不同 IP Pooldefault-ip-pool-2。不允許為相同範圍指定超過一個 IP Pool,但您可以給 IP Pooldefault-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
- 建議直接從 Harvester UI 建立 IP Pool,這會將選擇器範圍的
Project和Guest Kubernetes Cluster留空。 - 如果您只能從 Rancher Manager UI 建立 IP Pool,請將範圍的
Project和Guest Kubernetes Cluster設定為All或None。
客體叢集類型負載平衡器的 IP Pool
- 建議從 Rancher Manager UI 建立 IP Pool,因為它允許您調整
Project和Guest Kubernetes Cluster以實現更好的資源管理和隔離。 - 建立全域 IP Pool 時請謹慎,因為一個客體叢集可能會分配過多 IP 而導致其他叢集資源匱乏。如果任何 IP 仍在使用中,則無法刪除該 Pool。