Google Distributed Cloud 上の VM ランタイム用に仮想ネットワークを作成して使用する

このドキュメントは、GKE on Bare Metal を実行するアプリケーション オーナーとプラットフォーム管理者を対象としています。このドキュメントでは、Google Distributed Cloud 上の VM ランタイムを使用する VM ワークロードをサポートするために、仮想ネットワークを作成して使用する方法について説明します。

準備

このドキュメントの内容を実施するには、次のリソースへのアクセス権が必要です。

仮想ネットワークの概要

ネットワークはカスタム リソースを使用して作成されます。ネットワークはクラスタの作成するといつでも作成できます。ホスト インターフェースと VLAN ID の割り当てのネットワーク設定が定義されている場合、ネットワークの作成すると変更できません。

ネットワークの削除にはいくつかの条件が適用されます。たとえば、VM やネットワーク インターフェースなどのリソースでネットワークが使用されている場合、そのネットワークの削除はネットワーク コントローラによって拒否されます。

ネットワーク定義には、ゲートウェイ、ルート、DNS 情報を含めることができます。 外部 DHCP サーバーの使用を有効にすることもできます。これらのネットワーク設定は、特定のネットワーク構成オプションの定義方法に応じて、静的または動的に割り当てられます。

デフォルトの Pod ネットワーク

各クラスタには、デフォルトで pod-network が作成されます。このネットワークは変更できません。Pod CIDR とサービス CIDR のルートおよび DNS 構成が自動的に入力されます。DNS 構成では、クラスタと同じ値が使用されます。

pod-network は、クラスタの Pod ネットワークにアクセスするためのインターフェースを必要とし、特定の構成オプションを必要としないワークロードで使用できます。 デフォルト ゲートウェイが pod-network インターフェースにない場合でも、pod-network のルートは常にワークロードのクラスタとサービスへのアクセスを確保するように構成されます。

このデフォルトの pod-network では、独自の仮想ネットワークを作成する追加の手順なしで、Google Distributed Cloud 上の VM ランタイムをテストできます。多くのドキュメントでは、例が複雑にならないように、このデフォルトの 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 サーバーを使用する

Google Distributed Cloud 上の 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: ネットワークを接続する GKE on Bare Metal ノードのインターフェース名。使用するノードの物理インターフェースの名前を指定します。クラスタ内のすべてのノードに同じインターフェース名を設定する必要があります。

    この Network マニフェストでは、次の値が設定されています。

    • typeL2 に設定されています。この設定では、このネットワークへのレイヤ 2 アタッチメントのみをワークロードに設定できます。これは、Google Distributed Cloud 上の VM ランタイムで作成できる唯一のネットワーク type です。
    • externalDHCP4true に設定されています。この設定により、ネットワークで外部 DHCP が有効になります。外部 DHCP サーバーは、このネットワークに接続されるワークロードの IPv4 アドレスの割り振り、ルート、ゲートウェイ、DNS の構成を実施します。
  3. Network マニフェストをエディタに保存して閉じます。

  4. kubectl を使用してネットワークを作成します。

    kubectl apply -f use-dhcp-network.yaml
    

ネットワーク設定を手動で定義する

Google Distributed Cloud 上の 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: ネットワークを接続する GKE on Bare Metal ノードのインターフェース名。使用するノードの物理インターフェースの名前を指定します。クラスタ内のすべてのノードに同じインターフェース名を設定する必要があります。
    • ROUTE_ADDRESS: このネットワークに接続するすべての VM で構成する CIDR 表記のオプション ルート
    • GATEWAY_ADDRESS: VM が使用するゲートウェイ IP アドレス。
    • NAMESERVER_ADDRESS: VM が使用する 1 つ以上の 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: ネットワークを接続する GKE on Bare Metal ノードのインターフェース名。使用するノードの物理インターフェースの名前を指定します。クラスタ内のすべてのノードに同じインターフェース名を設定する必要があります。
    • VLAN_ID: トラフィックにタグを付ける VLAN ID。

    この Network マニフェストでは、次の値が設定されています。

    • ワークロードには、このネットワークへの L2 アタッチメントのみを設定できます。
    • ネットワークは、AnthosManaged です。指定しない場合、この設定はデフォルトのライフサイクルになります。
      • このモードでは、(INTERFACE_NAME.VLAN_ID など)すべてのノードで VLAN インターフェースを作成および削除する権限がクラスタにあります。
      • ノードで 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 をネットワークに接続する

DNS や DHCP などの VM のネットワーク設定は、特定のネットワーク構成オプションの定義方法に応じて、静的または動的に割り当てられます。

  • VM に静的 IP アドレスを構成すると、クエリは DHCP サーバーに送信されません。ゲートウェイとルートを構成するための追加情報は、ネットワーク リソースから取得する必要があります。
  • VM に静的 IP アドレスを構成しない場合は、DHCP サーバーにクエリが送信されます。VM は 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: VM に割り当てる CIDR 表記の IP アドレス(192.0.2.10/24 など)。
      • ネットワークが外部 DHCP サーバーを使用できるように構成されている場合は、VirtualMachine マニフェストからこのフィールドを削除します。

    VM_NAME-boot-dv という名前のブートディスクがすでに存在している必要があります。詳細については、VM ブートディスクを作成するをご覧ください。

  3. VirtualMachine マニフェストをエディタに保存して閉じます。

  4. kubectl を使用して VM を作成します。

    kubectl apply -f my-vm.yaml
    

次のステップ