このページでは、Google Distributed Cloud に付属している専用のネットワーク機能 Kubernetes オペレーターについて説明します。このオペレータは、Distributed Cloud が高パフォーマンスのワークロードを実行できるようにする一連の CustomResourceDefinitions(CRD)を実装します。
ネットワーク機能オペレーターと SR-IOV 機能は、Distributed Cloud Servers では使用できません。
ネットワーク機能オペレータを使用すると、次のことができます。
- ノード上の既存のネットワーク デバイスをポーリングします。
- ノード上の各ネットワーク デバイスの IP アドレスと物理リンクの状態をクエリします。
- ノードに追加のネットワーク インターフェースをプロビジョニングします。
- ハイ パフォーマンス ワークロードをサポートするために必要なノードの物理マシンで、低レベルのシステム機能を構成します。
- PCI Express ネットワーク インターフェースでシングルルート入出力仮想化(SR-IOV)を使用して、複数の仮想インターフェースに仮想化します。その後、これらの仮想ネットワーク インターフェースを使用するように Distributed Cloud ワークロードを構成できます。
Distributed Cloud の SR-IOV のサポートは、次のオープンソース プロジェクトに基づいています。
前提条件
ネットワーク機能オペレーターは、Distributed Cloud Edge Network API からネットワーク構成を取得します。これを許可するには、次のコマンドを使用して、ネットワーク機能オペレーターのサービス アカウントにエッジ ネットワーク閲覧者ロール(roles/edgenetwork.viewer)を付与する必要があります。
gcloud projects add-iam-policy-binding PROJECT_ID \ --role roles/edgenetwork.viewer \ --member "serviceAccount:PROJECT_ID.svc.id.goog[nf-operator/nf-angautomator-sa]"
PROJECT_ID は、ターゲット Google Cloud プロジェクトの ID に置き換えます。
ネットワーク機能オペレーターのリソース
Distributed Cloud Network Function オペレーターは、次の Kubernetes CRD を実装します。
Network。Pod が内部リソースと外部リソースの通信に使用できる仮想ネットワークを定義します。このリソースで指定する前に、Distributed Cloud Edge Network API を使用して対応する VLAN を作成する必要があります。手順については、ネットワークを作成するをご覧ください。NetworkInterfaceState。ネットワーク インターフェースの状態の検出を有効にし、リンク状態と IP アドレスのネットワーク インターフェースをクエリします。NodeSystemConfigUpdate。カーネル オプションやKubeletフラグなどの低レベルのシステム機能を構成できます。SriovNetworkNodePolicy。SR-IOV 仮想化ネットワーク インターフェースのグループを選択し、そのグループを Kubernetes リソースとしてインスタンス化します。このリソースはNetworkAttachmentDefinitionリソースで使用できます。SriovNetworkNodeState。Distributed Cloud ノードのSriovNetworkNodePolicyリソースのプロビジョニング状態をクエリできます。NetworkAttachmentDefinition。Distributed Cloud Pod を Distributed Cloud ノードの 1 つ以上の論理ネットワークまたは物理ネットワークに接続できます。このリソースで指定する前に、対応する VLAN を作成する必要があります。このリソースで指定する前に、Distributed Cloud Edge Network API を使用して対応する VLAN を作成する必要があります。手順については、ネットワークを作成するをご覧ください。
ネットワーク機能オペレータを使用すると、SR-IOV 仮想関数を使用しないセカンダリ ネットワーク インターフェースを定義することもできます。
Network 個のリソース
Network リソースは、Distributed Cloud クラスタ内の Pod が内部リソースと外部リソースの通信に使用できる Distributed Cloud ラック内の仮想ネットワークを定義します。
Network リソースは、書き込み可能なフィールドとして公開されるネットワーク インターフェースに対して、次の構成可能なパラメータを提供します。
spec.type: このネットワークのネットワーク トランスポート レイヤを指定します。有効な値はL2のみです。nodeInterfaceMatcher.interfaceName値も指定する必要があります。spec.nodeInterfaceMatcher.interfaceName: このネットワークで使用するターゲット Distributed Cloud ノードの物理ネットワーク インターフェースの名前。spec.gateway4: このネットワークのネットワーク ゲートウェイの IP アドレス。spec.l2NetworkConfig.prefixLength4: このネットワークの CIDR 範囲を指定します。
次の例は、リソースの構造を示しています。
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: vlan200-network
annotations:
networking.gke.io/gdce-vlan-id: 200
networking.gke.io/gdce-vlan-mtu: 1500
spec:
type: L2
nodeInterfaceMatcher:
interfaceName: gdcenet0.200
gateway4: 10.53.0.1
NetworkInterfaceState 個のリソース
NetworkInterfaceState リソースは、ノード上の物理ネットワーク インターフェースを検出し、それらのインターフェースを通過するネットワーク トラフィックのランタイム統計情報を収集できる読み取り専用リソースです。Distributed Cloud は、クラスタ内の各ノードの NetworkInterfaceState リソースを作成します。
Distributed Cloud マシンのデフォルト構成には、Rack Select Network Daughter Card(rNDC)上のボンディングされたネットワーク インターフェース(gdcenet0)が含まれています。このインターフェースは、eno1np0 と eno2np1 のネットワーク インターフェースを結合します。それぞれが 1 つの Distributed Cloud ToR スイッチに接続されています。
NetworkInterfaceState リソースは、読み取り専用のステータス フィールドとして公開される次のカテゴリのネットワーク インターフェース情報を提供します。
全般情報:
status.interfaces.ifname: ターゲット ネットワーク インターフェースの名前。status.lastReportTime: ターゲット インターフェースの最後のステータス レポートの日時。
IP アドレスの構成情報:
status.interfaces.interfaceinfo.address: ターゲット インターフェースに割り当てられた IP アドレス。status.interfaces.interfaceinfo.dns: ターゲット インターフェースに割り当てられた DNS サーバーの IP アドレス。status.interfaces.interfaceinfo.gateway: ターゲット インターフェースを処理するネットワーク ゲートウェイの IP アドレス。status.interfaces.interfaceinfo.prefixlen: IP プレフィックスの長さ。
ハードウェア情報:
status.interfaces.linkinfo.broadcast: ターゲット インターフェースのブロードキャスト MAC アドレス。status.interfaces.linkinfo.businfo:bus:slot.function形式の PCIe デバイスパス。status.interfaces.linkinfo.flags: インターフェース フラグ(例:BROADCAST)。status.interfaces.linkinfo.macAddress: ターゲット インターフェースのユニキャスト MAC アドレス。status.interfaces.linkinfo.mtu: ターゲット インターフェースの MTU 値。
受信の統計情報:
status.interfaces.statistics.rx.bytes: ターゲット インターフェースで受信した合計バイト数。status.interfaces.statistics.rx.dropped: ターゲット インターフェースによってドロップされたパケットの合計数。status.interfaces.statistics.rx.errors: ターゲット インターフェースのパケット受信エラーの合計数。status.interfaces.statistics.rx.multicast: ターゲット インターフェースが受信したマルチキャスト パケットの合計数。status.interfaces.statistics.rx.overErrors: ターゲット インターフェースのパケット受信エラーの合計数。status.interfaces.statistics.rx.packets: ターゲット インターフェースで受信したパケットの合計数。
送信の統計情報:
status.interfaces.statistics.tx.bytes: ターゲット インターフェースによって送信された合計バイト数。status.interfaces.statistics.tx.carrierErrors: ターゲット インターフェースで発生したキャリア エラーの合計数。status.interfaces.statistics.tx.collisions: ターゲット インターフェースで発生したパケットの衝突の合計数。status.interfaces.statistics.tx.dropped: ターゲット インターフェースによってドロップされたパケットの合計数。status.interfaces.statistics.tx.errors: ターゲット インターフェースの合計伝送エラー数。status.interfaces.statistics.tx.packets: ターゲット インターフェースによって送信されたパケットの合計数。
次の例は、リソースの構造を示しています。
apiVersion: networking.gke.io/v1
kind: NetworkInterfaceState
metadata:
name: MyNode1
nodeName: MyNode1
status:
interfaces:
- ifname: eno1np0
linkinfo:
businfo: 0000:1a:00.0
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 1098522811
errors: 2
multicast: 190926
packets: 4988200
tx:
bytes: 62157709961
packets: 169847139
- ifname: eno2np1
linkinfo:
businfo: 0000:1a:00.1
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 33061895405
multicast: 110203
packets: 110447356
tx:
bytes: 2370516278
packets: 11324730
- ifname: enp95s0f0np0
interfaceinfo:
- address: fe80::63f:72ff:fec4:2bf4
prefixlen: 64
linkinfo:
businfo: 0000:5f:00.0
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:f4
mtu: 9000
statistics:
rx:
bytes: 37858381
multicast: 205645
packets: 205645
tx:
bytes: 1207334
packets: 6542
- ifname: enp95s0f1np1
interfaceinfo:
- address: fe80::63f:72ff:fec4:2bf5
prefixlen: 64
linkinfo:
businfo: 0000:5f:00.1
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:f5
mtu: 9000
statistics:
rx:
bytes: 37852406
multicast: 205607
packets: 205607
tx:
bytes: 1207872
packets: 6545
- ifname: enp134s0f0np0
interfaceinfo:
- address: fe80::63f:72ff:fec4:2b6c
prefixlen: 64
linkinfo:
businfo: 0000:86:00.0
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:6c
mtu: 9000
statistics:
rx:
bytes: 37988773
multicast: 205584
packets: 205584
tx:
bytes: 1212385
packets: 6546
- ifname: enp134s0f1np1
interfaceinfo:
- address: fe80::63f:72ff:fec4:2b6d
prefixlen: 64
linkinfo:
businfo: 0000:86:00.1
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:6d
mtu: 9000
statistics:
rx:
bytes: 37980702
multicast: 205548
packets: 205548
tx:
bytes: 1212297
packets: 6548
- ifname: gdcenet0
interfaceinfo:
- address: 208.117.254.36
prefixlen: 28
- address: fe80::b816:3ff:fe9e:9c87
prefixlen: 64
linkinfo:
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 34160422968
errors: 2
multicast: 301129
packets: 115435591
tx:
bytes: 64528301111
packets: 181171964
.. <remaining interfaces omitted>
lastReportTime: "2022-03-30T07:35:44Z"
NodeSystemConfigUpdate 個のリソース
NodeSystemConfigUpdate リソースを使用すると、ノードのオペレーティング システム構成を変更したり、Kubelet フラグを変更したりできます。sysctl 以外の変更には、ノードの再起動が必要です。
このリソースをインスタンス化するときは、nodeSelector フィールドでターゲット ノードを指定する必要があります。nodeSelector フィールドには、各ターゲット ノードのすべての Key-Value ペアを含める必要があります。このフィールドで複数のターゲット ノードを指定すると、ターゲット ノードは一度に 1 つずつ更新されます。このフィールドは nodeName フィールドに代わるものです。
注意: nodeName フィールドは非推奨になりました。このコマンドをすぐに使用すると、ローカル コントロール プレーン ノードを含むターゲット ノードが再起動され、重要なワークロードが停止する可能性があります。
NodeSystemConfigUpdate リソースには、Distributed Cloud に固有の次の構成フィールドがあります。
spec.containerRuntimeDNSConfig.ip: プライベート イメージ レジストリの IP アドレスのリストを指定します。spec.containerRuntimeDNSConfig: 各 Distributed Cloud ノードのコンテナ ランタイム環境で使用されるカスタム DNS エントリのリストを指定します。各エントリは次のフィールドで構成されます。ip: ターゲット IPv4 アドレスを指定します。domain: 対応するドメインを指定します。interface:ipフィールドで指定された IP アドレスに到達可能なネットワークの下り(外向き)インターフェースを指定します。次のリソースで定義されたインターフェースを指定できます。CustomNetworkInterfaceConfig、Network(アノテーションによる)、NetworkAttachmentDefinition(アノテーションによる)。これはプレビュー レベルの機能です。
spec.kubeletConfig.cpuManagerPolicy: Kubernetes CPUManager ポリシーを指定します。有効な値はNoneとStaticです。spec.kubeletConfig.topologyManagerPolicy: Kubernetes TopologyManager ポリシーを指定します。有効な値はNone、BestEffort、Restricted、SingleNumaModeです。spec.osConfig.hugePagesConfig: NUMA ノードごとの巨大ページ構成を指定します。有効な値は2MBと1GBです。リクエストされた大容量ページの数は、システム内の両方の NUMA ノードに均等に分散されます。たとえば、1 GB の huge page を 16 個割り当てると、各ノードに 8 GB の事前割り当てが行われます。spec.osConfig.isolatedCpusPerSocket: ソケットあたりの分離された CPU の数を指定します。cpuManagerPolicyがStaticに設定されている場合は必須です。spec.osConfig.cpuIsolationPolicy: CPU 分離ポリシーを指定します。Defaultポリシーは、ワークロード用に予約された CPU からsystemdタスクを分離するだけです。Kernelポリシーは、CPU をisolcpusとしてマークし、各 CPU にrcu_nocb、nohz_full、rcu_nocb_pollフラグを設定します。spec.sysctls.NodeLevel: Network Function オペレータを使用してノードでグローバルに構成できるsysctlsパラメータを指定します。構成可能なパラメータは次のとおりです。fs.inotify.max_user_instancesfs.inotify.max_user_watcheskernel.sched_rt_runtime_uskernel.core_patternnet.ipv4.tcp_wmemnet.ipv4.tcp_rmemnet.ipv4.tcp_slow_start_after_idlenet.ipv4.udp_rmem_minnet.ipv4.udp_wmem_minnet.ipv4.tcp_rmemnet.ipv4.tcp_wmemnet.core.rmem_maxnet.core.wmem_maxnet.core.rmem_defaultnet.core.wmem_defaultnet.netfilter.nf_conntrack_tcp_timeout_unacknowledgednet.netfilter.nf_conntrack_tcp_timeout_max_retransnet.sctp.auth_enablenet.sctp.sctp_memnet.ipv4.udp_memnet.ipv4.tcp_memnet.ipv4.tcp_slow_start_after_idlenet.sctp.auth_enablevm.max_map_count
tuningContainer Networking Interface(CNI)プラグインを使用すると、安全なsysctlsパラメータと安全でないsysctlsパラメータの両方を特定の Pod または Namespace にスコープ設定することもできます。
NodeSystemConfigUpdate リソースには、次の読み取り専用の一般的なステータス フィールドが用意されています。
status.lastReportTime: ターゲット インターフェースのステータスが最後に報告された時刻。status.conditions.lastTransitionTime: インターフェースの条件が最後に変更された時刻。status.conditions.observedGeneration: 初期条件の基準となった.metadata.generation値を示します。status.conditions.message: インターフェースの条件の変更を説明する情報メッセージ。status.conditions.reason: インターフェースの条件の最後の変更の理由を示すプログラマティック ID。status.conditions.status: 条件のステータス記述子。有効な値はTrue、False、Unknownです。status.conditions.type: camelCase の条件タイプ。
次の例は、リソースの構造を示しています。
apiVersion: networking.gke.io/v1
kind: NodeSystemConfigUpdate
metadata:
name: node-pool-1-config
namespace: default
spec:
nodeSelector:
baremetal.cluster.gke.io/node-pool: node-pool-1
networking.gke.io/worker-network-sriov.capable: true
sysctls:
nodeLevel:
"net.ipv4.udp_mem" : "12348035 16464042 24696060"
kubeletConfig:
topologyManagerPolicy: BestEffort
cpuManagerPolicy: Static
osConfig:
hugePagesConfig:
"TWO_MB": 0
"ONE_GB": 16
isolatedCpusPerSocket:
"0": 10
"1": 10
SriovNetworkNodePolicy 個のリソース
SriovNetworkNodePolicy リソースを使用すると、Distributed Cloud 物理マシンに SR-IOV 仮想関数(VF)のグループを割り当て、そのグループを Kubernetes リソースとしてインスタンス化できます。このリソースは NetworkAttachmentDefinition リソースで使用できます。
各ターゲット VF は、PCIe ベンダーとデバイス ID、PCIe デバイス アドレス、または Linux 列挙デバイス名で選択できます。SR-IOV ネットワーク オペレーターは、ターゲット VF をプロビジョニングするように各物理ネットワーク インターフェースを構成します。これには、ネットワーク インターフェースのファームウェアの更新、Linux カーネル ドライバの構成、必要に応じた Distributed Cloud マシンの再起動が含まれます。
ノードで使用可能なネットワーク インターフェースを検出するには、nf-operator Namespace のノードで NetworkInterfaceState リソースを検索します。
次の例は、リソースの構造を示しています。
apiVersion: sriovnetwork.k8s.cni.cncf.io/v1
kind: SriovNetworkNodePolicy
metadata:
name: mlnx6-p2-sriov-en2
namespace: sriov-network-operator
spec:
deviceType: netdevice
isRdma: true
mtu: 9000
nicSelector:
pfNames:
- enp134s0f1np1
nodeSelector:
edgecontainer.googleapis.com/network-sriov.capable: "true"
numVfs: 31
priority: 99
resourceName: mlnx6_p2_sriov_en2
前の例では、MTU 値が 9000(最大許容値)の enp134s0f1np1 という名前のネットワーク インターフェースの 2 番目のポートから最大 31 個の VF を作成します。SR-IOV 対応のすべての Distributed Cloud ノードに存在するノードセレクタ ラベル edgecontainer.googleapis.com/network-sriov.capable を使用します。
このリソースの使用方法については、SriovNetworkNodeState をご覧ください。
SriovNetworkNodeState 個のリソース
SriovNetworkNodeState 読み取り専用リソースを使用すると、Distributed Cloud ノードの SriovNetworkNodePolicy リソースのプロビジョニング状態をクエリできます。ノードの SriovNetworkNodePolicy リソースの完全な構成と、ノード上のアクティブな VF のリストを返します。status.syncStatus フィールドは、ノードに定義されたすべての SriovNetworkNodePolicy リソースが正しく適用されたかどうかを示します。
次の例は、リソースの構造を示しています。
apiVersion: sriovnetwork.k8s.cni.cncf.io/v1
kind: SriovNetworkNodeState
metadata:
name: MyNode1
namespace: sriov-network-operator
spec:
dpConfigVersion: "1969684"
interfaces:
- mtu: 9000
name: enp134s0f1np1
numVfs: 31
pciAddress: 0000:86:00.1
vfGroups:
- deviceType: netdevice
mtu: 9000
policyName: mlnx6-p2-sriov-en2
resourceName: mlnx6_p2_sriov_en2
vfRange: 0-30
status:
Status:
Interfaces:
Device ID: 1015
Driver: mlx5_core
Link Speed: 25000 Mb/s
Link Type: ETH
Mac: ba:16:03:9e:9c:87
Mtu: 9000
Name: eno1np0
Pci Address: 0000:1a:00.0
Vendor: 15b3
Device ID: 1015
Driver: mlx5_core
Link Speed: 25000 Mb/s
Link Type: ETH
Mac: ba:16:03:9e:9c:87
Mtu: 9000
Name: eno2np1
Pci Address: 0000:1a:00.1
Vendor: 15b3
Vfs:
- Vfs:
- deviceID: 101e
driver: mlx5_core
mac: c2:80:29:b5:63:55
mtu: 9000
name: enp134s0f1v0
pciAddress: 0000:86:04.1
vendor: 15b3
vfID: 0
- deviceID: 101e
driver: mlx5_core
mac: 7e:36:0c:82:d4:20
mtu: 9000
name: enp134s0f1v1
pciAddress: 0000:86:04.2
vendor: 15b3
vfID: 1
.. <omitted 29 other VFs here>
syncStatus: Succeeded
このリソースの使用方法については、SriovNetworkNodeState をご覧ください。
NetworkAttachmentDefinition 個のリソース
NetworkAttachmentDefinition リソースを使用すると、Distributed Cloud Pod を Distributed Cloud ノードの 1 つ以上の論理ネットワークまたは物理ネットワークに接続できます。Multus-CNI フレームワークと SRIOV-CNI プラグインを活用します。
アノテーションを使用して、適切な SriovNetworkNodePolicy リソースの名前を参照します。このアノテーションを作成するときは、次の操作を行います。
- キー
k8s.v1.cni.cncf.io/resourceNameを使用します。 - 値に接頭辞
gke.io/を使用し、その後にターゲットSriovNetworkNodePolicyリソースの名前を指定します。
次の例は、リソースの構造を示しています。
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: sriov-net1
namespace: mynamespace
annotations:
k8s.v1.cni.cncf.io/resourceName: gke.io/mlnx6_p2_sriov_en2
spec:
config: '{
"type": "sriov",
"cniVersion": "0.3.1",
"name": "sriov-network",
"ipam": {
"type": "host-local",
"subnet": "10.56.217.0/24",
"routes": [{
"dst": "0.0.0.0/0"
}],
"gateway": "10.56.217.1"
}
}'
NetworkAttachmentDefinition リソースを Distributed Cloud 1.4.0 にアップグレードする
Distributed Cloud バージョン 1.4.0 では、bond0 インターフェースが gdcenet0 という名前の新しいインターフェースに置き換えられます。gdcenet0 インターフェースを使用すると、ラック内の各 Distributed Cloud マシンのホスト管理ネットワーク インターフェース カード(NIC)をワークロードに使用しながら、Distributed Cloud の管理プレーンとコントロール プレーンのネットワーク トラフィックを完全に分離できます。この機能を利用するには、このセクションの手順に沿って NetworkAttachmentDefinition リソースを再構成し、Distributed Cloud ネットワーキングを構成するの手順に沿って適切なネットワークとサブネットワークをプロビジョニングします。
1 つ以上の NetworkAttachmentDefinition リソースをデプロイした Distributed Cloud クラスタごとに、次の移行ルールが適用されます。
- 新しい
NetworkAttachmentDefinitionリソースごとに、masterフィールドの値としてbond0ではなくgdcenet0を使用します。このフィールドにbond0または空の値を使用するリソースを適用すると、Distributed Cloud は値をgdcenet0に置き換え、リソースを保存してクラスタに適用します。 - 既存の
NetworkAttachmentDefinitionリソースごとに、masterフィールドの値としてbond0をgdcenet0に置き換え、リソースをクラスタに再適用して、影響を受ける Pod への完全なネットワーク接続を復元します。
このリソースの使用方法については、NetworkAttachmentDefinition をご覧ください。
SR-IOV VF を使用して Pod にセカンダリ インターフェースを構成する
SriovNetworkNodePolicy リソースと対応する NetworkAttachmentDefinition リソースを構成したら、SR-IOV 仮想関数を使用して、Distributed Cloud Pod のセカンダリ ネットワーク インターフェースを構成できます。
これを行うには、次のように Distributed Cloud Pod 定義にアノテーションを追加します。
- キー:
k8s.v1.cni.cncf.io/networks - 値:
nameSpace/<NetworkAttachmentDefinition1,nameSpace/NetworkAttachmentDefinition2...
次の例は、このアノテーションを示しています。
apiVersion: v1
kind: Pod
metadata:
name: sriovpod
annotations:
k8s.v1.cni.cncf.io/networks: mynamespace/sriov-net1
spec:
containers:
- name: sleeppodsriov
command: ["sh", "-c", "trap : TERM INT; sleep infinity & wait"]
image: alpine
securityContext:
capabilities:
add:
- NET_ADMIN
MacVLAN ドライバを使用して Pod にセカンダリ インターフェースを構成する
Distributed Cloud は、MacVLAN ドライバを使用して Pod にセカンダリ ネットワーク インターフェースを作成することもサポートしています。この構成は gdcenet0 インターフェースでのみサポートされ、コンテナ化されたワークロードを実行する Pod でのみサポートされます。
MacVLAN ドライバを使用するようにインターフェースを構成するには:
次の例に示すように、
NetworkAttachmentDefinitionリソースを構成します。apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: macvlan-b400-1 annotations: networking.gke.io/gdce-vlan-id: 400 spec: config: '{ "type": "macvlan", "master": "gdcenet0.400", "ipam": { "type": "static", "addresses": [ { "address": "192.168.100.20/27", "gateway": "192.168.100.1" } ] ... } }'次のように、Distributed Cloud Pod 定義にアノテーションを追加します。
apiVersion: v1 kind: Pod metadata: name: macvlan-testpod1 annotations: k8s.v1.cni.cncf.io/networks: macvlan-b400-1
Distributed Cloud マルチネットワーキングを使用して Pod にセカンダリ インターフェースを構成する
Distributed Cloud は、マルチネットワーク機能を使用して Pod にセカンダリ ネットワーク インターフェースを作成することをサポートしています。手順は次のとおりです。
Networkリソースを構成します。次に例を示します。apiVersion: networking.gke.io/v1 kind: Network metadata: name: vlan200-network spec: type: L2 nodeInterfaceMatcher: interfaceName: vlan200-interface gateway4: 10.53.0.1次のように、Distributed Cloud Pod 定義にアノテーションを追加します。
apiVersion: v1 kind: Pod metadata: name: myPod annotations: networking.gke.io/interfaces: [{"interfaceName":"eth1","network":"vlan200-network"}] networking.gke.io/default-interface: eth1 ...次のステップ