本文適用於執行 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