Running iperf3 tests in OpenShift

In this blog post, I will document how to deploy and expose an iperf server for testing.

Setup the Server

apiVersion: v1
kind: Pod
metadata:
  name: iperf-server
  namespace: iperf
  labels:
    app: iperf-server
spec:
  nodeSelector:
    kubernetes.io/hostname: nuc2
  containers:
  - name: iperf-server
    image: networkstatic/iperf3
    args: ["-s"]
    ports:
    - containerPort: 5201

In this example, we are starting an iperf3 server listening on port 5201. I am also manually positioning this pod on a particular node to ensure that the client pod won’t end up on the same node. Testing loopback doesn’t provide much quality data.

Setup the Client

apiVersion: v1
kind: Pod
metadata:
  name: iperf-client
  namespace: iperf
spec:
  nodeSelector:
    kubernetes.io/hostname: nuc3
  containers:
  - name: iperf-client
    image: networkstatic/iperf3
    command: ["sleep", "infinity"]

Notice it’s running on a different node. Once these are setup, you can run the test.

oc get pod iperf-server -o wide # Get the server-pod-ip
oc exec iperf-client -- iperf3 -c <server-pod-ip>
oc exec iperf-client -- iperf3 -c --bidir -J <server-pod-ip> # More detailed latency info

Exposing the Service

The previous test would test connectivity between nodes. We also want to test from external. For this, we will use MetalLB to expose an IP. So let’s get that setup first.

apiVersion: v1
kind: Namespace
metadata:
  name: metallb-system
  labels:
    openshift.io/cluster-monitoring: true
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: metallb-operator
  namespace: metallb-system
spec:
  targetNamespaces:
    - metallb-system
---
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: metallb-operator
  namespace: metallb-system
spec:
  channel: stable
  installPlanApproval: Automatic
  name: metallb-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace

Once the operator is installed, create the custom resources.

apiVersion: metallb.io/v1beta1
kind: MetalLB
metadata:
  name: metallb
  namespace: metallb-system

In my example, my cluster is running in a 10.3.0.1/24 subnet, so I want to create a small IPAddressPool within that subnet.

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: pool-80-90
  namespace: metallb-system
spec:
  addresses:
    - 10.3.0.80-10.3.0.90
  autoAssign: true
  avoidBuggyIPs: false

Once that is there, then I configure it to advertise at L2.

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2-advertisement
  namespace: metallb-system
spec:
  ipAddressPools:
    - pool-80-90

Finally, I can now just create a LoadBalancer service and it will automatically pick up and expose the service on an IP from that pool.

apiVersion: v1
kind: Service
metadata:
  name: iperf-lb
  namespace: iperf
  annotations:
    metallb.universe.tf/loadBalancerIPs: "10.3.0.80"
spec:
  selector:
    app: iperf-server
  ports:
    - port: 5201
      targetPort: 5201
      protocol: TCP
  type: LoadBalancer

When this is applied, you can then query for the IP address. Here’s the Service yaml with all the status.

kind: Service
apiVersion: v1
metadata:
  name: iperf-lb
  namespace: iperf
  uid: d6f87dd8-1cc7-404e-aa41-1a78aff0acfc
  resourceVersion: '1256942'
  creationTimestamp: '2025-04-18T17:13:12Z'
  annotations:
    metallb.io/ip-allocated-from-pool: pool-80-90
    metallb.universe.tf/loadBalancerIPs: 10.3.0.80
spec:
  clusterIP: 172.30.177.247
  externalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ports:
    - protocol: TCP
      port: 5201
      targetPort: 5201
      nodePort: 32412
  internalTrafficPolicy: Cluster
  clusterIPs:
    - 172.30.177.247
  allocateLoadBalancerNodePorts: true
  type: LoadBalancer
  ipFamilyPolicy: SingleStack
  sessionAffinity: None
  selector:
    app: iperf-server
status:
  loadBalancer:
    ingress:
      - ip: 10.3.0.80
        ipMode: VIP

Now we have an exposed IP, advertised on L2 and we can hit it from the outside.

[me@msi ~]$ iperf3 --bidir -J -c 10.3.0.80
{
        "start":        {
                "connected":    [{
                                "socket":       5,
                                "local_host":   "10.3.0.3",
                                "local_port":   45430,
                                "remote_host":  "10.3.0.80",
                                "remote_port":  5201
                        }, {
                                "socket":       7,
                                "local_host":   "10.3.0.3",
                                "local_port":   45442,
                                "remote_host":  "10.3.0.80",
                                "remote_port":  5201
                        }],
                "version":      "iperf 3.9",
                "system_info":  "Linux msi 5.14.0-503.34.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Mar 17 21:49:47 EDT 2025 x86_64",
                "timestamp":    {
                        "time": "Fri, 18 Apr 2025 16:44:03 GMT",
                        "timesecs":     1744994643
                },
                "connecting_to":        {
                        "host": "10.3.0.80",
                        "port": 5201
                },
                "cookie":       "4vrvtp6cj3c6k6ps4zinxy4oq5vzvuyxn6p7",
                "tcp_mss_default":      1348,
                "sock_bufsize": 0,
                "sndbuf_actual":        16384,
                "rcvbuf_actual":        131072,
                "sock_bufsize": 0,
                "sndbuf_actual":        16384,
                "rcvbuf_actual":        131072,
                "test_start":   {
                        "protocol":     "TCP",
                        "num_streams":  1,
                        "blksize":      131072,
                        "omit": 0,
                        "duration":     10,
                        "bytes":        0,
                        "blocks":       0,
                        "reverse":      0,
                        "tos":  0
                }
        },
        "intervals":    [{
                        "streams":      [{
                                        "socket":       5,
                                        "start":        0,
                                        "end":  1.000284,
                                        "seconds":      1.00028395652771,
                                        "bytes":        113746584,
                                        "bits_per_second":      909714352.67120755,
                                        "retransmits":  0,
                                        "snd_cwnd":     605252,
                                        "rtt":  2668,
                                        "rttvar":       187,
                                        "pmtu": 1500,
                                        "omitted":      false,
                                        "sender":       true
                                }, {
                                        "socket":       7,
                                        "start":        0,
                                        "end":  1.000289,
                                        "seconds":      1.0002889633178711,
                                        "bytes":        60555264,
                                        "bits_per_second":      484302166.43913358,
                                        "omitted":      false,
                                        "sender":       false
                                }],
                        "sum":  {
                                "start":        0,
                                "end":  1.000284,
                                "seconds":      1.00028395652771,
                                "bytes":        113746584,
                                "bits_per_second":      909714352.67120755,
                                "retransmits":  0,
                                "omitted":      false,
                                "sender":       true
                        },
                        "sum":  {
                                "start":        0,
                                "end":  1.000284,
                                "seconds":      1.00028395652771,
                                "bytes":        60555264,
                                "bits_per_second":      484304590.55011338,
                                "omitted":      false,
                                "sender":       false
                        }
                }, {
                        "streams":      [{
                                        "socket":       5,
                                        "start":        1.000284,
                                        "end":  2.000478,
                                        "seconds":      1.0001939535140991,
                                        "bytes":        116258260,
                                        "bits_per_second":      929885725.395849,
                                        "retransmits":  0,
                                        "snd_cwnd":     605252,
                                        "rtt":  3092,
                                        "rttvar":       251,
                                        "pmtu": 1500,
                                        "omitted":      false,
                                        "sender":       true
                                }, {
                                        "socket":       7,
                                        "start":        1.000289,
                                        "end":  2.000484,
                                        "seconds":      1.0001950263977051,
                                        "bytes":        49414144,
                                        "bits_per_second":      395236070.53292084,
                                        "omitted":      false,
                                        "sender":       false
                                }],
                        "sum":  {
                                "start":        1.000284,
                                "end":  2.000478,
                                "seconds":      1.0001939535140991,
                                "bytes":        116258260,
                                "bits_per_second":      929885725.395849,
                                "retransmits":  0,
                                "omitted":      false,
                                "sender":       true
                        },
                        "sum":  {
                                "start":        1.000284,
                                "end":  2.000478,
                                "seconds":      1.0001939535140991,
                                "bytes":        49414144,
                                "bits_per_second":      395236494.49299288,
                                "omitted":      false,
                                "sender":       false
                        }
                }, {
                        "streams":      [{
                                        "socket":       5,
                                        "start":        2.000478,
                                        "end":  3.000878,
                                        "seconds":      1.0003999471664429,
                                        "bytes":        114737716,
                                        "bits_per_second":      917534762.57159662,
                                        "retransmits":  0,
                                        "snd_cwnd":     699612,
                                        "rtt":  4664,
                                        "rttvar":       99,
                                        "pmtu": 1500,
                                        "omitted":      false,
                                        "sender":       true
                                }, {
                                        "socket":       7,
                                        "start":        2.000484,
                                        "end":  3.000884,
                                        "seconds":      1.0003999471664429,
                                        "bytes":        111411200,
                                        "bits_per_second":      890933273.7616694,
                                        "omitted":      false,
                                        "sender":       false
                                }],
                        "sum":  {
                                "start":        2.000478,
                                "end":  3.000878,
                                "seconds":      1.0003999471664429,
                                "bytes":        114737716,
                                "bits_per_second":      917534762.57159662,
                                "retransmits":  0,
                                "omitted":      false,
                                "sender":       true
                        },
                        "sum":  {
                                "start":        2.000478,
                                "end":  3.000878,
                                "seconds":      1.0003999471664429,
                                "bytes":        111411200,
                                "bits_per_second":      890933273.7616694,
                                "omitted":      false,
                                "sender":       false
                        }
                }, {
                        "streams":      [{
                                        "socket":       5,
                                        "start":        3.000878,
                                        "end":  4.000049,
                                        "seconds":      0.999171018600464,
                                        "bytes":        114104156,
                                        "bits_per_second":      913590597.61221159,
                                        "retransmits":  0,
                                        "snd_cwnd":     811496,
                                        "rtt":  5687,
                                        "rttvar":       147,
                                        "pmtu": 1500,
                                        "omitted":      false,
                                        "sender":       true
                                }, {
                                        "socket":       7,
                                        "start":        3.000884,
                                        "end":  4.000055,
                                        "seconds":      0.999171018600464,
                                        "bytes":        114688000,
                                        "bits_per_second":      918265224.79119277,
                                        "omitted":      false,
                                        "sender":       false
                                }],
                        "sum":  {
                                "start":        3.000878,
                                "end":  4.000049,
                                "seconds":      0.999171018600464,
                                "bytes":        114104156,
                                "bits_per_second":      913590597.61221159,
                                "retransmits":  0,
                                "omitted":      false,
                                "sender":       true
                        },
                        "sum":  {
                                "start":        3.000878,
                                "end":  4.000049,
                                "seconds":      0.999171018600464,
                                "bytes":        114688000,
                                "bits_per_second":      918265224.79119277,
                                "omitted":      false,
                                "sender":       false
                        }
                }, {
                        "streams":      [{
                                        "socket":       5,
                                        "start":        4.000049,
                                        "end":  5.000901,
                                        "seconds":      1.0008519887924194,
                                        "bytes":        116258260,
                                        "bits_per_second":      929274348.66985047,
                                        "retransmits":  0,
                                        "snd_cwnd":     888332,
                                        "rtt":  6139,
                                        "rttvar":       278,
                                        "pmtu": 1500,
                                        "omitted":      false,
                                        "sender":       true
                                }, {
                                        "socket":       7,
                                        "start":        4.000055,
                                        "end":  5.000907,
                                        "seconds":      1.0008519887924194,
                                        "bytes":        115474432,
                                        "bits_per_second":      923009062.62334335,
                                        "omitted":      false,
                                        "sender":       false
                                }],
                        "sum":  {
                                "start":        4.000049,
                                "end":  5.000901,
                                "seconds":      1.0008519887924194,
                                "bytes":        116258260,
                                "bits_per_second":      929274348.66985047,
                                "retransmits":  0,
                                "omitted":      false,
                                "sender":       true
                        },
                        "sum":  {
                                "start":        4.000049,
                                "end":  5.000901,
                                "seconds":      1.0008519887924194,
                                "bytes":        115474432,
                                "bits_per_second":      923009062.62334335,
                                "omitted":      false,
                                "sender":       false
                        }
                }, {
                        "streams":      [{
                                        "socket":       5,
                                        "start":        5.000901,
                                        "end":  6.000893,
                                        "seconds":      0.9999920129776,
                                        "bytes":        116701752,
                                        "bits_per_second":      933621472.85561669,
                                        "retransmits":  0,
                                        "snd_cwnd":     932816,
                                        "rtt":  6208,
                                        "rttvar":       206,
                                        "pmtu": 1500,
                                        "omitted":      false,
                                        "sender":       true
                                }, {
                                        "socket":       7,
                                        "start":        5.000907,
                                        "end":  6.000899,
                                        "seconds":      0.9999920129776,
                                        "bytes":        115081216,
                                        "bits_per_second":      920657081.308731,
                                        "omitted":      false,
                                        "sender":       false
                                }],
                        "sum":  {
                                "start":        5.000901,
                                "end":  6.000893,
                                "seconds":      0.9999920129776,
                                "bytes":        116701752,
                                "bits_per_second":      933621472.85561669,
                                "retransmits":  0,
                                "omitted":      false,
                                "sender":       true
                        },
                        "sum":  {
                                "start":        5.000901,
                                "end":  6.000893,
                                "seconds":      0.9999920129776,
                                "bytes":        115081216,
                                "bits_per_second":      920657081.308731,
                                "omitted":      false,
                                "sender":       false
                        }
                }, {
                        "streams":      [{
                                        "socket":       5,
                                        "start":        6.000893,
                                        "end":  7.000436,
                                        "seconds":      0.999543011188507,
                                        "bytes":        116638396,
                                        "bits_per_second":      933533782.49375033,
                                        "retransmits":  0,
                                        "snd_cwnd":     932816,
                                        "rtt":  6192,
                                        "rttvar":       69,
                                        "pmtu": 1500,
                                        "omitted":      false,
                                        "sender":       true
                                }, {
                                        "socket":       7,
                                        "start":        6.000899,
                                        "end":  7.00047,
                                        "seconds":      0.99957102537155151,
                                        "bytes":        115081216,
                                        "bits_per_second":      921044832.8649627,
                                        "omitted":      false,
                                        "sender":       false
                                }],
                        "sum":  {
                                "start":        6.000893,
                                "end":  7.000436,
                                "seconds":      0.999543011188507,
                                "bytes":        116638396,
                                "bits_per_second":      933533782.49375033,
                                "retransmits":  0,
                                "omitted":      false,
                                "sender":       true
                        },
                        "sum":  {
                                "start":        6.000893,
                                "end":  7.000436,
                                "seconds":      0.999543011188507,
                                "bytes":        115081216,
                                "bits_per_second":      921070646.98026454,
                                "omitted":      false,
                                "sender":       false
                        }
                }, {
                        "streams":      [{
                                        "socket":       5,
                                        "start":        7.000436,
                                        "end":  8.000392,
                                        "seconds":      0.99995601177215576,
                                        "bytes":        115497988,
                                        "bits_per_second":      924024550.202448,
                                        "retransmits":  0,
                                        "snd_cwnd":     977300,
                                        "rtt":  5424,
                                        "rttvar":       39,
                                        "pmtu": 1500,
                                        "omitted":      false,
                                        "sender":       true
                                }, {
                                        "socket":       7,
                                        "start":        7.00047,
                                        "end":  8.000397,
                                        "seconds":      0.99992698431015,
                                        "bytes":        114950144,
                                        "bits_per_second":      919668302.21551931,
                                        "omitted":      false,
                                        "sender":       false
                                }],
                        "sum":  {
                                "start":        7.000436,
                                "end":  8.000392,
                                "seconds":      0.99995601177215576,
                                "bytes":        115497988,
                                "bits_per_second":      924024550.202448,
                                "retransmits":  0,
                                "omitted":      false,
                                "sender":       true
                        },
                        "sum":  {
                                "start":        7.000436,
                                "end":  8.000392,
                                "seconds":      0.99995601177215576,
                                "bytes":        114950144,
                                "bits_per_second":      919641605.40447354,
                                "omitted":      false,
                                "sender":       false
                        }
                }, {
                        "streams":      [{
                                        "socket":       5,
                                        "start":        8.000392,
                                        "end":  9.000457,
                                        "seconds":      1.0000649690628052,
                                        "bytes":        116891820,
                                        "bits_per_second":      935073809.130967,
                                        "retransmits":  0,
                                        "snd_cwnd":     977300,
                                        "rtt":  6231,
                                        "rttvar":       130,
                                        "pmtu": 1500,
                                        "omitted":      false,
                                        "sender":       true
                                }, {
                                        "socket":       7,
                                        "start":        8.000397,
                                        "end":  9.000462,
                                        "seconds":      1.0000649690628052,
                                        "bytes":        115081216,
                                        "bits_per_second":      920589918.135791,
                                        "omitted":      false,
                                        "sender":       false
                                }],
                        "sum":  {
                                "start":        8.000392,
                                "end":  9.000457,
                                "seconds":      1.0000649690628052,
                                "bytes":        116891820,
                                "bits_per_second":      935073809.130967,
                                "retransmits":  0,
                                "omitted":      false,
                                "sender":       true
                        },
                        "sum":  {
                                "start":        8.000392,
                                "end":  9.000457,
                                "seconds":      1.0000649690628052,
                                "bytes":        115081216,
                                "bits_per_second":      920589918.135791,
                                "omitted":      false,
                                "sender":       false
                        }
                }, {
                        "streams":      [{
                                        "socket":       5,
                                        "start":        9.000457,
                                        "end":  10.000612,
                                        "seconds":      1.000154972076416,
                                        "bytes":        115624700,
                                        "bits_per_second":      924854273.412867,
                                        "retransmits":  0,
                                        "snd_cwnd":     1025828,
                                        "rtt":  6342,
                                        "rttvar":       276,
                                        "pmtu": 1500,
                                        "omitted":      false,
                                        "sender":       true
                                }, {
                                        "socket":       7,
                                        "start":        9.000462,
                                        "end":  10.000617,
                                        "seconds":      1.000154972076416,
                                        "bytes":        114950144,
                                        "bits_per_second":      919458661.582036,
                                        "omitted":      false,
                                        "sender":       false
                                }],
                        "sum":  {
                                "start":        9.000457,
                                "end":  10.000612,
                                "seconds":      1.000154972076416,
                                "bytes":        115624700,
                                "bits_per_second":      924854273.412867,
                                "retransmits":  0,
                                "omitted":      false,
                                "sender":       true
                        },
                        "sum":  {
                                "start":        9.000457,
                                "end":  10.000612,
                                "seconds":      1.000154972076416,
                                "bytes":        114950144,
                                "bits_per_second":      919458661.582036,
                                "omitted":      false,
                                "sender":       false
                        }
                }],
        "end":  {
                "streams":      [{
                                "sender":       {
                                        "socket":       5,
                                        "start":        0,
                                        "end":  10.000612,
                                        "seconds":      10.000612,
                                        "bytes":        1156459632,
                                        "bits_per_second":      925111088.80136538,
                                        "retransmits":  0,
                                        "max_snd_cwnd": 1025828,
                                        "max_rtt":      6342,
                                        "min_rtt":      2668,
                                        "mean_rtt":     5264,
                                        "sender":       true
                                },
                                "receiver":     {
                                        "socket":       5,
                                        "start":        0,
                                        "end":  10.002899,
                                        "seconds":      10.000612,
                                        "bytes":        1154104676,
                                        "bits_per_second":      923016158.4156754,
                                        "sender":       true
                                }
                        }, {
                                "sender":       {
                                        "socket":       7,
                                        "start":        0,
                                        "end":  10.000612,
                                        "seconds":      10.000612,
                                        "bytes":        1029570560,
                                        "bits_per_second":      823606043.31014943,
                                        "retransmits":  118,
                                        "max_snd_cwnd": 13480,
                                        "max_rtt":      1169,
                                        "min_rtt":      1169,
                                        "mean_rtt":     1169,
                                        "sender":       false
                                },
                                "receiver":     {
                                        "socket":       7,
                                        "start":        0,
                                        "end":  10.002899,
                                        "seconds":      10.000612,
                                        "bytes":        1026686976,
                                        "bits_per_second":      821111540.56439042,
                                        "sender":       false
                                }
                        }],
                "sum_sent":     {
                        "start":        0,
                        "end":  10.000612,
                        "seconds":      10.000612,
                        "bytes":        1156459632,
                        "bits_per_second":      925111088.80136538,
                        "retransmits":  0,
                        "sender":       true
                },
                "sum_received": {
                        "start":        0,
                        "end":  10.002899,
                        "seconds":      10.002899,
                        "bytes":        1154104676,
                        "bits_per_second":      923016158.4156754,
                        "sender":       true
                },
                "sum_sent":     {
                        "start":        0,
                        "end":  10.000612,
                        "seconds":      10.000612,
                        "bytes":        1029570560,
                        "bits_per_second":      823606043.31014943,
                        "retransmits":  118,
                        "sender":       false
                },
                "sum_received": {
                        "start":        0,
                        "end":  10.002899,
                        "seconds":      10.002899,
                        "bytes":        1026686976,
                        "bits_per_second":      821111540.56439042,
                        "sender":       false
                },
                "cpu_utilization_percent":      {
                        "host_total":   3.7905955112489349,
                        "host_user":    0.24818025353002068,
                        "host_system":  3.5424152577189143,
                        "remote_total": 11.134908628098362,
                        "remote_user":  0.74831216632838182,
                        "remote_system":        10.386606458859827
                },
                "sender_tcp_congestion":        "cubic",
                "receiver_tcp_congestion":      "cubic"
        }
}

Which of course you can cut and paste into AI to get an analysis.

—-

This file contains the output from an iperf3 network performance test in JSON format. Iperf3 is a tool used to measure network throughput and performance between two endpoints. Let me explain the key components:

Test Setup

  • The test was conducted between two hosts: a client (10.3.0.3) and a server (10.3.0.80) on port 5201
  • It was run on April 18, 2025 at 16:44:03 GMT
  • The test used TCP protocol with a 10-second duration
  • The system was running Linux kernel 5.14.0 on an x86_64 architecture

Key Performance Metrics

  • Overall Throughput: The client sent data at an average rate of 925.1 Mbps (megabits per second)
  • Received Throughput: The server received data at 923.0 Mbps, indicating minimal packet loss
  • RTT (Round Trip Time): Varied between 2668 and 6342 microseconds, with a mean of 5264 microseconds
  • Retransmits: The client had 0 retransmits, suggesting a stable connection
  • TCP Congestion Algorithm: Both sides used “cubic” (Linux default)
  • CPU Utilization: Host (client) used 3.79% CPU while the remote (server) used 11.13% CPU

Interval Data

The test recorded performance data in 1-second intervals over the 10-second period, showing consistent performance throughout. The bandwidth starts around 909 Mbps in the first second and generally stays in the 920-935 Mbps range for most of the test.

This appears to be a solid network connection with high bandwidth, low latency, and minimal packet loss, which would be suitable for most demanding network applications.

One comment

Comments are closed.