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

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

準備

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

仮想ネットワークの概要

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

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

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

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

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

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

このデフォルトの pod-network では、独自の仮想ネットワークを作成する追加の手順なしで、GDC 上の 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 サーバーを使用する

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

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

    • typeL2 に設定されています。この設定では、このネットワークへのレイヤ 2 アタッチメントのみをワークロードに設定できます。これは、GDC 上の VM ランタイムで作成できる唯一のネットワーク type です。
    • externalDHCP4true に設定されています。この設定により、ネットワークの外部 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: ネットワークを接続する 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
    

次のステップ