3 Using Multus

Important:

The software described in this documentation is either in Extended Support or Sustaining Support. See Oracle Open Source Support Policies for more information.

We recommend that you upgrade the software described by this documentation as soon as possible.

This section contains a basic test to verify you can create a Kubernetes application that uses Multus. This example verifies you can use Multus to create a second network interface on a pod, which uses a network created with a NetworkAttachmentDefinitions CRD.

To create a second network interface:

  1. On a control plane node, create a YAML file named nad-bridge.yaml that contains a NetworkAttachmentDefinition CRD for a bridged connection. Create a YAML file with the following contents:

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: bridge-conf
    spec:
      config: '{
          "cniVersion": "0.3.1",
          "type": "bridge",
          "bridge": "mybr0",
          "ipam": {
              "type": "host-local",
              "subnet": "192.168.12.0/24",
              "rangeStart": "192.168.12.10",
              "rangeEnd": "192.168.12.200"
          }
        }'
  2. Use the kubectl apply command to create the NetworkAttachmentDefinition with the file:

    kubectl apply -f nad-bridge.yaml

    The NetworkAttachmentDefinition is created.

  3. You can verify the NetworkAttachmentDefinition is created using:

    kubectl get network-attachment-definitions

    The output looks similar to:

    NAME          AGE
    bridge-conf   2m

    To display more information about the NetworkAttachmentDefinition, use the kubectl describe command, for example:

    kubectl describe network-attachment-definitions bridge-conf 
  4. Create a YAML file named multus-pod.yaml to create a pod running Oracle Linux 9 that uses the bridge-conf network, with the following contents:
    apiVersion: v1
    kind: Pod
    metadata:
      name: samplepod
      annotations:
        k8s.v1.cni.cncf.io/networks: bridge-conf
    spec:
      containers:
      - name: samplepod
        command: ["/bin/sh", "-c", "trap : TERM INT; sleep infinity & wait"]
        image: container-registry.oracle.com/os/oraclelinux:9-slim
  5. Start the pod using the kubectl command:
    kubectl apply -f multus-pod.yaml
  6. You can see the pod is created and running using:
    kubectl get pods

    The output looks similar to:

    NAME                   READY   STATUS    RESTARTS   AGE
    samplepod              1/1     Running   0          1m
  7. Use the kubectl describe command to show the IP address assigned to the network interfaces of the multus-nginx-pod:
    kubectl describe pod samplepod 

    The output looks similar to:

    Name:             samplepod
    Namespace:        default
    ...
    Annotations:      k8s.v1.cni.cncf.io/network-status:
                        [{
                            "name": "cbr0",
                            "interface": "eth0",
                            "ips": [
                                "10.244.3.4"
                            ],
                            "mac": "86:e7:82:28:58:59",
                            "default": true,
                            "dns": {},
                            "gateway": [
                                "10.244.3.1"
                            ]
                        },{
                            "name": "default/bridge-conf",
                            "interface": "net1",
                            "ips": [
                                "192.168.12.10"
                            ],
                            "mac": "ca:bb:74:ca:9c:10",
                            "dns": {}
                        }]
                      k8s.v1.cni.cncf.io/networks: bridge-conf
    ...

    In this example, you can see the net1 network interface is using the bridge-conf network, and has the IP address of 192.168.12.10.

  8. You can delete the resources creating in this example using:
    kubectl delete pod samplepod
    kubectl delete network-attachment-definitions bridge-conf