Bandwidth PluginΒΆ

The bandwidth plugin allows the configuration of the linux traffic control subsystem for the interface. It uses a TBF queuing discipline (qdisc) on both ingress and egress traffic. It must be used as a chained plugin in conjunction with another interface-creating plugin.

See https://man7.org/linux/man-pages/man8/tbf.8.html for more information.

The following options are used to configure the plugin:

name (string, optional)

The name of the network.

type (string, required)

bandwidth

ingressRate (int, required)

The rate, in bits per second, at which traffic can enter an interface.

ingressBurst (int, required)

The maximum amount in bits that tokens can be made available for instantaneously.

egressRate (int, required)

The rate, in bits per second, at which traffic can leave an interface.

egressBurst (int, required)

The maximum amount, in bits, that tokens can be made available for instantaneously.

Example

The following example creates a pod with an additional bridge interface which uses the bandwidth plugin to ensure the ingress/egress rate does not exceed 100Kbps. Note the chained nature of the plugins.

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: bridge1
spec:
  config: '{
      "cniVersion": "0.3.1",
      "name": "bridgenet1",
      "plugins": [
          {
              "type": "bridge",
              "bridge": "br1",
              "ipam": {
                  "type": "static",
                  "addresses": [
                    {
                      "address": "10.10.10.1/24",
                      "gateway": "10.10.10.2"
                    }
                  ]
              }
          },
          {
              "name": "brbw",
              "type": "bandwidth",
              "ingressRate": 100000,
              "ingressBurst": 50000,
              "egressRate": 100000,
              "egressBurst": 50000
          }
      ]
    }'
---
apiVersion: v1
kind: Pod
metadata:
  name: bridgepod1
  annotations:
    k8s.v1.cni.cncf.io/networks: '[
            { "name": "bridge1" }
    ]'
spec:
  containers:
  - name: bridge1
    image: networkstatic/iperf3
    imagePullPolicy: IfNotPresent
    command: [ "/bin/bash", "-c", "--" ]
    args: [ "while true; do sleep 300000; done;" ]