本文適用於執行 Google Distributed Cloud 的 IT 管理員、操作員和網路專家。本文說明如何建立及使用虛擬網路,支援使用 VM Runtime on GDC 的 VM 工作負載。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。
事前準備
如要完成這份文件,您必須存取下列資源:
- 存取 Google Distributed Cloud 1.12.0 版 (anthosBareMetalVersion: 1.12.0) 以上版本的叢集。您可以使用任何可執行工作負載的叢集類型。 如有需要,請在 Compute Engine 上試用 Google Distributed Cloud,或參閱叢集建立總覽。
- virtctl用戶端工具已安裝為- kubectl的外掛程式。視需要安裝 virtctl 用戶端工具。
虛擬網路總覽
網路是使用自訂資源建立的。叢集建立後,隨時可以建立網路。建立網路後,就無法變更主機介面的網路設定和 VLAN ID 指派 (如有定義)。
刪除網路時須符合特定條件。舉例來說,如果網路正在供任何資源 (例如 VM 或網路介面) 使用,網路控制器就會拒絕刪除該網路。
網路定義可包含閘道、路徑和 DNS 資訊。您也可以啟用外部 DHCP 伺服器。這些網路設定會根據特定網路設定選項的定義方式,以靜態或動態方式指派。
預設 Pod 網路
系統預設會為每個叢集建立 pod-network。這個網路無法變更。系統會自動填入 Pod CIDR 和 Service CIDR 的路徑,以及 DNS 設定。DNS 設定會使用與叢集相同的值。
pod-network 可供需要介面來存取叢集 Pod 網路,且不需要任何特定設定選項的工作負載使用。即使預設閘道不在 pod-network 介面上,系統一律會設定 pod-network 的路徑,確保叢集和服務可供工作負載存取。
這個預設 pod-network 可讓您測試 VM Runtime on GDC,不必額外建立虛擬網路。許多文件都使用這個預設 pod-network,以簡化範例。VM 工作負載的需求會決定這個預設 pod-network 是否足夠,或是您是否需要建立及使用自己的虛擬網路。
下列 YAML 資訊清單顯示 pod-network 的設定範例。叢集已填入路徑、DNS 和介面名稱的值:
  apiVersion: networking.gke.io/v1
  kind: Network
  metadata:
    name: pod-network
  spec:
    routes:
    - to: 192.168.0.0/16
    - to: 10.96.0.0/12
    dnsConfig:
      nameservers:
      - 10.96.0.10
建立及使用虛擬網路
如要支援正式版工作負載,請建立支援所需功能的網路,例如使用外部 DHCP 伺服器或 VLAN ID。這些網路會為 VM 提供第 2 層 (L2) 連線。
使用外部 DHCP 伺服器
GDC 上的 VM 執行階段不會提供 DHCP 伺服器。您必須手動為 VM 指定 IP 位址,或設定使用外部 DHCP 伺服器。啟用外部 DHCP 伺服器後,如果 DHCP 提供 DNS 和閘道設定,您可以略過這些設定。
如要建立使用外部 DHCP 伺服器的網路,請完成下列步驟:
- 在您選擇的編輯器中建立 - Network資訊清單,例如- use-dhcp-network.yaml:- nano use-dhcp-network.yaml
- 複製並貼上下列 YAML 資訊清單: - apiVersion: networking.gke.io/v1 kind: Network metadata: name: NETWORK_NAME spec: type: L2 nodeInterfaceMatcher: interfaceName: INTERFACE_NAME externalDHCP4: true- 替換下列值: - NETWORK_NAME:網路名稱。
- INTERFACE_NAME:Google Distributed Cloud 節點上的介面名稱,用於附加網路。指定要使用的節點實體介面名稱。叢集中的所有節點都應使用相同的介面名稱。
 - 在這個 - Network資訊清單中,設定了下列值:- 「type」已設為「L2」。啟用這項設定後,工作負載只能將第 2 層附加項目附加至這個網路。這是您在 VM Runtime on GDC 中可以建立的唯一網路type。
- 「externalDHCP4」已設為「true」。這項設定可為網路啟用外部 DHCP。外部 DHCP 伺服器負責為連線至這個網路的工作負載分配 IPv4 位址、路由、閘道和 DNS 設定。
 
- 在編輯器中儲存並關閉 - Network資訊清單。
- 使用 - kubectl建立網路:- kubectl apply -f use-dhcp-network.yaml
手動定義網路設定
GDC 上的 VM 執行階段不會提供 DHCP 伺服器。您必須手動為 VM 指定 IP 位址,或設定使用外部 DHCP 伺服器。如果手動指定 IP 位址,就必須定義 DNS、路徑和預設閘道的網路設定。
如要建立網路,並為 VM 手動指定網路設定,請完成下列步驟:
- 在您選擇的編輯器中建立 - Network資訊清單,例如- manual-network.yaml:- nano manual-network.yaml
- 複製並貼上下列 YAML 資訊清單: - apiVersion: networking.gke.io/v1 kind: Network metadata: name: NETWORK_NAME spec: type: L2 nodeInterfaceMatcher: interfaceName: INTERFACE_NAME routes: - to: "ROUTE_ADDRESS" gateway4: GATEWAY_ADDRESS dnsConfig: nameservers: - NAMESERVER_ADDRESS- 替換下列值: - NETWORK_NAME:網路名稱。
- INTERFACE_NAME:Google Distributed Cloud 節點上的介面名稱,用於附加網路。指定要使用的節點實體介面名稱。叢集中的所有節點都應使用相同的介面名稱。
- ROUTE_ADDRESS:採用 CIDR 標記法的選用路徑,可在連線到此網路的每個 VM 上設定。
- GATEWAY_ADDRESS:供 VM 使用的閘道 IP 位址。
- NAMESERVER_ADDRESS:供 VM 使用的一或多個 DNS 網域名稱伺服器 IP 位址。
 
- 在編輯器中儲存並關閉 - Network資訊清單。
- 使用 - kubectl建立網路:- kubectl apply -f manual-network.yaml
使用 VLAN ID
建立虛擬網路時,您可以定義已標記的 VLAN。這些 VLAN 指派作業可協助您根據工作負載需求和隔離需求,隔離網路流量。在 AnthosManaged 網路中,叢集有權建立及刪除各節點中的 VLAN 介面。
如要建立定義 VLAN 指派作業的網路,請完成下列步驟:
- 在您選擇的編輯器中建立 - Network資訊清單,例如- vlan-network.yaml:- nano vlan-network.yaml
- 複製並貼上下列 YAML 資訊清單: - apiVersion: networking.gke.io/v1 kind: Network metadata: name: NETWORK_NAME spec: type: L2 networkLifecycle: AnthosManaged l2NetworkConfig: vlanID: VLAN_ID nodeInterfaceMatcher: interfaceName: INTERFACE_NAME externalDHCP4: true- 替換下列值: - NETWORK_NAME:網路名稱。
- INTERFACE_NAME:Google Distributed Cloud 節點上的介面名稱,用於附加網路。指定要使用的節點實體介面名稱。叢集中的所有節點都應使用相同的介面名稱。
- VLAN_ID:要標記流量的 VLAN ID。
 - 在這個 - Network資訊清單中,設定了下列值:- 工作負載只能L2附加至這個網路。
- 網路為 AnthosManaged。如未指定,系統會預設採用這個生命週期。- 在這個模式下,叢集有權建立及刪除每個節點上的 VLAN 介面,例如 INTERFACE_NAME.VLAN_ID。
- 如要在節點上建立或已建立 VLAN 介面,請將 networkLifecycle值設為UserManaged,如下一節所示。
 
- 在這個模式下,叢集有權建立及刪除每個節點上的 VLAN 介面,例如 
- 網路已啟用外部 DHCP。外部 DHCP 伺服器負責為連線至這個網路的工作負載分配 IPv4 位址、路由、閘道和 DNS 設定。
 
- 在編輯器中儲存並關閉 - Network資訊清單。
- 使用 - kubectl建立網路:- kubectl apply -f vlan-network.yaml
建立由使用者管理的網路
在下列虛擬網路範例中,網路是使用者管理,而非先前範例中的 Anthos 管理。在使用者管理的網路中,您必須負責在主機上建立或刪除 VLAN 介面。
如要在使用者管理模式下建立網路,並手動定義 VLAN 介面設定,請完成下列步驟:
- 在您選擇的編輯器中建立 - Network資訊清單,例如- user-managed-network.yaml:- nano user-managed-network.yaml
- 複製並貼上下列 YAML 定義: - apiVersion: networking.gke.io/v1 kind: Network metadata: name: NETWORK_NAME spec: type: L2 networkLifecycle: UserManaged l2NetworkConfig: vlanID: VLAN_ID nodeInterfaceMatcher: interfaceName: INTERFACE_NAME externalDHCP4: true- 替換下列值: - NETWORK_NAME:網路名稱。
- INTERFACE_NAME:要將網路附加至的主機介面。
- VLAN_ID:要標記流量的 VLAN ID。
 - 在這個 - Network資訊清單中,設定了下列值:- 工作負載只能L2附加至這個網路。
- 網路為 UserManaged。您必須在建立網路前,或刪除網路後,在每個節點上建立或刪除 VLANVLAN_ID介面。
- 網路已啟用外部 DHCP。外部 DHCP 伺服器負責為連線至這個網路的工作負載分配 IPv4 位址、路由、閘道和 DNS 設定。
 
- 在編輯器中儲存並關閉 - Network資訊清單。
- 使用 - kubectl建立網路:- kubectl apply -f user-managed-network.yaml
將 VM 連線至網路
視特定網路設定選項的定義方式而定,VM 的網路設定 (例如 DNS 和 DHCP) 會靜態或動態指派:
- 如果您在 VM 上設定靜態 IP 位址,系統就不會將查詢傳送至 DHCP 伺服器。設定閘道和路徑的其他資訊必須來自網路資源。
- 如果您未在 VM 上設定靜態 IP 位址,系統會將查詢傳送至 DHCP 伺服器。虛擬機會從 DHCP 伺服器取得所有資訊,並忽略您在網路資源中定義的任何設定。
- 如果網路資源中的外部 DHCP 未設為 true,您必須為 VM 設定靜態 IP 位址。其他所有資訊都來自您在網路資源中定義的設定。
如要建立連線至網路的 VM,請完成下列步驟:
CLI
- 如要使用 - kubectl建立 VM,請完成下列步驟:- kubectl virt create vm VM_NAME \ --image ubuntu20.04 \ --network NETWORK_NAME- 替換下列值: - VM_NAME:VM 的名稱。
- NETWORK_NAME:要連線的網路名稱。- 如果網路已設定為允許使用外部 DHCP 伺服器,系統會自動為 VM 指派 IP 位址。如需定義靜態 IP 位址,請新增選用的 --ip IP_ADDRESS參數和值。
 
- 如果網路已設定為允許使用外部 DHCP 伺服器,系統會自動為 VM 指派 IP 位址。如需定義靜態 IP 位址,請新增選用的 
 
資訊清單
如要使用 YAML 資訊清單建立 VM,請完成下列步驟:
- 在您選擇的編輯器中建立 - VirtualMachine資訊清單,例如- my-vm.yaml:- nano my-vm.yaml
- 複製並貼上下列 YAML 資訊清單: - apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: NETWORK_NAME ipAddresses: - IP_ADDRESS default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true- 在這個 YAML 資訊清單中,定義下列設定: - VM_NAME:VM 的名稱。
- NETWORK_NAME:要連線的網路名稱。
- IP_ADDRESS:以 CIDR 標記法指派給 VM 的 IP 位址,例如- 192.0.2.10/24。- 如果網路已設定為允許使用外部 DHCP 伺服器,請從 VirtualMachine資訊清單中移除這個欄位。
 
- 如果網路已設定為允許使用外部 DHCP 伺服器,請從 
 - 名為 - VM_NAME-boot-dv的開機磁碟必須已存在。詳情請參閱「建立 VM 開機磁碟」。
- 在編輯器中儲存並關閉 - VirtualMachine資訊清單。
- 使用 - kubectl建立 VM:- kubectl apply -f my-vm.yaml