本文適用於執行 Google Distributed Cloud 的 IT 管理員、操作員和網路專家。本文說明如何建立及使用虛擬網路,支援使用 VM Runtime on GDC 的 VM 工作負載。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。 Google Cloud
事前準備
如要完成這份文件,您必須存取下列資源:
- 存取 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