為 VM Runtime on GDC 建立及使用虛擬網路

本文適用於執行 Google Distributed Cloud 的 IT 管理員、操作員和網路專家。本文說明如何建立及使用虛擬網路,支援使用 VM Runtime on GDC 的 VM 工作負載。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。 Google Cloud

事前準備

如要完成這份文件,您必須存取下列資源:

虛擬網路總覽

網路是使用自訂資源建立而成。叢集建立後,隨時可以建立網路。建立網路後,主機介面的網路設定和 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 伺服器的網路,請完成下列步驟:

  1. 在您選擇的編輯器中建立 Network 資訊清單,例如 use-dhcp-network.yaml

    nano use-dhcp-network.yaml
    
  2. 複製並貼上下列 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 設定。
  3. 在編輯器中儲存並關閉 Network 資訊清單。

  4. 使用 kubectl 建立網路:

    kubectl apply -f use-dhcp-network.yaml
    

手動定義網路設定

GDC 上的 VM 執行階段不會提供 DHCP 伺服器。您必須手動指定 VM 的 IP 位址,或設定使用外部 DHCP 伺服器。如果手動指定 IP 位址,就必須定義 DNS、路徑和預設閘道的網路設定。

如要建立網路,並手動指定 VM 的網路設定,請完成下列步驟:

  1. 在您選擇的編輯器中建立 Network 資訊清單,例如 manual-network.yaml

    nano manual-network.yaml
    
  2. 複製並貼上下列 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 位址。
  3. 在編輯器中儲存並關閉 Network 資訊清單。

  4. 使用 kubectl 建立網路:

    kubectl apply -f manual-network.yaml
    

使用 VLAN ID

建立虛擬網路時,您可以定義已標記的 VLAN。這些 VLAN 指派作業可協助您根據工作負載需求和隔離需求,隔離網路流量。在 AnthosManaged 網路中,叢集有權建立及刪除各節點中的 VLAN 介面。

如要建立定義 VLAN 指派作業的網路,請完成下列步驟:

  1. 在您選擇的編輯器中建立 Network 資訊清單,例如 vlan-network.yaml

    nano vlan-network.yaml
    
  2. 複製並貼上下列 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,如下一節所示。
    • 網路已啟用外部 DHCP。外部 DHCP 伺服器負責為連線至這個網路的工作負載分配 IPv4 位址、路徑、閘道和 DNS 設定。
  3. 在編輯器中儲存並關閉 Network 資訊清單。

  4. 使用 kubectl 建立網路:

    kubectl apply -f vlan-network.yaml
    

建立由使用者管理的網路

在下列虛擬網路範例中,網路是使用者管理,而非先前範例中的 Anthos 管理。在使用者管理的網路中,您必須負責在主機上建立或刪除 VLAN 介面。

如要在使用者管理模式下建立網路,並手動定義 VLAN 介面設定,請完成下列步驟:

  1. 在您選擇的編輯器中建立 Network 資訊清單,例如 user-managed-network.yaml

    nano user-managed-network.yaml
    
  2. 複製並貼上下列 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。您必須在建立網路前,或刪除網路後,在每個節點上建立或刪除 VLAN VLAN_ID 介面。
    • 網路已啟用外部 DHCP。外部 DHCP 伺服器負責為連線至這個網路的工作負載分配 IPv4 位址、路徑、閘道和 DNS 設定。
  3. 在編輯器中儲存並關閉 Network 資訊清單。

  4. 使用 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 參數和值。

資訊清單

如要使用 YAML 資訊清單建立 VM,請完成下列步驟:

  1. 在您選擇的編輯器中建立 VirtualMachine 資訊清單,例如 my-vm.yaml

    nano my-vm.yaml
    
  2. 複製並貼上下列 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 資訊清單中移除這個欄位。

    名為 VM_NAME-boot-dv 的開機磁碟必須已存在。詳情請參閱建立 VM 開機磁碟

  3. 在編輯器中儲存並關閉 VirtualMachine 資訊清單。

  4. 使用 kubectl 建立 VM:

    kubectl apply -f my-vm.yaml
    

後續步驟