跳至主要内容

虛擬私有雲 (VPC)

虛擬私有雲(VPC)是一個邏輯隔離的網路,可在雲端基礎架構中完全控制 IP 位址、子網路、路由表、防火牆和閘道。VPC 允許安全且可擴展地部署虛擬化資源,例如運算、儲存和容器服務。

下表概述了 VPC 的關鍵組件:

組件描述
VPC具有使用者定義 IP CIDR 範圍的頂層網路空間
子網路VPC IP 空間的細分;可以是公有或私有
路由表定義 VPC 內部和外部的流量路由規則
網際網路閘道為公有子網路啟用對外網際網路存取
NAT 閘道允許私有子網路存取網際網路(僅限對外)
安全群組控制每個執行個體入站和出站流量的虛擬防火牆
VPC 對等連線不同 VPC 或內部部署網路之間的選用對等連線或混合連線

Harvester + Kube-OVN 整合架構​

下圖說明了在 Harvester 與 Kube-OVN 中,VPC、子網路、覆蓋網路和虛擬機器是如何邏輯連接的。此架構包含公有和私有子網路,允許將面向網際網路的流量與內部資源分離。此外,此架構可在整個叢集中實現可擴展、隔離的 L3 和 L2 網路結構。

                                 [ VPC: vpc-1 ]
│
┌─────────────────────┴─────────────────────┐
│ │
[ Subnet: vswitch1-subnet ] [ Subnet: vswitch2-subnet ]
CIDR: 172.20.10.0/24 CIDR: 172.20.20.0/24
Gateway: 172.20.10.1 Gateway: 172.20.20.1
│ │
[ Overlay Network: vswitch1 ] [ Overlay Network: vswitch2 ]
│ │
┌────────┴────────┐ ┌────────┴────────┐
│ │ │ │
[VM: vm1-vswitch1] [VM: vm2-vswitch1] [VM: vm1-vswitch2]
IP: 172.20.10.X IP: 172.20.10.Y IP: 172.20.20.Z
組件平台邏輯職責
VPCKube-OVN頂層 L3 網域,管理子網路分組
子網路Kube-OVNCIDR 分配、路由、閘道、防火牆規則
覆蓋網路HarvesterL2 虛擬交換器(OVS 橋接器),對應到子網路
虛擬機器Harvester執行運算工作負載,連接到覆蓋網路

此架構具有以下關鍵特性:

  • Kube-OVN 建立 VPC 及其子網路。 每個子網路包含 CIDR 和閘道 IP,並繫結到覆蓋網路(作為提供者)。Kube-OVN 強制子網路和覆蓋網路之間的一對一對應,以避免模糊的路由、流量衝突和隔離問題。

  • Harvester 定義覆蓋網路(類型:OverlayNetwork)。 每個覆蓋網路在 Kube-OVN 中被視為一個提供者。當您在 Harvester UI 上建立子網路時,可以在 Subnet:Create 畫面的 Provider 清單中選擇這些覆蓋網路。

  • Harvester 佈建連接到覆蓋網路的虛擬機器。 每個虛擬機器在開機後使用 Kube-OVN IPAM 請求 IP 位址。虛擬機器從關聯的子網路接收其 IP 位址、閘道和路由資訊。

  • Kube-OVN 處理所有 L3 邏輯(路由、NAT、VPC 對等連線和隔離)。 Harvester 純粹專注於運算和網路附加。網路策略執行、私有子網路和 NAT 出口由 Kube-OVN 管理。

此架構具有以下優點:

  • 明確的職責分離:Harvester 處理虛擬化;Kube-OVN 處理 SDN
  • 可擴展性:新的 VPC、子網路和對等連線不需要變更 Harvester 核心
  • Kubernetes 原生網路:Kube-OVN 與 Kubernetes 緊密整合,支援 CRD、策略等
  • 隔離和可觀察性:透過 Kube-OVN 集中控制 IP、ACL 和路由

VPC 和子網路設定​

VPC 設定​

在 Harvester 中,虛擬私有雲(VPC)是一個邏輯網路容器,有助於管理和隔離子網路及流量。它定義路由、NAT 和網路分段。

Harvester 提供一個名為 ovn-cluster 的預設 VPC,以及兩個用於內部 Kube-OVN 操作的關聯子網路,分別名為 ovn-default 和 join。您可以在 Virtual Private Cloud 畫面上點擊 Create 來建立額外的 VPC。

建立自訂 VPC 時,您必須設定與定義用於導向流量的路由以及啟用本地和遠端 VPC 之間通訊的連線相關的設定。下表概述了 Virtual Private Cloud 詳細資料畫面上的設定:

區段設定描述
一般資訊NameVPC 的名稱
一般資訊DescriptionVPC 的描述
Static Routes 標籤頁CIDR路由的目的地 IP 位址範圍(例如 192.168.1.0/24)
Static Routes 標籤頁Next Hop IPCIDR 流量應轉發到的 IP 位址(例如閘道或路由器 IP 位址)
VPC Peerings 標籤頁Local Connect IP用於對等連線的本地 VPC 上的 IP 位址
VPC Peerings 標籤頁Remote VPC與本地 VPC 對等的目標遠端 VPC

子網路設定​

每個子網路定義一個 CIDR 區塊和閘道,並對應到 Harvester 覆蓋網路(虛擬交換器)。它還包含 NAT 和存取規則的控制。

建立子網路時,您必須設定與您的使用案例相關的設定。在大多數情況下,您只需設定 CIDR Block、Gateway 和 Provider 即可開始使用。下表概述了 Subnet 詳細資料畫面上的設定:

區段設定描述
一般資訊Name子網路的名稱
一般資訊Description子網路的描述
Basic 標籤頁CIDR Block分配給子網路的 IP 位址範圍(例如 172.20.10.0/24)
Basic 標籤頁Protocol此子網路使用的網路協定版本(IPv4 或 IPv6)
Basic 標籤頁Provider子網路繫結的覆蓋網路(虛擬交換器)
Basic 標籤頁Virtual Private Cloud子網路所屬的虛擬私有雲
Basic 標籤頁Gateway作為子網路中虛擬機器預設閘道的 IP 位址
Basic 標籤頁Private Subnet限制對子網路的存取並確保網路隔離的設定
Basic 標籤頁Allow Subnets啟用 Private Subnet 時允許存取子網路的 CIDR
Basic 標籤頁Exclude IPs不應自動分配給虛擬機器的 IP 位址清單

每個建立的子網路都有一個名為 natOutgoing 的設定,它為離開子網路並前往 VPC 外部目的地的流量啟用網路位址轉換(NAT)。此設定預設為停用。若要啟用它,您必須編輯子網路的 YAML 設定並將值設定為 natOutgoing: true。

預設情況下,不同 VPC 中的子網路無法直接通訊。若要在它們之間啟用安全且受控的通訊,您必須建立 VPC 對等連線。如果沒有它,每個 VPC 中的子網路流量將保持完全隔離。

備註

VPC 對等連線只能在自訂 VPC 之間建立。

建立 VPC​

執行以下步驟來建立和設定 VPC。

  1. 啟用 kubeovn-operator。

    kubeovn-operator 附加元件將 Kube-OVN 部署到 Harvester 叢集。

  2. 建立覆蓋網路。

    您必須為計劃建立的每個子網路建立一個獨立的覆蓋網路。

  3. 建立 VPC。

    1. 前往 Networks > Virtual Private Cloud,然後點擊 Create。
    2. 在 Virtual Private Cloud:Create 畫面上,為 VPC 指定唯一名稱。
    3. 點擊 Create。
  4. 建立子網路。

    1. 前往 Networks > Virtual Private Cloud。

    2. 找到您建立的 VPC,然後點擊 Create Subnet。

    3. 在 Subnet:Create 畫面上,設定與您環境相關的設定。

      備註

      您必須將每個子網路連結到專用的覆蓋網路。在 Provider 欄位中,Harvester UI 只顯示未連結到其他子網路的覆蓋網路,自動強制執行一對一對應。

    4. 點擊 Edit as YAML。

    5. 在 spec 下新增 enableDHCP: true。

      這確保連接到子網路的虛擬機器可以取得正確的預設路由選項。

    6. 點擊 Create。

  5. 建立虛擬機器。

    1. 設定與每個虛擬機器相關的設定。

      important

      在 Networks 標籤頁上,您必須在 Network 欄位中選擇正確的覆蓋網路。

    2. 點擊 Create。

      虛擬機器從其連接的子網路取得 IP 位址。

    3. 選擇 ⋮ > Edit YAML。

    4. 將 spec.domain.devices.interface.binding.name 的值變更為 managedtap。

      這確保虛擬機器從子網路取得正確的 DHCP 選項,而不是使用 KubeVirt 的預設 DHCP 伺服器。

      警告

      如果您不執行此步驟,虛擬機器將沒有預設路由。在客體作業系統上正確設定預設路由之前,嘗試存取外部目的地和不同子網路上的虛擬機器將會失敗。

      更多資訊請參閱覆蓋網路限制。

  6. 重新啟動每個虛擬機器。

範例 VPC 設定和驗證​

  1. 使用以下設定建立覆蓋網路:

    • Name:vswitch1 和 vswitch2
    • Type:OverlayNetwork
  2. 建立名為 vpc-1 的 VPC。

  3. 在 vpc-1 中使用以下設定建立兩個子網路:

    名稱CIDRProvider閘道 IP
    vswitch1-subnet172.20.10.0/24default/vswitch1172.20.10.1
    vswitch2-subnet172.20.20.0/24default/vswitch2172.20.20.1
  4. 使用以下設定建立三個虛擬機器(vm1-vswitch1、vm2-vswitch1 和 vm1-vswitch2):

    • Basics 標籤頁

      • CPU:1
      • Memory:2
    • Volumes 標籤頁

      • Image Volume:雲端映像(例如 noble-server-cloudimg-amd64)
    • Networks 標籤頁

      • Network:default/vswitch1
    • Advanced Options 標籤頁

      users:
      - name: ubuntu
      groups: [ sudo ]
      shell: /bin/bash
      sudo: ALL=(ALL) NOPASSWD:ALL
      lock_passwd: false
    備註

    虛擬機器開始執行後,節點會顯示 NTP 伺服器 0.suse.pool.ntp.org 和 IP 位址。

  5. 開啟 vm1-vswitch1 和 vm1-vswitch2 的序列主控台,然後使用以下命令在每個虛擬機器上新增預設路由(如果不存在):

    • vm1-vswitch1(172.20.10.6):

      #sudo ip route add default via 172.20.10.1 dev enp1s0
    • vm1-vswitch2(172.20.20.3):

      #sudo ip route add default via 172.20.20.1 dev enp1s0

    如果虛擬機器想要將流量傳送到未知網路(不在本地子網路中),流量必須使用指定的網路介面轉發到為連接的子網路設定的指定閘道 IP。在此範例中,vm1-vswitch1 必須透過 172.20.10.1 轉發流量,而 vm1-vswitch2 必須透過 172.20.20.1 轉發流量。兩個虛擬機器都使用網路介面 enp1s0。

  6. 使用 ping 命令驗證連線。

    • 使用 vm1-vswitch1(172.20.10.6)ping vm1-vswitch2(172.20.20.3)。
    • 使用 vm1-vswitch2(172.20.20.3)ping vm1-vswitch1(172.20.10.6)。

    由於 vm1-vswitch1 和 vm1-vswitch2 在同一子網路上,它們可以在沒有任何預設路由設定的情況下相互通訊。

    如果在執行 ping 命令之前虛擬機器上不存在預設路由,主控台會顯示訊息 ping: connect: Network is unreachable.。

私有子網路設定​

當子網路上啟用 Private Subnet 設定時,預設情況下它無法與同一 VPC 中的其他子網路通訊。只有當您將其他子網路的 CIDR 區塊新增到私有子網路的 Allowed Subnets 清單時,才允許跨子網路流量。

啟用 Private Subnet 設定的優點如下:

  • 細粒度的網路分段(微分段)
  • VPC 內更強的網路隔離,減少潛在的攻擊面
  • 防止對 VPC 內敏感或關鍵資源的未授權存取
  • 透過 Allowed Subnets 清單進行受控的選擇性跨子網路通訊

範例私有子網路驗證​

  1. 前往 Networks > Virtual Private Cloud。

  2. 找到 vswitch1-subnet,然後選擇 ⋮ > Edit Config。

  3. 啟用 Private Subnet 設定。

  4. 開啟 vm1-vswitch1(172.20.10.6)的序列主控台,然後 ping vm1-vswitch2(172.20.20.3)。

    ping 嘗試失敗,因為 vm1-vswitch1 已被隔離。在 vswitch1-subnet 上啟用 Private Subnet 設定會禁止 vm1-vswitch1 與其他子網路中的虛擬機器通訊。

  5. 返回 Virtual Private Cloud 畫面,找到 vswitch1-subnet,然後選擇 ⋮ > Edit Config。

  6. 將 172.20.20.0/24 新增到 Allow Subnets 欄位。

  7. 開啟 vm1-vswitch1(172.20.10.6)的序列主控台,然後 ping vm1-vswitch2(172.20.20.3)。

    ping 嘗試成功。

natOutgoing 設定​

natOutgoing 設定為離開子網路並前往 VPC 外部目的地的流量啟用網路位址轉換(NAT)。此設定預設為停用。若要啟用它,您必須編輯子網路的 YAML 設定並將值設定為 natOutgoing: true。

範例 natOutgoing 設定和驗證​

  1. 使用以下設定建立覆蓋網路:

    • Name:vswitch-external
    • Type:OverlayNetwork
  2. 在 ovn-cluster VPC 中,使用以下設定建立子網路:

    • Name:external-subnet
    • CIDR Block:172.20.30.0/24
    • Provider:default/vswitch-external
    • Gateway IP:172.20.30.1
  3. 使用以下設定建立虛擬機器:

    • Name:vm-external

    • Basics 標籤頁

      • CPU:1
      • Memory:2
    • Volumes 標籤頁

      • Image Volume:雲端映像(例如 noble-server-cloudimg-amd64)
    • Networks 標籤頁

      • Network:default/vswitch-external
    • Advanced Options 標籤頁

      users:
      - name: ubuntu
      groups: [ sudo ]
      shell: /bin/bash
      sudo: ALL=(ALL) NOPASSWD:ALL
      lock_passwd: false
  4. 開啟 vm-external(172.20.30.2)的序列主控台,然後 ping 8.8.8.8。

    主控台顯示訊息 ping: connect: Network is unreachable.。

  5. 使用以下命令新增預設路由:

    #sudo ip route add default via 172.20.30.1 dev enp1s0

    ping 嘗試仍然失敗。

  6. 前往 Virtual Private Cloud 畫面。

  7. 找到 external-subnet,然後選擇 ⋮ > Edit Config。

  8. 點擊 Edit as YAML。

  9. 找到 natOutgoing 欄位,然後將值變更為 true。

  10. 點擊 Save。

  11. 開啟 vm-external(172.20.30.2)的序列主控台,然後 ping 8.8.8.8。

    ping 嘗試成功。

VPC 對等連線​

VPC 對等連線是一種網路連線,使不同 VPC 中的虛擬機器能夠使用私有 IP 位址進行通訊。

每個 VPC 都是一個獨立的網路命名空間,具有自己的 CIDR 區塊、路由表和隔離邊界。如果沒有 VPC 對等連線,即使虛擬機器託管在同一個 Harvester 叢集中,它們也是隔離的。建立對等連線後,路由規則會自動更新以允許虛擬機器進行私有通訊。

VPC 對等連線提供以下主要優點:

  • VPC 在邏輯和管理上保持隔離。這非常適合需要強網路隔離但具有選用連線的多租戶設定。您可以按團隊、功能或環境(例如開發與生產)組織工作負載。
  • VPC 之間的流量不會穿越公共網際網路,減少暴露。您還可以使用路由表和防火牆規則嚴格控制網路存取。
  • 將流量保持在內部雲端網路內不僅可以提高效能,還可以降低成本,與使用公共網際網路或 VPN 相比具有顯著優勢。

下圖顯示了 Kube-OVN 中的 VPC 和子網路如何對應到 Harvester 中的覆蓋網路和虛擬機器。此架構使您能夠在整個叢集中建立可擴展和隔離的 L3 和 L2 網路結構。

                                          ┌───────────────────────────────────────────┐
│ Kube-OVN │
│ (SDN Controller / IPAM) │
└───────────────────────────────────────────┘
│
┌──────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────┐
│ │ │
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ VPC: vpc-1 │ │VPC: vpcpeer-1│ ◀────────── peering ──────────▶ │VPC: vpcpeer-2│
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
▼ ▼ ▼
┌──────────────────────────────┐ ┌──────────────────────────────┐ ┌──────────────────────────────┐
│ Subnet: vswitch1-subnet │ │ Subnet: vswitch3-subnet │ │ Subnet: vswitch4-subnet │
│ CIDR: 172.20.10.0/24 │ │ CIDR: 10.0.0.0/24 │ │ CIDR: 20.0.0.0/24 │
│ Gateway: 172.20.10.1 │ │ Gateway: 10.0.0.1 │ │ Gateway: 20.0.0.1 │
└──────────────────────────────┘ └──────────────────────────────┘ └──────────────────────────────┘
│ (1:1 mapping - Provider binding) │ │
▼ ▼ ▼
┌──────────────────────────────┐ ┌──────────────────────────────┐ ┌──────────────────────────────┐
│ Harvester Overlay: vswitch1 │ │ Harvester Overlay: vswitch3 │ │ Harvester Overlay: vswitch4 │
│ Type: OverlayNetwork │ │ Type: OverlayNetwork │ │ Type: OverlayNetwork │
└──────────────────────────────┘ └──────────────────────────────┘ └──────────────────────────────┘
│ │ │
▼ ▼ ▼
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
│ VM: vm1-vswitch1 │ │ VM: vm1-vswitch3 │ │ VM: vm1-vswitch4 │
│ IP: 172.20.10.5 │ ◀ ──────── X ──────── ▶ │ IP: 10.0.0.2 │ ◀── Connected via ──▶ │ IP: 20.0.0.2 │
└──────────────────────┘ └──────────────────────┘ vswitch (overlay) └──────────────────────┘
▲
│
VM launched and managed by Harvester

VPC 對等連線設定範例​

  • 範例 1:成功的跨 VPC 通訊

    VPC 名稱VPC CIDR子網路靜態路由
    vpcpeer-110.0.0.0/1610.0.0.0/2420.0.0.0/16 → 169.254.0.2
    vpcpeer-220.0.0.0/1620.0.0.0/2410.0.0.0/16 → 169.254.0.1

    由於兩個子網路都在各自的 VPC CIDR 範圍內,路由正常運作,跨 VPC 通訊成功。

  • 範例 2:由於路由設定問題導致跨 VPC 通訊失敗

    VPC 名稱VPC CIDR子網路靜態路由
    vpcpeer-110.0.0.0/1610.1.0.0/2420.0.0.0/16 → 169.254.0.2
    vpcpeer-220.0.0.0/1620.1.0.0/2410.0.0.0/16 → 169.254.0.1

    目標子網路 IP 位址(例如 10.1.0.2 和 20.1.0.2)未被路由設定涵蓋,導致跨 VPC 通訊失敗。

important

請確保以下事項:

  • VPC 的 CIDR 包含 VPC 內的所有子網路。
  • 靜態路由指向遠端 VPC 的主要 CIDR 區塊。

如果子網路使用未被 VPC CIDR 涵蓋的特定範圍,關聯的靜態路由將無法到達該子網路。

有關 VPC 對等連線先決條件和設定的更多資訊,請參閱 Kube-OVN 文件中的 VPC Peering。

範例 VPC 對等連線設定和驗證​

  1. 使用以下設定建立兩個覆蓋網路:

    • Name:vswitch3 和 vswitch4
    • Type:OverlayNetwork
  2. 建立兩個名為 vpcpeer-1 和 vpcpeer-2 的 VPC。

    Harvester 建立兩個已準備好進行子網路建立的隔離網路空間。

  3. 使用以下設定在每個 VPC 中建立一個子網路:

    VPC 名稱子網路名稱CIDR 區塊Provider閘道 IP
    vpcpeer-1subnet110.0.0.0/24default/vswitch310.0.0.1
    vpcpeer-2subnet220.0.0.0/24default/vswitch420.0.0.1
  4. 編輯兩個 VPC 的設定。

    • vpcpeer-1

      區段設定值
      VPC Peering 標籤頁Local Connect IP169.254.0.1/30
      VPC Peering 標籤頁Remote VPCvpcpeer-2
      Static Routes 標籤頁CIDR20.0.0.0/16
      Static Routes 標籤頁Next Hop IP169.254.0.2
    • vpcpeer-2

      區段設定值
      VPC Peering 標籤頁Local Connect IP169.254.0.2/30
      VPC Peering 標籤頁Remote VPCvpcpeer-1
      Static Routes 標籤頁CIDR10.0.0.0/16
      Static Routes 標籤頁Next Hop IP169.254.0.1
  5. 建立虛擬機器。

    Unschedulable 錯誤通常表示記憶體不足。在嘗試建立新的虛擬機器之前,請先停止其他虛擬機器。

  6. 開啟 vm1-vpcpeer1 和 vm1-vpcpeer2 的序列主控台,然後使用以下命令在每個虛擬機器上新增預設路由(如果不存在):

    • vm1-vpcpeer1(10.0.0.2):

      #sudo ip route add default via 10.0.0.1 dev enp1s0
    • vm1-vpcpeer2(20.0.0.2):

      #sudo ip route add default via 20.0.0.1 dev enp1s0
  7. 使用 ping 命令測試跨 VPC 通訊。

    • 使用 vm1-vpcpeer1(10.0.0.2)ping vm1-vpcpeer2(20.0.0.2)。
    • 使用 vm1-vpcpeer2(20.0.0.2)ping vm1-vpcpeer1(10.0.0.2)。
    important

    不同 VPC 中虛擬機器之間的通訊依賴於定義如何將流量轉發到遠端 VPC 的靜態路由。為使這些路由正常運作,靜態路由目的地 CIDR 必須在遠端 VPC 的主要 CIDR 範圍內。

Local Connect IP 和 CIDR 設定​

問題答案
Local Connect IP 值是 CIDR 區塊嗎?是(例如 169.254.0.1/30)
建議的子網路大小是多少?/30(兩個可用 IP)
可以使用私有位址(RFC 1918)進行對等連結嗎?不建議
為什麼使用 169.254.x.x?連結本地位址、安全、不可路由到網際網路、廣泛使用
  • Local Connect IP 值是 CIDR 區塊嗎?

    是。您必須指定 CIDR 區塊(例如 169.254.0.1/30)而不是單一 IP 位址。

    CIDR 定義了一個點對點網路,其中一個 IP 位址由本地 VPC 使用,另一個由遠端 VPC 使用。

    範例:/30 區塊(169.254.0.0/30)

    IP 位址用途
    169.254.0.0網路位址
    169.254.0.1VPC A 使用
    169.254.0.2VPC B 使用
    169.254.0.3廣播(選用)
  • 建議的子網路大小是多少?

    /30 提供恰好兩個可用 IP 位址,符合點對點 VPC 對等連線的需求。

    使用更大的區塊(例如 /28 和 /29)是不必要的,甚至可以被認為是浪費。

    CIDR可用 IP建議?
    /302是
    /296否
    /2814否
  • 為什麼使用 169.254.x.x/30 而不是私有位址?

    169.254.0.0/16 不屬於 RFC 1918 私有位址空間(10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16)。

    RFC 3927 將 169.254.0.0/16 定義為連結本地位址空間,用於內部通訊、自動 IP 設定和點對點路由。

    169.254.x.x/30 具有以下優點:

    • 不可路由到公共網際網路
    • 內部使用安全
    • 被雲端平台(包括 AWS 和阿里雲)廣泛用於內部網路目的,例如 VPC 對等連線和中繼資料存取

VPC 對等連線限制​

對等連線僅在自訂 VPC 之間有效。任何嘗試在預設 VPC(ovn-cluster)和自訂 VPC 之間建立對等連線都會失敗。