Operator Fungsi Jaringan

Halaman ini menjelaskan operator Kubernetes Network Function khusus yang disertakan dalam Google Distributed Cloud connected. Operator ini mengimplementasikan serangkaian CustomResourceDefinitions (CRD) yang memungkinkan Distributed Cloud yang terhubung mengeksekusi workload berperforma tinggi.

Operator Network Function dan fungsi SR-IOV tidak tersedia di server yang terhubung Distributed Cloud.

Operator Network Function memungkinkan Anda melakukan hal berikut:

  • Polling untuk perangkat jaringan yang ada di node.
  • Kueri alamat IP dan status link fisik untuk setiap perangkat jaringan di node.
  • Menyediakan antarmuka jaringan tambahan pada node.
  • Mengonfigurasi fitur sistem tingkat rendah di mesin fisik node yang diperlukan untuk mendukung workload berperforma tinggi.
  • Gunakan virtualisasi input/output root tunggal (SR-IOV) pada antarmuka jaringan PCI Express untuk memvirtualisasinya menjadi beberapa antarmuka virtual. Kemudian, Anda dapat mengonfigurasi workload yang terhubung ke Distributed Cloud untuk menggunakan antarmuka jaringan virtual tersebut.

Dukungan yang terhubung dengan Distributed Cloud untuk SR-IOV didasarkan pada project open source berikut:

Prasyarat

Operator Network Function mengambil konfigurasi jaringan dari Distributed Cloud Edge Network API. Untuk mengizinkannya, Anda harus memberikan peran Edge Network Viewer (roles/edgenetwork.viewer) kepada akun layanan operator Network Function menggunakan perintah berikut:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --role roles/edgenetwork.viewer \
  --member "serviceAccount:PROJECT_ID.svc.id.goog[nf-operator/nf-angautomator-sa]"

Ganti PROJECT_ID dengan ID project Google Cloud target.

Resource operator Network Function

Operator Fungsi Jaringan yang terhubung Distributed Cloud menerapkan CRD Kubernetes berikut:

  • Network. Menentukan jaringan virtual yang dapat digunakan pod untuk berkomunikasi dengan resource internal dan eksternal. Anda harus membuat VLAN yang sesuai menggunakan Distributed Cloud Edge Network API sebelum menentukannya di resource ini. Untuk mengetahui petunjuknya, lihat Membuat jaringan.
  • NetworkInterfaceState. Mengaktifkan penemuan status antarmuka jaringan dan membuat kueri antarmuka jaringan untuk status link dan alamat IP.
  • NodeSystemConfigUpdate. Mengaktifkan konfigurasi fitur sistem tingkat rendah seperti opsi kernel dan flag Kubelet.
  • SriovNetworkNodePolicy. Memilih grup antarmuka jaringan yang divirtualisasi SR-IOV dan membuat instance grup sebagai resource Kubernetes. Anda dapat menggunakan resource ini dalam resource NetworkAttachmentDefinition.
  • SriovNetworkNodeState. Memungkinkan Anda membuat kueri status penyediaan resource SriovNetworkNodePolicy di node Distributed Cloud.
  • NetworkAttachmentDefinition. Memungkinkan Anda melampirkan pod Distributed Cloud ke satu atau beberapa jaringan logis atau fisik di node Distributed Cloud yang terhubung. Anda harus membuat VLAN yang sesuai menggunakan Distributed Cloud Edge Network API sebelum menentukannya di resource ini. Untuk mengetahui petunjuknya, lihat Membuat jaringan.

Operator Network Function juga memungkinkan Anda menentukan antarmuka jaringan sekunder yang tidak menggunakan fungsi virtual SR-IOV.

Resource Network

Resource Network menentukan jaringan virtual dalam rak yang terhubung ke Distributed Cloud yang dapat digunakan pod dalam cluster yang terhubung ke Distributed Cloud untuk berkomunikasi dengan resource internal dan eksternal.

Resource Network menyediakan parameter yang dapat dikonfigurasi berikut untuk antarmuka jaringan yang diekspos sebagai kolom yang dapat ditulis:

  • spec.type: menentukan lapisan transport jaringan untuk jaringan ini. Satu-satunya nilai yang valid adalah L2. Anda juga harus menentukan nilai nodeInterfaceMatcher.interfaceName.
  • spec.nodeInterfaceMatcher.interfaceName: nama antarmuka jaringan fisik pada node target yang terhubung ke Distributed Cloud yang akan digunakan dengan jaringan ini.
  • spec.gateway4: alamat IP gateway jaringan untuk jaringan ini.
  • spec.l2NetworkConfig.prefixLength4: menentukan rentang CIDR untuk jaringan ini.
  • annotations.networking.gke.io/gdce-vlan-id: menentukan ID VLAN untuk jaringan ini.
  • annotations.networking.gke.io/gdce-vlan-mtu: (opsional) menentukan nilai MTU untuk jaringan ini. Jika tidak ditentukan, mewarisi nilai MTU dari antarmuka induk.
  • annotations.networking.gke.io/gdce-lb-service-vip-cidr: menentukan rentang alamat IP virtual untuk layanan load balancing. Nilai dapat berupa blok CIDR atau nilai rentang alamat eksplisit. Anotasi ini wajib untuk load balancing Lapisan 3 dan opsional untuk load balancing Lapisan 2.

Contoh berikut mengilustrasikan struktur resource:

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
    networking.gke.io/gdce-lb-service-vip-cidrs: "10.1.1.0/24"
spec:
  type: L2
  nodeInterfaceMatcher:
    interfaceName: gdcenet0.200
  gateway4: 10.53.0.1

Untuk menentukan beberapa rentang alamat IP virtual untuk layanan load balancing, gunakan anotasi networking.gke.io/gdce-lb-service-vip-cidrs. Anda dapat memberikan nilai untuk anotasi ini sebagai daftar yang dipisahkan koma atau sebagai payload JSON. Contoh:

[
  {
    "name": "test-oam-3",
    "addresses": ["10.235.128.133-10.235.128.133"],
    "autoAssign": false
  }
  ,
  {
    "name": "test-oam-4",
    "addresses": ["10.235.128.134-10.235.128.134"],
    "autoAssign": false
  },
  {
    "name": "test-oam-5",
    "addresses": ["10.235.128.135-10.235.128.135"],
    "autoAssign": false
  }
]

Jika Anda memilih untuk menggunakan payload JSON, sebaiknya gunakan format JSON ringkas. Contoh:

apiVersion: networking.gke.io/v1
  kind: Network
  metadata:
    annotations:
      networking.gke.io/gdce-lb-service-vip-cidrs: '[{"name":"test-oam-3","addresses":["10.235.128.133-10.235.128.133"],"autoAssign":false},{"name":"test-oam-4","addresses":["10.235.128.134-10.235.128.134"],"autoAssign":false},{"name":"test-oam-5","addresses":["10.235.128.135-10.235.128.135"],"autoAssign":false}]'
      networking.gke.io/gdce-vlan-id: "81"
    name: test-network-vlan81
  spec:
    IPAMMode: Internal
    dnsConfig:
      nameservers:
      - 8.8.8.8
    gateway4: 192.168.81.1
    l2NetworkConfig:
      prefixLength4: 24
    nodeInterfaceMatcher:
      interfaceName: gdcenet0.81
    type: L2

Perhatikan bahwa kolom autoAssign secara default adalah false jika tidak diisi.

Resource NetworkInterfaceState

Resource NetworkInterfaceState adalah resource hanya baca yang memungkinkan Anda menemukan antarmuka jaringan fisik di node dan mengumpulkan statistik runtime tentang traffic jaringan yang mengalir melalui antarmuka tersebut. Distributed Cloud membuat resource NetworkInterfaceState untuk setiap node dalam cluster.

Konfigurasi default mesin yang terhubung ke Distributed Cloud mencakup antarmuka jaringan gabungan pada Kartu Tambahan Jaringan Seleksi Rak (rNDC) bernama gdcenet0. Antarmuka ini menggabungkan antarmuka jaringan eno1np0 dan eno2np1. Setiap koneksi tersebut terhubung ke satu switch ToR Distributed Cloud.

Resource NetworkInterfaceState menyediakan kategori informasi antarmuka jaringan berikut yang diekspos sebagai kolom status hanya baca.

Informasi umum:

  • status.interfaces.ifname: nama antarmuka jaringan target.
  • status.lastReportTime: waktu dan tanggal laporan status terakhir untuk antarmuka target.

Informasi konfigurasi alamat IP:

  • status.interfaces.interfaceinfo.address: alamat IP yang ditetapkan ke antarmuka target.
  • status.interfaces.interfaceinfo.dns: alamat IP server DNS yang ditetapkan ke antarmuka target.
  • status.interfaces.interfaceinfo.gateway: alamat IP gateway jaringan yang melayani antarmuka target.
  • status.interfaces.interfaceinfo.prefixlen: panjang awalan IP.

Informasi hardware:

  • status.interfaces.linkinfo.broadcast: alamat MAC siaran dari antarmuka target.
  • status.interfaces.linkinfo.businfo: jalur perangkat PCIe dalam format bus:slot.function.
  • status.interfaces.linkinfo.flags: tanda antarmuka—misalnya, BROADCAST.
  • status.interfaces.linkinfo.macAddress: alamat MAC Unicast dari antarmuka target.
  • status.interfaces.linkinfo.mtu: nilai MTU untuk antarmuka target.

Statistik penerimaan:

  • status.interfaces.statistics.rx.bytes: total byte yang diterima oleh antarmuka target.
  • status.interfaces.statistics.rx.dropped: total paket yang dihentikan oleh antarmuka target.
  • status.interfaces.statistics.rx.errors: total error penerimaan paket untuk antarmuka target.
  • status.interfaces.statistics.rx.multicast: total paket multicast yang diterima oleh antarmuka target.
  • status.interfaces.statistics.rx.overErrors: total penerimaan paket melalui error untuk antarmuka target.
  • status.interfaces.statistics.rx.packets: total paket yang diterima oleh antarmuka target.

Statistik transmisi:

  • status.interfaces.statistics.tx.bytes: total byte yang ditransmisikan oleh antarmuka target.
  • status.interfaces.statistics.tx.carrierErrors: total error operator yang dialami oleh antarmuka target.
  • status.interfaces.statistics.tx.collisions: total tabrakan paket yang dialami oleh antarmuka target.
  • status.interfaces.statistics.tx.dropped: total paket yang dihentikan oleh antarmuka target.
  • status.interfaces.statistics.tx.errors: total error transmisi untuk antarmuka target.
  • status.interfaces.statistics.tx.packets: total paket yang dikirimkan oleh antarmuka target.

Contoh berikut mengilustrasikan struktur resource:

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"

Resource NodeSystemConfigUpdate

Resource NodeSystemConfigUpdate memungkinkan Anda membuat perubahan pada konfigurasi sistem operasi node serta mengubah flag Kubelet. Perubahan selain perubahan sysctl memerlukan mulai ulang node.

Saat membuat instance resource ini, Anda harus menentukan target node di kolom nodeSelector. Anda harus menyertakan semua key-value pair untuk setiap target node di kolom nodeSelector. Jika Anda menentukan lebih dari satu node target di kolom ini, node target akan diupdate satu per satu.

PERHATIAN: Kolom nodeName tidak digunakan lagi. Penggunaan perintah ini akan segera mem-reboot node target, termasuk node bidang kontrol lokal, yang dapat menghentikan beban kerja kritis.

Resource NodeSystemConfigUpdate menyediakan kolom konfigurasi berikut yang khusus untuk Distributed Cloud yang terhubung:

  • spec.containerRuntimeDNSConfig.ip: menentukan daftar alamat IP untuk registry image pribadi.
  • spec.containerRuntimeDNSConfig: menentukan daftar entri DNS kustom yang digunakan oleh Lingkungan Runtime Kontainer di setiap node yang terhubung ke Distributed Cloud. Setiap entri terdiri dari kolom berikut:

    • ip: menentukan alamat IPv4 target,
    • domain: menentukan domain yang sesuai,
    • interface: menentukan antarmuka keluar jaringan yang dapat dijangkau oleh alamat IP yang ditentukan di kolom ip. Anda dapat menentukan antarmuka yang ditentukan melalui resource berikut: CustomNetworkInterfaceConfig, Network (dengan anotasi), NetworkAttachmentDefinition, (dengan anotasi). Ini adalah fitur tingkat pratinjau.
  • spec.kubeletConfig.cpuManagerPolicy: menentukan kebijakan CPUManager Kubernetes. Nilai yang valid adalah None dan Static.

  • spec.kubeletConfig.topologyManagerPolicy: menentukan kebijakan TopologyManager Kubernetes. Nilai yang valid adalah: None, BestEffort, Restricted, dan SingleNumaMode.

  • spec.osConfig.hugePagesConfig: menentukan konfigurasi halaman besar per node NUMA. Nilai yang valid adalah 2MB dan 1GB. Jumlah halaman besar yang diminta didistribusikan secara merata di kedua node NUMA dalam sistem. Misalnya, jika Anda mengalokasikan 16 halaman besar dengan ukuran 1 GB setiap halaman, setiap node akan menerima pra-alokasi sebesar 8 GB.

  • spec.osConfig.isolatedCpusPerSocket: menentukan jumlah CPU terisolasi per soket. Wajib jika cpuManagerPolicy ditetapkan ke Static. Jumlah maksimum CPU terisolasi harus kurang dari 80% dari total CPU di node.

  • spec.osConfig.cpuIsolationPolicy: menentukan kebijakan isolasi CPU. Kebijakan Default hanya mengisolasi tugas systemd dari CPU yang dicadangkan untuk workload. Kebijakan Kernel menandai CPU sebagai isolcpus dan menetapkan flag rcu_nocb, nohz_full, dan rcu_nocb_poll pada setiap CPU.

  • spec.sysctls.NodeLevel: menentukan parameter sysctls yang dapat Anda konfigurasi secara global di node menggunakan operator Network Function. Parameter yang dapat dikonfigurasi adalah sebagai berikut:

    • fs.inotify.max_user_instances
    • fs.inotify.max_user_watches
    • kernel.sched_rt_runtime_us
    • kernel.core_pattern
    • net.ipv4.tcp_wmem
    • net.ipv4.tcp_rmem
    • net.ipv4.tcp_slow_start_after_idle
    • net.ipv4.udp_rmem_min
    • net.ipv4.udp_wmem_min
    • net.ipv4.tcp_rmem
    • net.ipv4.tcp_wmem
    • net.core.rmem_max
    • net.core.wmem_max
    • net.core.rmem_default
    • net.core.wmem_default
    • net.netfilter.nf_conntrack_tcp_timeout_unacknowledged
    • net.netfilter.nf_conntrack_tcp_timeout_max_retrans
    • net.sctp.auth_enable
    • net.sctp.sctp_mem
    • net.ipv4.udp_mem
    • net.ipv4.tcp_mem
    • net.ipv4.tcp_slow_start_after_idle
    • net.sctp.auth_enable
    • vm.max_map_count

    Anda juga dapat mencakup parameter sysctls yang aman dan tidak aman ke pod atau namespace tertentu menggunakan plugin tuning Container Networking Interface (CNI).

Resource NodeSystemConfigUpdate menyediakan kolom status umum hanya baca berikut:

  • status.lastReportTime: waktu terakhir status dilaporkan untuk antarmuka target.
  • status.conditions.lastTransitionTime: waktu terbaru saat kondisi antarmuka berubah.
  • status.conditions.observedGeneration: menunjukkan nilai .metadata.generation yang menjadi dasar kondisi awal.
  • status.conditions.message: pesan informatif yang menjelaskan perubahan kondisi antarmuka.
  • status.conditions.reason: ID terprogram yang menunjukkan alasan perubahan terakhir kondisi antarmuka.
  • status.conditions.status: deskriptor status kondisi. Nilai yang valid adalah True, False, dan Unknown.
  • status.conditions.type: jenis kondisi dalam camelCase.

Contoh berikut mengilustrasikan struktur resource:

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

Resource SriovNetworkNodePolicy

Resource SriovNetworkNodePolicy memungkinkan Anda mengalokasikan grup fungsi virtual (VF) SR-IOV di mesin fisik yang terhubung ke Distributed Cloud dan membuat instance grup tersebut sebagai resource Kubernetes. Kemudian, Anda dapat menggunakan resource ini dalam resource NetworkAttachmentDefinition.

Anda dapat memilih setiap VF target berdasarkan vendor dan ID perangkat PCIe, alamat perangkat PCIe, atau nama perangkat yang di-enumerasi Linux. Operator Jaringan SR-IOV mengonfigurasi setiap antarmuka jaringan fisik untuk menyediakan VF target. Hal ini mencakup mengupdate firmware antarmuka jaringan, mengonfigurasi driver kernel Linux, dan memulai ulang mesin yang terhubung ke Distributed Cloud, jika perlu.

Untuk menemukan antarmuka jaringan yang tersedia di node, Anda dapat mencari resource NetworkInterfaceState di node tersebut dalam namespace nf-operator.

Contoh berikut mengilustrasikan struktur resource:

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

Contoh sebelumnya membuat maksimum 31 VF dari port kedua pada antarmuka jaringan bernama enp134s0f1np1 dengan nilai MTU 9000 (nilai maksimum yang diizinkan). Gunakan label pemilih node edgecontainer.googleapis.com/network-sriov.capable, yang ada di semua node yang terhubung ke Distributed Cloud yang mendukung SR-IOV.

Untuk mengetahui informasi tentang cara menggunakan resource ini, lihat SriovNetworkNodeState.

Resource SriovNetworkNodeState

Resource hanya baca SriovNetworkNodeState memungkinkan Anda mengkueri status penyediaan resource SriovNetworkNodePolicy di node yang terhubung ke Distributed Cloud. Fungsi ini menampilkan konfigurasi lengkap resource SriovNetworkNodePolicy di node serta daftar VF aktif di node. Kolom status.syncStatus menunjukkan apakah semua resource SriovNetworkNodePolicy yang ditentukan untuk node telah diterapkan dengan benar.

Contoh berikut mengilustrasikan struktur resource:

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

Untuk mengetahui informasi tentang cara menggunakan resource ini, lihat SriovNetworkNodeState.

Resource NetworkAttachmentDefinition

Resource NetworkAttachmentDefinition memungkinkan Anda melampirkan pod Distributed Cloud ke satu atau beberapa jaringan logis atau fisik di node yang terhubung ke Distributed Cloud. Plugin ini memanfaatkan framework Multus-CNI dan plugin berikut:

Gunakan anotasi untuk mereferensikan nama resource SriovNetworkNodePolicy yang sesuai. Saat Anda membuat anotasi ini, lakukan hal berikut:

  • Gunakan kunci k8s.v1.cni.cncf.io/resourceName.
  • Gunakan awalan gke.io/ dalam nilainya, diikuti dengan nama resource SriovNetworkNodePolicy target.

Gunakan anotasi networking.gke.io/gdce-vlan-id untuk menentukan ID VLAN untuk jaringan target. Anotasi ini wajib ada.

Contoh berikut mengilustrasikan struktur resource. Untuk jaringan IPv4.

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
    networking.gke.io/gdce-vlan-id: 225

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"
  }
}'

Untuk jaringan IPv6:

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: sriov-210-den102
  annotations:
    k8s.v1.cni.cncf.io/resourceName: gke.io/mlnx6_p0_sriov_en
    networking.gke.io/gdce-vlan-id: 225
spec:
  config: '{
  "type": "sriov",
  "cniVersion": "0.3.1",
  "name": "sriov-210-den102",
  "vlan": 210,
  
  "ipam": {
    "type": "host-local",
    "rangeStart": "2001:4860:1025:102:ffff:0220::2",
    "rangeEnd": "2001:4860:1025:102:ffff:0220::F",
    "subnet": "2001:4860:1025:102:ffff:0220::/96",
    "routes": [{
      "dst": "::/0"
    }],
    "gateway": "2001:4860:1025:102:ffff:0220::1"
  }
}'

Mengonfigurasi antarmuka sekunder pada pod menggunakan VF SR-IOV

Setelah mengonfigurasi resource SriovNetworkNodePolicy dan resource NetworkAttachmentDefinition yang sesuai, Anda dapat mengonfigurasi antarmuka jaringan sekunder pada pod Distributed Cloud menggunakan fungsi virtual SR-IOV.

Untuk melakukannya, tambahkan anotasi ke definisi pod Distributed Cloud Anda sebagai berikut:

  • Kunci: k8s.v1.cni.cncf.io/networks
  • Nilai: nameSpace/<NetworkAttachmentDefinition1,nameSpace/NetworkAttachmentDefinition2...

Contoh berikut mengilustrasikan anotasi ini:

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

Mengonfigurasi antarmuka sekunder pada pod menggunakan driver MacVLAN

Distributed Cloud Connected juga mendukung pembuatan antarmuka jaringan sekunder pada pod dengan menggunakan driver MacVLAN. Hanya antarmuka gdcenet0 yang mendukung konfigurasi ini dan hanya pada pod yang menjalankan workload yang dikontainerisasi.

Untuk mengonfigurasi antarmuka agar menggunakan driver MacVLAN:

  1. Konfigurasi resource NetworkAttachmentDefinition seperti yang ditunjukkan dalam contoh berikut. Untuk jaringan IPv4:

     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"
           }
         ]
       ...
       }
     }'
    

    Untuk jaringan IPv6:

     apiVersion: "k8s.cni.cncf.io/v1"
     kind: NetworkAttachmentDefinition
     metadata:
       name: macvlan-bond0-210-den402
       annotations:
           networking.gke.io/gdce-vlan-id
     spec:
       config: '{
       "type": "macvlan",
       "cniVersion": "0.3.1",
       "name": "bond0-210",
       "master": "bond0.210",
    
       "ipam": {
         "type": "host-local",
         "rangeStart": "2001:4860:1025:102:0001:0210::2",
         "rangeEnd": "2001:4860:1025:102:0001:0210::F",
         "subnet": "2001:4860:1025:102:0001:0210::/96",
         "routes": [{
           "dst": "::/0"
         }],
         "gateway": "2001:4860:1025:102:0001:0210::1"
       }
     }'
    
  2. Tambahkan anotasi ke definisi pod Distributed Cloud Anda sebagai berikut. Untuk jaringan IPv4:

     apiVersion: v1
     kind: pod
     metadata:
       name: macvlan-testpod1
       annotations:
         k8s.v1.cni.cncf.io/networks: macvlan-b400-1
    

    Untuk jaringan IPv6:

     apiVersion: v1
     kind: Pod
     metadata:
       name: vlan210-1
       namespace: default
       annotations:
         k8s.v1.cni.cncf.io/networks: default/macvlan-bond0-210-den402
    

Mengonfigurasi antarmuka sekunder pada pod menggunakan multi-jaringan Distributed Cloud

Distributed Cloud Connected mendukung pembuatan antarmuka jaringan sekunder pada pod menggunakan fitur multi-jaringannya. Untuk melakukannya, selesaikan langkah-langkah berikut:

  1. Konfigurasi resource Network. Contoh:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: vlan200-network
    spec:
      type: L2
      nodeInterfaceMatcher:
        interfaceName: vlan200-interface
      gateway4: 10.53.0.1
    
  2. Tambahkan anotasi ke definisi pod Distributed Cloud Anda sebagai berikut:

    apiVersion: v1
    kind: pod
    metadata:
      name: mypod
      annotations:
        networking.gke.io/interfaces: '[{"interfaceName":"eth1","network":"vlan200-network"}]'
        networking.gke.io/default-interface: eth1
    ...
    
    

    Langkah berikutnya