針對 Red Hat OpenShift 虛擬化在 上的網路設計 IBM Cloud VPC
針對 IBM Cloud VPC 上的 Red Hat OpenShift 虛擬化環境設計網路架構,內容涵蓋 VPC 網路、OpenShift 軟體定義網路(SDN)以及 Open Virtual Networking(OVN)使用者自定義網路。
Red Hat OpenShift Virtualization on IBM Cloud VPC 中的網路設計有以下不同層級。
- VPC 網路
- Red Hat OpenShift 人脈建立
- OVN 網路
主要的網路架構元素如下圖所示。
IBM Cloud VPC 人脈建立
您使用 IBM Cloud VPC 網路來部署和管理雲端資源。 它為您的工作負載 (包括虛擬伺服器、容器及裸機部署) 提供基礎,可協助確保網路分割、安全性及可擴充性。
您需要建立一個 VPC,才能部署一個 Red Hat® OpenShift® Kubernetes Service 叢集。
具有子網路的預設私人網路
您需要在至少一個可用性區域中建立 VPC 子網路,才能佈建 Red Hat OpenShift Kubernetes Service 群集。 如需詳細資訊,請參閱 Default Private networking with subnets。
負載平衡器
Red Hat OpenShift 匯入控制器部署到您的 Red Hat OpenShift Kubernetes Service 叢集,作為外部網路流量的匯入端點。 在 Red Hat OpenShift Kubernetes Service 叢集中,每個叢集會自動建立一個 VPC 應用程式負載平衡器,以揭露入口控制器。 如需詳細資訊,請參閱 負載平衡器。
Red Hat OpenShift Kubernetes Service 執行下列功能。
- DNS 服務會將路由子網域解析為 VPC 負載平衡器主機名稱。
- VPC 負載平衡器會將 VPC 主機名稱解析為可用的外部 IP 位址,該 IP 位址為已報告為正常運作的入口控制器服務。
- VPC 負載平衡器會將請求傳送至入口控制器服務。
- 入口控制器會透過私有網路,將請求轉發至應用程式 Pod 的私有 IP 位址。
虛擬專用端點
Red Hat OpenShift Kubernetes Service 環境中的虛擬專用端點 (VPE) 主要用於啟用 Red Hat OpenShift 群集與 IBM Cloud 平台服務之間的專用連接,而無需穿越公共網際網路的網路流量。
下表列出了 IBM Cloud 為基本群集作業自動佈建的所有虛擬專用端點。
| Virtual Private Endpoint | 管理者 | 說明 |
|---|---|---|
| iks-api | Kubernetes Service API |
|
| iks-riaas | VPC 基礎結構服務 |
|
| iks-registry | Container Registry |
|
| iks-<叢集_ID> | 特定群集實例 |
|
| iks-cos-config | Cloud Object Storage (設定) |
|
| iks-cos | Cloud Object Storage (資料) |
|
Red Hat OpenShift 虛擬化網路
Red Hat OpenShift 虛擬化使用 Red Hat OpenShift 網路功能,為與容器化工作負載一同執行的虛擬伺服器提供彈性、軟體定義的網路。 瞭解虛擬伺服器網路與 Pod 網路的差異非常重要。 每個虛擬伺服器都在 virt-launcher pod 中執行,該 pod 始終與預設 pod 網路相連。
┌────────────────────────────────┐
│ Worker Node │
│ ┌──────────────────────────┐ │
│ │ virt-launcher │ │ ← Kubernetes Pod Security Context
│ │ pod │ │
│ │ ┌────────────────────┐ │ │
│ │ │ virtual server │ │ │ ← KVM/QEMU Hypervisor Isolation
│ │ │ (QEMU) │ │ │
│ │ └────────────────────┘ │ │
│ └──────────────────────────┘ │
└────────────────────────────────┘
根據您配置和設定虛擬伺服器的方式,虛擬伺服器會共用一個 pod 網路 (或使用 multus)連線到不同的網路。
以下範例說明 Red Hat OpenShift 中的預設 Pod 網路,您可以使用 OVN- Kubernetes 網路來修改。
Pod 網路(叢集網路)
- 每個 Pod 都會從叢集網路的無類別域間路由(CIDR)中取得一個私有 IP 位址
- 提供節點間 pod 對 pod 的通訊
- Pod 在群集中使用其私有 IP 直接通信
- 網路政策在第 3/4 層控制 pod 到 pod 的流量
- 扁平網路模型 - 預設情況下,所有 Pod 都能進行通訊
- Pod 之間沒有 NAT(Pod 對 Pod 的直接通訊)
- 網路政策提供區隔與安全性
- 群集內基於 DNS 的服務發現
- 當虛擬伺服器在 virt-launcher Pod 內執行時,其 IP 會透過 virt-launcher Pod 的 IP 進行網路位址轉換(NAT)
IP 偽裝(來源 NAT(SNAT))
- 當 Pod 啟動對外連線到外部網路時,來源 IP 會被偽裝
- 請求封包的來源 IP 位址已變更為執行該 Pod 的工作節點的 IP 位址
- IP 偽裝是必要的,因為 Pod IP 在群集外無法路由
- 回傳流量會被重新識別為原始 pod IP
- 外部服務會看到來自 Worker 節點 IP 而非 pod IP 的請求
ClusterIP 服務
服務為 Pod 提供穩定的端點和負載平衡。 它們抽象了 pod IP,並為應用程式提供一致的存取點。 ClusterIP Service 提供以下功能。
- 建立只能在群集中存取的虛擬 IP ( ClusterIP )
- ClusterIP 如果未指定,則為預設服務類型
- 提供跨後端 Pod 的內部負載平衡
- 使用 kube-proxy 或 OVN- Kubernetes 來分配流量
以下是 ClusterIP 的使用範例。
- 內部微服務通訊
- 不需要外部存取的後端服務
- 僅由叢集工作負載存取的資料庫服務
- 節點間服務發現
NodePort 服務
服務為 Pod 提供穩定的端點和負載平衡。 它們抽象了 pod IP,並為應用程式提供一致的存取點。 NodePort 服務提供下列功能。
- 在每個工作節點的固定連接埠(30000-32767 範圍)上開放服務
- 透過下列方式提供服務
<NodeIP>:<NodePort> - 自動建立 ClusterIP 服務
- 任何 NodePort 的流量都會轉發至服務
以下範例顯示 NodePort 流量。
- 外部用戶端連接至
<WorkerNodeIP>:<NodePort> - 節點將流量轉送至 ClusterIP 服務
- 服務會平衡後端 Pod 的負載
- 回應會透過 SNAT(來源網路位址轉換)沿著反向路徑傳送
以下的使用範例說明 NodePorts 的用途。
- 開發與測試環境
- 無需負載平衡器即可快速進行外部存取
- 與外部負載平衡器整合
- 客製化負載平衡解決方案
負載平衡器服務
在 IBM Cloud Red Hat OpenShift Kubernetes Service 上,負載平衡器服務會自動提供 VPC 網路負載平衡器或應用程式負載平衡器。 負載平衡服務提供下列功能。
- 自動提供外部負載平衡器
- 為服務指定外部 IP 或主機名稱
- 自動建立 NodePort 和 ClusterIP 服務
- 為服務後端提供第 4 層負載平衡
以下範例顯示 VPC 中的流量。
- 外部用戶端連接至 VPC 負載平衡器 IP 或主機名稱
- VPC 負載平衡器分發至工作節點 NodePorts
- Node 轉送服務 ClusterIP
- 服務會平衡後端 Pod 的負載
以下用例說明負載平衡器的用途。
- 需要專屬外部存取的生產應用程式
- 非 HTTP 通訊協定 ( TCP 或 UDP 服務)
- 需要穩定外部 IP 的應用程式
- 繞過入口層或路由層的服務
Red Hat OpenShift 路線
Red Hat OpenShift 路由透過將完全限定網域名稱(FQDN)映射至後端服務,將服務對外網流量公開,從而使應用程式能在叢集外部被存取。 以下清單顯示 Red Hat OpenShift 路由的主要功能。
- 第 7 層路由 - HTTP / HTTPS 以主機名稱為基礎的路由流量
- 自動 DNS - 路由使用群集子網域:
<route-name>-<namespace>.apps。<cluster-domain> - 無擔保路線 ( HTTP )
- TLS 終止
- 邊緣端接路由 ( TLS at the router)
- 直通路線 ( TLS at Pod)
- 重新加密路由 ( TLS at the router and Pod)
- HAProxy-由 Red Hat OpenShift 輸入控制器(路由器)執行
- 流量管理 - 路徑式路由、流量分割及會話親和性
開放式虛擬網路 (OVN)
OVN- Kubernetes 容器網路介面 (CNI) 外掛程式是 Red Hat OpenShift 虛擬化所推薦的網路選項,可支援與傳統 Pod 網路並行運作的虛擬伺服器網路使用情境。 OVN- Kubernetes 基於 Open Virtual Networking(OVN),並在每個工作節點上使用 Open vSwitch (OVS)。 它支援多租用、NetworkPolicies, 及混合虛擬伺服器和 Pod 網路。 Red Hat OpenShift on IBM Cloud VPC 支援 OVN- Kubernetes 作為預設的網路外掛程式。
對於熟悉 VMware vSphere 和NSX-T的管理員,請參閱 《 OpenShift 中的OVN網路(適用於 vSphere 管理員) 》,以了解OVN概念與 vSphere 對應概念的對照關係。
在 Red Hat OpenShift 與 OVN 中,以下三種網路拓樸提供 Pod 和虛擬伺服器的次要網路連線。
- 第 2 層 ( L2 )- 使用 Geneve 封裝的軟體定義 L2 廣播網域
- 第 3 層 ( L3 )- 具有自訂 IP 子網路的路由網路區段。 L3 網路的每個節點皆擁有獨立的 CIDR(無類別域間路由)。
- Localnet - 直接存取底層實體網路 VLAN
在 Red Hat OpenShift Virtualization on IBM Cloud 中,OVN 第 2 層和 OVN localnet 是用戶定義網路(UDN)的兩種主要拓樸。
- OVN 第 2 層提供類似 NSX 覆疊網段的覆疊網路,透過使用 Geneve 封裝,在整個群集建立軟體定義的 L2 廣播網域。 這些網路與 VPC 子網路隔離。 它們需要連接至 OVN Localnet 的閘道 pod 或虛擬伺服器,以提供 VPC 子網路的入口和出口以及 VPC 路由。
- OVN Localnet 提供對底層 VPC 網路的 VLAN 存取,與 NSX VLAN-backed segments 相似。 在 IBM Cloud VPC 中,這種直接連線可讓虛擬伺服器和 Pod 透過使用虛擬網路介面 (VNI) 和 VLAN 附件直接連線至 VPC 子網路。
下圖為 OVN 與 multus 的虛擬伺服器網路概觀。 預設情況下,Kubernetes (和 Red Hat OpenShift )會使用主要 CNI 外掛程式 (例如 OVN- Kubernetes ),為每個 pod 指定單一網路介面。 Red Hat OpenShift 中的 Multus 是一個 CNI 外掛程式,可為 Pod 和虛擬伺服器啟用多個網路介面。
最初,只有 OVN 第 2 層網路可用。
OVN 使用者定義的網路
Red Hat OpenShift 虛擬化
Red Hat OpenShift 中的使用者定義網路(UDN)是由 OVN- Kubernetes 提供的自訂網路。 UDN 取代預設群集網路 (也稱為預設 Pod 網路) UDN 用來建立擁有自己 IP 子網路、閘道和路由網域的網路。 UDN 獨立於主 pod 網路,通常在工作負載需要下列功能時使用。
- 與群集中其他應用程式的網路隔離
- 自訂 IP 位址範圍或重疊子網路
- 直接控制選定命名空間或工作負載之間的東西向流量
- 與需要多個網路介面的虛擬伺服器 ( Red Hat OpenShift virtualization) 整合
- 針對安全或合規要求的專用網段
與預設的 Pod 網路不同,UDN 是明確附加到命名空間的。 每個 UDN 都會在 OVN 中建立一個額外的邏輯交換器。 當 UDN 被標示為命名空間的主要使用者定義網路時,該命名空間中的所有 pod 和虛擬伺服器都會使用該 UDN 作為主要網路,而非群集預設網路。
群集使用者定義網路(CUDN)透過提供不屬於任何特定命名空間的群集範圍資源,擴展了 UDN 概念。 CUDN 已建立,並與一個或多個命名空間相關聯。 不同於名稱空間範圍 NetworkAttachmentDefinition (NAD) 資源需要每個名稱空間一個,CUDN 會在名稱空間中自動建立 NAD,當這些名稱空間被加入 CUDN 定義時。
UDN 可根據範圍、附加方式和拓樸結構提供彈性的網路選項:
網路範圍
- Namespace-scoped UDN - 僅限於單一命名空間的網路定義,每個命名空間需要單獨的 NetworkAttachmentDefinitions
- 群集範圍內的 CUDN - 網路定義在群集範圍內可用,可在選取的命名空間中自動建立 NetworkAttachmentDefinitions
附著方式
- 主要網路 - 作為命名空間中所有 Pods/ 虛擬伺服器的預設網路,取代群集預設網路
- 輔助網路 - 透過 Multus CNI 連接,提供 Pods/ 虛擬伺服器與主網路的額外網路介面
網路拓蹼
- 第 2 層 — 透過 Geneve 封裝技術建立軟體定義的 L2 廣播域,該技術可實現基於位址解析協定 (ARP) 的發現機制,以及 MAC 至 MAC 的通訊
- 第 3 層 - 具有自訂 IP 子網路和閘道的路由網路區段
- Localnet - 透過使用虛擬網路介面 (VNI) 附件,直接以 VLAN 存取底層 VPC 子網路
您可以結合這些特性,建立客製化的網路解決方案。 例如,使用 localnet 頂層結構的群集範圍 CUDN 可以提供多個命名空間,並將其作為主要或次要網路,直接進行 VPC 子網路存取。
OVN 第 2 層網路
OVN 第 2 層網路是軟體定義的第 2 層廣播域,類似於 NSX 覆疊網段或傳統 VLAN。 第 2 層完全在 OVN 中透過群集現有的網路基礎架構使用 Geneve 封裝來實作。 第 2 層網路可讓 Pod 和虛擬伺服器像在相同的乙太網段上一樣進行通訊,並支援 ARP 發現、廣播、群播和直接 MAC 對 MAC 通訊。
Red Hat OpenShift 群集有一個主要群集網路,其中 pod 和虛擬伺服器從預設群集 CIDR 接收 IP,而預設群集 CIDR 則透過 OVN 路由。 您可以透過 ClusterUserDefinedNetwork (CUDN) 或命名空間範圍 UDN 定義第二層網路。 第二層網路是您在預設 pod 網路之外建立的任何額外網路。
下列項目是第 2 層網路的主要特徵。
- 提供 OVN 所建立的第 2 層廣播網域與 IPAM、MAC 指派與連線能力
- 次要網路中的 Pod 名稱沒有內建 DNS 解析
- 當流量從虛擬伺服器傳出時,來自主要第 2 層網路的流量會進行來源網路位址轉換(NAT),並透過路由存取第 2 層網路;該路由可透過
FRR-K8s以及 VPC 路由進行設定 - 除非明確設定,否則第二層網路預設是隔離的,無法直接存取網際網路
- 適用於群集中虛擬伺服器與虛擬伺服器之間的通訊,以及依賴群播的應用程式
OVN Localnet 網路
OVN Localnet 網路可讓虛擬伺服器和 Pod 直接以 VLAN 方式存取底層 VPC 網路基礎架構。 OVN Localnet 可讓虛擬伺服器和 Pod 透過使用虛擬網路介面 (VNI) 和 VLAN 附件連接至 VPC 子網路。
透過 VLAN 附加元件,您可以直接將 Red Hat OpenShift Virtualization 上執行的虛擬伺服器附加到 VPC 子網路。 您可以使用此方法,透過為工作負載提供一致的網路,將現有的 VPC 子網路設計用於新的或遷移的虛擬伺服器。
Localnet 網路要求連接至 VPC 子網路的每個虛擬伺服器 NIC 需要符合下列要求:
- 虛擬網路介面 (VNI) 資源可定義從 VPC 子網路預留的 IP 位址,以及控制 VNI 入站和出站流量的一個或多個安全群組。
- 裸機伺服器 VLAN 附件。 此 VLAN 連接的「浮動」功能(該功能決定該連接能否在工作節點之間移動)必須啟用,虛擬伺服器才能進行即時遷移至另一個工作節點。
- A VLAN ID。 VLAN 標記會關聯工作節點上的 PCI 介面。 一般而言,此關聯是 VLAN ID 與 VPC 子網路之間一對一的對應。
當您為 localnet 網路設計安全群組規則時,請考慮某些網路交換會發生在工作節點上的 OVS 內,而永遠不會到達 VPC 基礎架構。 安全群組規則只套用於穿越 VPC 網路結構的流量。 同一工作站節點上的虛擬伺服器之間的流量可以繞過 VPC 安全控制。
以下範例為 Localnet 的使用案例。
- 遷移需要現有 VPC 子網路 IP 位址的虛擬伺服器
- 與現有 VPC 安全群組和網路政策整合
- 直接連線至其他 VPC 資源
- 使用 VPC 子網路進行網路分割的合規要求
- 需要在 VPC 和 Red Hat OpenShift 虛擬化中使用一致 IP 位址的混合架構
下一步
現在您已瞭解 Red Hat OpenShift 虛擬化的網路設計,請探索這些相關主題: