mirror of
https://github.com/openshift/openshift-docs.git
synced 2026-02-05 12:46:18 +01:00
203 lines
6.3 KiB
Plaintext
203 lines
6.3 KiB
Plaintext
// Module included in the following assemblies:
|
|
//
|
|
// * networking/multiple_networks/attaching-pod.adoc
|
|
|
|
:_mod-docs-content-type: PROCEDURE
|
|
[id="nw-multus-advanced-annotations_{context}"]
|
|
= Specifying pod-specific addressing and routing options
|
|
|
|
[role="_abstract"]
|
|
To set static IP addresses, MAC addresses, and default routes for a pod in {product-title}, you can configure pod-specific addressing and routing options using JSON-formatted annotations. With these annotations, you can customize network behavior for individual pods on secondary networks.
|
|
|
|
.Prerequisites
|
|
|
|
* The pod must be in the same namespace as the secondary network.
|
|
* Install the OpenShift CLI (`oc`).
|
|
* You must log in to the cluster.
|
|
ifdef::sriov[]
|
|
* You must have the SR-IOV Operator installed and a `SriovNetwork` object defined.
|
|
endif::sriov[]
|
|
|
|
.Procedure
|
|
|
|
. Edit the `Pod` resource definition. If you are editing an existing `Pod` resource, run the
|
|
following command to edit its definition in the default editor. Replace `<name>`
|
|
with the name of the `Pod` resource to edit.
|
|
+
|
|
[source,terminal]
|
|
----
|
|
$ oc edit pod <name>
|
|
----
|
|
|
|
. In the `Pod` resource definition, add the `k8s.v1.cni.cncf.io/networks` parameter to the pod `metadata` mapping. The `k8s.v1.cni.cncf.io/networks` accepts a JSON string of a list of objects that reference the name of `NetworkAttachmentDefinition` custom resource (CR) names in addition to specifying additional properties.
|
|
+
|
|
[source,yaml]
|
|
----
|
|
metadata:
|
|
annotations:
|
|
k8s.v1.cni.cncf.io/networks: '[<network>[,<network>,...]]'
|
|
# ...
|
|
----
|
|
+
|
|
--
|
|
where:
|
|
|
|
`<network>`:: Replace with a JSON object as shown in the following examples. The single quotes are required.
|
|
--
|
|
+
|
|
In the following example the annotation specifies which network attachment will have the default route, using the `default-route` parameter.
|
|
+
|
|
[source,yaml]
|
|
----
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: example-pod
|
|
annotations:
|
|
k8s.v1.cni.cncf.io/networks: '[
|
|
{
|
|
"name": "net1"
|
|
},
|
|
{
|
|
"name": "net2",
|
|
"default-route": ["192.0.2.1"]
|
|
}]'
|
|
spec:
|
|
containers:
|
|
- name: example-pod
|
|
command: ["/bin/bash", "-c", "sleep 2000000000000"]
|
|
image: centos/tools
|
|
----
|
|
+
|
|
--
|
|
where:
|
|
|
|
`name`:: Specifies the name of the secondary network to associate
|
|
with the pod.
|
|
`default-route`:: Specifies a value of a gateway for traffic to be routed over if no other routing entry is present in the routing table. If more than one `default-route` key is specified, this will cause the pod to fail to become active.
|
|
--
|
|
+
|
|
The default route will cause any traffic that is not specified in other routes to be routed to the gateway.
|
|
+
|
|
[IMPORTANT]
|
|
====
|
|
Setting the default route to an interface other than the default network interface for {product-title}
|
|
may cause traffic that is anticipated for pod-to-pod traffic to be routed over another interface.
|
|
====
|
|
+
|
|
To verify the routing properties of a pod, the `oc` command may be used to execute the `ip` command within a pod.
|
|
+
|
|
[source,terminal]
|
|
----
|
|
$ oc exec -it <pod_name> -- ip route
|
|
----
|
|
+
|
|
[NOTE]
|
|
====
|
|
You may also reference the pod's `k8s.v1.cni.cncf.io/network-status` to see which secondary network has been
|
|
assigned the default route, by the presence of the `default-route` key in the JSON-formatted list of objects.
|
|
====
|
|
+
|
|
To set a static IP address or MAC address for a pod you can use the JSON formatted annotations. This requires you create networks that specifically allow for this functionality. This can be specified in a rawCNIConfig for the CNO.
|
|
|
|
. Edit the CNO CR by running the following command:
|
|
+
|
|
[source,terminal]
|
|
----
|
|
$ oc edit networks.operator.openshift.io cluster
|
|
----
|
|
+
|
|
The following YAML describes the configuration parameters for the CNO:
|
|
+
|
|
.Cluster Network Operator YAML configuration
|
|
[source,terminal,subs="attributes+"]
|
|
----
|
|
name: <name>
|
|
namespace: <namespace>
|
|
rawCNIConfig: '{
|
|
...
|
|
}'
|
|
type: Raw
|
|
----
|
|
+
|
|
--
|
|
where:
|
|
|
|
`name`:: Specifies a name for the secondary network attachment that you are creating. The name must be unique within the specified `namespace`.
|
|
`namespace`:: Specifies the namespace to create the network attachment in. If you do not specify a value, then the `default` namespace is used.
|
|
`rawCNIConfig`:: Specifies the CNI plugin configuration in JSON format, which is based on the following template.
|
|
--
|
|
+
|
|
The following object describes the configuration parameters for utilizing static MAC address and IP address using the macvlan CNI plugin:
|
|
+
|
|
.macvlan CNI plugin JSON configuration object using static IP and MAC address
|
|
[source,json]
|
|
----
|
|
{
|
|
"cniVersion": "0.3.1",
|
|
"name": "<name>",
|
|
"plugins": [{
|
|
"type": "macvlan",
|
|
"capabilities": { "ips": true },
|
|
"master": "eth0",
|
|
"mode": "bridge",
|
|
"ipam": {
|
|
"type": "static"
|
|
}
|
|
}, {
|
|
"capabilities": { "mac": true },
|
|
"type": "tuning"
|
|
}]
|
|
}
|
|
----
|
|
+
|
|
--
|
|
where:
|
|
|
|
`name`:: Specifies the name for the secondary network attachment to create. The name must be unique within the specified `namespace`.
|
|
`plugins`:: Specifies an array of CNI plugin configurations. The first object specifies a macvlan plugin configuration and the second object specifies a tuning plugin configuration.
|
|
`ips`:: Specifies that a request is made to enable the static IP address functionality of the CNI plugin runtime configuration capabilities.
|
|
`master`:: Specifies the interface that the macvlan plugin uses.
|
|
`mac`:: Specifies that a request is made to enable the static MAC address functionality of a CNI plugin.
|
|
--
|
|
+
|
|
The above network attachment can be referenced in a JSON formatted annotation, along with keys to specify which static IP and MAC address will be assigned to a given pod.
|
|
|
|
|
|
. Edit the pod by entering the following command:
|
|
+
|
|
[source,terminal]
|
|
----
|
|
$ oc edit pod <name>
|
|
----
|
|
+
|
|
.macvlan CNI plugin JSON configuration object using static IP and MAC address
|
|
[source,yaml]
|
|
----
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: example-pod
|
|
annotations:
|
|
k8s.v1.cni.cncf.io/networks: '[
|
|
{
|
|
"name": "<name>",
|
|
"ips": [ "192.0.2.205/24" ],
|
|
"mac": "CA:FE:C0:FF:EE:00"
|
|
}
|
|
]'
|
|
----
|
|
+
|
|
--
|
|
where:
|
|
|
|
`name`:: Specifies the name for the secondary network attachment to create. The name must be unique within the specified `namespace`.
|
|
`ips`:: Specifies an IP address including the subnet mask.
|
|
`mac`:: Specifies the MAC address.
|
|
--
|
|
+
|
|
[NOTE]
|
|
====
|
|
Static IP addresses and MAC addresses do not have to be used at the same time. You can use them individually, or together.
|
|
====
|