このドキュメントは、Google Distributed Cloud を実行する IT 管理者、オペレーター、ネットワーク スペシャリストを対象としています。このドキュメントでは、GDC 上の VM ランタイムを使用する VM ワークロードをサポートするために、仮想ネットワークを作成して使用する方法について説明します。 Google Cloud のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE ユーザーロールとタスクをご覧ください。
始める前に
このドキュメントの内容を実施するには、次のリソースへのアクセス権が必要です。
- Google Distributed Cloud バージョン 1.12.0(anthosBareMetalVersion: 1.12.0)以降のクラスタへのアクセス権。ワークロードを実行可能な、どのクラスタタイプでも使用できます。必要に応じて、Compute Engine 上の Google Distributed Cloud を試すか、クラスタ作成の概要をご覧ください。
- kubectlのプラグインとしてインストールされた- virtctlクライアント ツール。必要に応じて、virtctl クライアント ツールをインストールします。
仮想ネットワークの概要
ネットワークはカスタム リソースを使用して作成されます。ネットワークは、クラスタの作成後、いつでも作成できます。ホスト インターフェースと 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 サーバーを使用するネットワークを作成するには、次の操作を行います。
- 任意のエディタで、 - 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 アタッチメントのみをワークロードに設定できます。これは、GDC 上の VM ランタイムで作成できる唯一のネットワーク- 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: このネットワークに接続するすべての VM で構成する CIDR 表記のオプション ルート
- GATEWAY_ADDRESS: VM が使用するゲートウェイ IP アドレス。
- NAMESERVER_ADDRESS: VM が使用する 1 つ以上の 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です。指定しない場合、この設定はデフォルトのライフサイクルになります。- このモードでは、(INTERFACE_NAME.VLAN_IDなど)すべてのノードで VLAN インターフェースを作成および削除する権限がクラスタにあります。
- ノードで VLAN インターフェースを作成するか、すでに作成している場合は、次のセクションに示すように networkLifecycle値をUserManagedに設定します。
 
- このモードでは、(
- ネットワークでは外部 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 をネットワークに接続する
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パラメータと値を追加します。
 
- ネットワークが外部 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: VM に割り当てる CIDR 表記の IP アドレス(- 192.0.2.10/24など)。- ネットワークが外部 DHCP サーバーを使用できるように構成されている場合は、VirtualMachineマニフェストからこのフィールドを削除します。
 
- ネットワークが外部 DHCP サーバーを使用できるように構成されている場合は、
 - VM_NAME-boot-dvという名前のブートディスクがすでに存在している必要があります。詳細については、VM ブートディスクを作成するをご覧ください。
- エディタで - VirtualMachineマニフェストを保存して閉じます。
- kubectlを使用して VM を作成します。- kubectl apply -f my-vm.yaml