管理 OpenShift 虛擬化的虛擬網路介面

虛擬私有雲 4.20 及後 僅裸金屬工作節點 僅 RHCOS OVN- Kubernetes 需要 CNI

您可以使用虛擬網路介面 (VNI),為在 Red Hat OpenShift on IBM Cloud 叢集上執行的虛擬機器 (VM) 啟用進階網路連線功能,OpenShift Virtualization。

瞭解虛擬網路介面

虛擬網路介面 (VNI) 是 IBM Cloud VPC 抽象,代表個別網路連線。 VNIs 嵌入了網路連線的屬性,例如 IP 位址、MAC 位址及其所屬的 VPC 子網路。

VNI 只能在具有裸金屬工作節點的群集中使用。

Red Hat OpenShift on IBM Cloud 使用基於 VNI 的網路附件,可在群集上執行的工作負載與群集外的工作負載之間建立彈性連線。 VNI 透過使用 OVN 使用者定義網路(UDN)與 Localnet 層級結構,使基於 OpenShift 虛擬化的虛擬機 (VM) 可以直接透過網路接觸到 VPC 網路。 有了連接至裸金屬工作節點的 VNI,虛擬機器的即時遷移可以保留網路連線,因為 VNI 可以隱含浮動,並在同一區域內的裸金屬工作實體之間跟隨 VM 工作負載。

主要特性

每個工作節點的靜態 VNI
在 IBM Cloud VPC 中建立基於裸機的 Red Hat OpenShift on IBM Cloud 群集或新 Worker pool 時,會自動建立兩個 VNI,並靜態連接至每個裸機 Worker 節點。 一個 VNI 可處理一般 Worker 流量(pod 網路、overlay UDN 及主站通訊)。 第二個 VNI 充當您管理的動態 VNI 附件的載具。
動態 VNI 附件
您可以在群集建立後,依需求建立和管理 VNI。 動態 VNI 可以附加到特定工作人員,或設定為在同一區域的工作人員之間浮動,在即時移轉過程中跟隨 VM 工作負載。
即時遷移支援
透過連接至裸金屬工作節點的 VNI,OpenShift 虛擬化虛擬機器的即時遷移可以保留網路連線。 VNI 隱含浮動並跟隨同一區域內裸金屬工作站實體之間的工作負載。

有關 VNI 的重要限制和注意事項,請參閱 限制和注意事項

跨帳戶附件

在 Red Hat OpenShift on IBM Cloud 中,工作節點不會在您的帳戶中佈建,這意味著 VNI 的生命週期管理與獨立的 VPC 裸機實體略有不同。 Red Hat OpenShift on IBM Cloud 群集管理員對 VNI 的附件有不同的可見性,因為這些附件是附加到帳戶內不可見的工作負載。 本文件涵蓋 VNI 管理的差異。

如需獨立 VPC 裸金屬實體上 VNI 的詳細資訊,請參閱 關於虛擬網路介面

限制與注意事項

靜態 VNI 修改
請勿修改自動為每個工作站節點建立的靜態 VNI。 雖然這些 VNI 在您的 VPC 帳戶中可見,但不支援對其設定進行任何變更。 這包括附加浮動 IP、變更安全群組或修改任何其他 VNI 屬性。 修改靜態 VNI 可能會導致群集連線問題。
浮動附件的 VNI 修改限制
您無法修改浮動 (群集範圍內) 動態附件的 VNI 屬性。 這包括變更 VNI 名稱、浮動 IP 位址、基礎架構 NAT 設定和安全群組指派。 若要更新這些設定,您必須先將 VNI 分離、進行變更,然後再將它重新接上群集。 此限制是暫時性的。
區域限制
VNI 連接到特定的 VPC 子網路,無法在區域之間浮動。 在多區 Red Hat OpenShift on IBM Cloud 叢集中,VNI 只能處理在配置 VNI 的相同區域中叢集工作站上執行的工作負載的流量。 這也表示,當特定 VM 使用 Localnet UDN 上的 VNI 時,您必須避免 OpenShift 虛擬化 VM 區域間的即時遷移。
裸機需求
VNI 僅支援裸金屬工作節點。 虛擬伺服器實體 (VSI) 工作節點不支援 VNI。
RHCOS 要求
工作節點必須執行 Red Hat CoreOS (RHCOS) 作業系統。
OVN- Kubernetes CNI
叢集必須使用 OVN- Kubernetes Container Network Interface (CNI) 外掛程式。
版本需求
VNI 支援需要 OpenShift 4.20 或更新版本。
本地網路 UDN 限制
Localnet UDN 在 OVN 端已停用 IP 位址管理 (IPAM),這表示不會從 OVN 為 Pod 指派靜態 IP 位址。 此設定專為使用 DHCP 或在客座作業系統內設定靜態 IP 的 VM 工作負載而設計。 一般 pod 無法附加到 localnet UDN。

必要條件

開始之前,請確認您擁有下列資源和權限。

  • Red Hat OpenShift on IBM Cloud 叢集,版本為 4.20 或更新版本,具有裸金屬工作節點
  • 已建立 VNI 的 VPC 基礎架構
  • 工作節點上的 RHCOS 作業系統
  • OpenShift 已安裝虛擬化操作員
  • 為 OpenShift 虛擬化配置的儲存設備
  • 操作員平台存取角色為 Kubernetes Service 在 IBM Cloud IAM
  • IBM Cloud IAM 中 VPC 基礎結構服務的編輯管理員平台存取角色
  • 允許列名帳戶存取 VNI 功能
  • OVN- Kubernetes CNI ( 4.20 + 中需要 VNI 支援)

有關多重網路設定的一般資訊,請參閱 Red Hat OpenShift 多重網路說明文件

為 Pod 和虛擬機器建立覆疊 UDN

您可以建立覆疊使用者定義網路,供 Pod 或 VM 工作負載使用。 OpenShift 使用者定義網路的主控台 UI 體驗會隨著最近的版本而改變。 本文件中的範例使用 YAML 定義以達到重複使用的目的。

建立主要 UDN

若要將主使用者定義網路用於 Pod 或 VM 工作負載,請先建立 UDN 本身。

可跨命名空間使用的群集使用者定義網路範例:

apiVersion: k8s.ovn.org/v1
kind: ClusterUserDefinedNetwork
metadata:
  name: primary
spec:
  namespaceSelector:
    matchLabels:
      kubernetes.io/metadata.name: green
  network:
    layer2:
      ipam:
        lifecycle: Persistent
      role: Primary
      subnets:
        - 10.0.0.0/24
    topology: Layer2

然後,建立使用它的命名空間。 命名空間在建立時必須包含特定的標籤 (稱為 k8s.ovn.org/primary-user-defined-network) 以供 Primary UDN 使用。

範例:

kind: Namespace
apiVersion: v1
metadata:
  name: green
  labels:
    k8s.ovn.org/primary-user-defined-network: ''

一旦 (C)UDN 和命名空間就位,在此命名空間中建立的任何工作負載都會使用預設路由存取 UDN。

建立第二 UDN

Secondary UDN 設定與 Primary UDN 相似,但角色設定為 Secondary。 如需詳細資訊,請參閱 Red Hat OpenShift 多重網路說明文件

使用 VPC 負載平衡器揭露虛擬機器

您可以使用 VPC 應用程式負載平衡器,在不使用 UDN 或 localnet VNI 的情況下揭露虛擬機器。 如需有關設定負載平衡器的詳細資訊,請參閱 有關 VPC 負載平衡器

設定 localnet 使用者定義網路

Localnet UDN 需要準備 Red Hat OpenShift on IBM Cloud 集群的 OVN 網路。 在裸金屬群集節點上,兩個靜態網路介面在主機作業系統上有可預測的名稱。 專門用於傳輸動態附加 VNI 流量的網路介面稱為 eth1。 利用 Localnet 需要在 eth1 之上,在裸機群集節點上建立專用的 OVS 橋接。 準備用來連接 VNI 的 VLAN ID。 CUDN 資源中也會提及。

安裝 NMState 運算符號

OpenShift 虛擬化服務 叢集中已預先安裝 NMState 操作員,並由「openshift-virtualization」附加元件進行管理。 若您使用的是虛擬化服務,請跳過此步驟。

  1. 從 OperatorHub Red Hat OpenShift on IBM Cloud 主控台或使用 CLI 部署 NMState Operator。

  2. 使用預設組態建立 NMState 範例。

    apiVersion: nmstate.io/v1
    kind: NMState
    metadata:
      name: nmstate
    spec:
      probeConfiguration:
        dns:
          host: root-servers.net
    

建立 OVS 橋接

OpenShift 虛擬化服務 叢集已預先配置所需的 NNCP 資源。 您僅需針對採用手動安裝 OpenShift Virtualization 的標準 OpenShift 叢集,手動建立這些資源。

  1. 透過部署下列 NMState 自訂資源,建立附有 eth1 的專用 OVS 橋接。

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: "br-eth1"
    spec:
      desiredState:
        interfaces:
        - name: "br-eth1"
          description: A dedicated OVS bridge with a NIC as a port
          type: ovs-bridge
          state: up
          bridge:
            allow-extra-patch-ports: true
            options:
              stp: false
            port:
            - name: "eth1"
    
  2. 檢查自訂資源狀態,並等待所有適用的群集節點核對橋接器建立請求。

  3. 透過建立下列 NMState 自訂資源,將新的 OVS 橋接到預設的 OVS 橋。 將 vpc-vlans 改為您想要的網路名稱。

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: "vpc-vlans"
    spec:
      desiredState:
        ovn:
          bridge-mappings:
          - localnet: "vpc-vlans"
            bridge: "br-eth1"
            state: present
    
  4. 檢查自訂資源狀態,並等待所有適用的群集節點對齊橋接映射請求。

建立 localnet 使用者定義網路

建立 UDN 或 ClusterUserDefinedNetwork (CUDN),使用選取的 VLAN 提供來自 VNI 的流量。

apiVersion: k8s.ovn.org/v1
kind: ClusterUserDefinedNetwork
metadata:
  name: "vlan250"
spec:
  namespaceSelector:
    matchExpressions:
    - key: kubernetes.io/metadata.name
      operator: In
      values:
      - "default"
  network:
    topology: Localnet
    localnet:
      role: "Secondary"
      physicalNetworkName: "vpc-vlans"
      ipam:
        mode: Disabled
      vlan:
        mode: Access
        access:
          id: 250

取代下列值:

  • vlan250:您的 CUDN 名稱
  • default:您要使用 CUDN 的命名空間
  • vpc-vlans:您在橋接映射中定義的實體網路名稱
  • 250:您所需的 VLAN ID (範圍:1-500)

至此,特定 VLAN 的網路佈線完成。 您可以使用不同的 VLAN ID 定義多個 CUDN,同時重複使用橋接映射。

完成 localnet UDN 設定後,您可以使用 IBM Cloud 主控台或 IBM Cloud CLI ks vni 指令將 VNI 附加到群集。 請參閱以下章節的範例。

將 VNI 附加到群集

設定 localnet UDN 後,您可以使用 IBM Cloud 主控台或 CLI 將 VNI 附加到群集。

開始之前

  1. 在您的 VPC 中建立 VNI 使用適當的子網路和 IP 位址設定。

  2. 確保您擁有管理群集和 VNI 所需的權限。

從主控台附加 VNI

您可以將 VNI 附加到特定工作站節點 (非浮動) 或群集 (浮動)。 浮動 VNI 可以跟蹤同一區域內工作人員之間的工作負載。

VNI、子網路和工作節點是區域資源。 VNI 計算區域必須與選取的 Worker 區域相符。 對於浮動附件,假設 VNI 的區域,浮動附件也具有區域約束。 VNI 可以從任意子網路連接,但只能從群集的同一 VPC 內連接。

  1. Red Hat OpenShift on IBM Cloud 群集主控台,選擇您的群集。

  2. 在導覽功能表中,按一下網路 > VNI 附加元件

  3. 按一下附加 VNI

  4. 附加 VNI 面板中,設定下列設定:

    • 子網路:選取 VNI 所在的子網路。 只有與您的工作站位於同一區域的子網路才可用。
    • 工作人員節點:選擇要將 VNI 附加到的特定工作站節點,或選擇「所有工作站節點」以建立浮動 VNI 附加,可跟隨同一區域內工作站之間的工作負載。
    • VNI:從選取的子網路中可用的 VNI 中選擇要連接的 VNI。
    • VLAN ID:輸入與您的 localnet UDN 設定相符的 VLAN ID(範圍:1-500)。
    • 自動刪除:可選。 選擇此選項可在 VNI 從群集移除時自動刪除。
  5. 按一下連接

從 CLI 附加 VNI

您可以將 VNI 附加到特定工作站節點 (非浮動) 或群集 (浮動)。 浮動 VNI 可以跟蹤同一區域內工作人員之間的工作負載。

VNI、子網路和工作節點是區域資源。 VNI 計算區域必須與選取的 Worker 區域相符。 對於浮動附件,假設 VNI 的區域,浮動附件也具有區域約束。 VNI 可以從任意子網路連接,但只能從群集的同一 VPC 內連接。

若要將虛擬網路介面附加到特定工作站節點,請執行下列指令。

ibmcloud ks vni attach baremetal --worker WORKER_ID --vni VNI_ID --vlan VLAN_ID [--auto-delete]

若要將浮動 VNI 附加到群集,請執行下列指令。

ibmcloud ks vni attach baremetal --cluster-id CLUSTER_ID --vni VNI_ID --vlan VLAN_ID [--auto-delete]
--worker WORKER_ID
工作節點的 ID。 若要列出 Worker ID,請執行 ibmcloud ks workers --cluster CLUSTER
--cluster-id CLUSTER_ID
群集的 ID。 若要列出叢集 ID,請執行 ibmcloud ks clusters
--vni VNI_ID
要附加的 VNI 的 ID。
--vlan VLAN_ID
附件的 VLAN ID(範圍:1-500)。 這必須符合 CUDN 設定中的 VLAN ID。
--auto-delete
可選:從群集移除 VNI 時,自動刪除該 VNI。

範例

ibmcloud ks vni attach baremetal --vni 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba --worker kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123 --vlan 251

輸出範例

OK
Successfully attached VNI 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba to worker node kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123.
Worker Node ID                                         VNI ID                                      VLAN ID
kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123   0716-aac49630-f3b4-4ef6-9a3a-5145481697ba   251

檢視 VNI 附件

您可以從 IBM Cloud 主控台或使用 CLI 檢視 VNI 附件。

從主控台檢視 VNI 附件

  1. Red Hat OpenShift on IBM Cloud 群集主控台,選擇您的群集。

  2. 在導覽功能表中,按一下網路 > VNI 附加元件

  3. Virtual network interface attachments(虛擬網路介面附加元件 )頁面會顯示一個表格,其中包含每個附加 VNI 的下列資訊:

    • VNI 名稱:虛擬網路介面的名稱
    • 工作節點名稱:附加 VNI 的工作節點,或指出是否為浮動附加
    • 子網路:與 VNI 相關聯的 VPC 子網路
    • VLAN ID:用於附件的 VLAN ID
    • 主 IP:VNI 的主 IP 位址
  4. 可選:使用頁面頂端的篩選器,依子網路或工作站節點篩選 VNI。

從 CLI 檢視 VNI 附件

若要列出連接至群集的所有 VNI,請執行下列指令。

ibmcloud ks vni ls --cluster-id CLUSTER_ID

若要列出連接至特定工作者的 VNI,請執行下列指令。

ibmcloud ks vni ls --worker WORKER_ID

輸出範例

ibmcloud ks vni ls --cluster-id c9pqfcmw0tq431jdnrrg
OK
VNI ID                                      Worker Node                                            IP Address   MAC Address         VLAN   Floating   Auto-delete
0716-d97d3626-acb2-476b-8b12-bcafa1dec5bb   kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000456   10.240.1.5   02:00:02:00:73:A5   250    -          false
0716-aac49630-f3b4-4ef6-9a3a-5145481697ba   kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123   10.240.1.4   02:00:01:00:73:A5   251    -          false

分離 VNI

您可以從 IBM Cloud 主控台或使用 CLI 來分離 VNI。

從控制台分離 VNI

  1. Red Hat OpenShift on IBM Cloud 群集主控台,選擇您的群集。

  2. 在導覽功能表中,按一下網路 > VNI 附加元件

  3. 虛擬網路介面附件表中,找到您要分離的 VNI。

  4. 按一下 VNI 的動作功能表圖示 (⋯),然後選擇 Detach

  5. 在確認對話框中,按一下 Detach 確認動作。

從 CLI 刪除 VNI

若要從 Worker 節點分離 VNI,您必須同時指定 VNI ID 和 Worker ID。

ibmcloud ks vni detach --worker WORKER_ID --vni VNI_ID

對於浮動 VNI,首先列出 VNI 以找出目前的 Worker ID,然後再使用該 Worker ID 離開。

範例

ibmcloud ks vni detach --vni 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba --worker kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123
Detach VNI 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba from worker node kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123? This action cannot be undone. [y/N]> y
OK
Successfully detached VNI 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba from worker node kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123.

使用 OpenShift 虛擬化的 VNIs

附加 VNI 並設定 localnet UDN 之後,您就可以在 OpenShift Virtualization 虛擬機器上使用它們。

  1. 使用 OpenShift 虛擬化建立虛擬機器,並將 CUDN 新增為輔助網路。 Localnet 附件不能用作主要網路。 您可以使用 OpenShift 控制台來新增附件。

  2. 指定附件的 MAC 位址,以允許 VM 作業系統使用 DHCP 獲得其 IP 位址。 或者,您也可以在 VM 中將 VNI IP 位址靜態指定給相關的網路介面。

有關建立和管理虛擬機器的詳細資訊,請參閱下列 Red Hat 文件:

疑難排解 VNI

為什麼不能將一般 Pod 附加到 localnet UDN?

Localnet UDN 在 OVN 端已停用 IP 位址管理 (IPAM),這表示不會從 OVN 為 Pod 指派靜態 IP 位址。 此設定專為使用 DHCP 或在客座作業系統內設定靜態 IP 的 VM 工作負載而設計。 這些選項無法用於 Pod 工作負載。

為什麼跨工人池的即時移轉尚未完成?

不同的 Worker 池可能有不同的 Worker 風格,使用不同世代和能力的 CPU。 如果完整的 CPU 功能集對 VM 工作負載是透明可見的,您就無法將 VM Live 遷移到其他不支援所有 CPU 功能的 Worker。 您可以在一開始就限制客座作業系統可見的 CPU 功能,以獲得更多跨 Worker flavors 的相容性。

為什麼動態附加的 VNI 無法運作?

請檢查下列項目:

  • 驗證 CUDN 中的 VLAN ID 是否與 VNI 附件中的 VLAN ID 相符。 如果 VLAN 不匹配,VPC DHCP 可能仍能運作,而不會產生更多流量。
  • 如果未啟用浮動,請確定工作負載排程在附加 VNI 的工作站上。
  • 驗證專用 OVS 橋接和映射是否存在於工作者身上。 檢查 NodeNetworkConfigurationPolicy 資源狀態。