このドキュメントは、Google Distributed Cloud を実行する IT 管理者、オペレーター、ネットワーク スペシャリストを対象としています。このドキュメントでは、GDC 上の VM ランタイムを使用する VM ワークロードをサポートするために、仮想ネットワークを作成して使用する方法について説明します。Google Cloud のコンテンツで参照する一般的なロールとタスク例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。
始める前に
このドキュメントの内容を実施するには、次のリソースへのアクセス権が必要です。
- 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