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:
-
On a control plane node, create a YAML file named
nad-bridge.yamlthat 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" } }' -
Use the
kubectl applycommand to create the NetworkAttachmentDefinition with the file:kubectl apply -f nad-bridge.yamlThe NetworkAttachmentDefinition is created.
-
You can verify the NetworkAttachmentDefinition is created using:
kubectl get network-attachment-definitionsThe output looks similar to:
NAME AGE bridge-conf 2mTo display more information about the NetworkAttachmentDefinition, use the
kubectl describecommand, for example:kubectl describe network-attachment-definitions bridge-conf - Create a YAML file named
multus-pod.yamlto create a pod running Oracle Linux 9 that uses thebridge-confnetwork, 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 -
Start the pod using the
kubectlcommand:kubectl apply -f multus-pod.yaml - You can see the pod is created and running
using:
kubectl get podsThe output looks similar to:
NAME READY STATUS RESTARTS AGE samplepod 1/1 Running 0 1m - Use the
kubectl describecommand to show the IP address assigned to the network interfaces of themultus-nginx-pod:kubectl describe pod samplepodThe 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
net1network interface is using thebridge-confnetwork, and has the IP address of192.168.12.10. - You can delete the resources creating in this example
using:
kubectl delete pod samplepod kubectl delete network-attachment-definitions bridge-conf