3.3. 将 pod 附加到二级网络
作为集群用户,您可以将 pod 附加到二级网络。
3.3.1. 将 pod 添加到二级网络 复制链接链接已复制到粘贴板!
您可以将 pod 添加到二级网络。pod 继续通过默认网络发送与集群相关的普通网络流量。
创建 pod 时,二级网络会附加到 pod。但是,如果 pod 已存在,则无法将二级网络附加到其中。
pod 必须与二级网络位于同一个命名空间中。
先决条件
-
安装 OpenShift CLI(
oc
)。 - 登录到集群。
流程
为
Pod
对象添加注解。只能使用以下注解格式之一:要在不自定义的情况下附加二级网络,请使用以下格式添加注解。将
<network>
替换为要与 pod 关联的二级网络的名称:metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]
metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 要指定多个二级网络,请使用逗号分隔每个网络。逗号之间不可包括空格。如果您多次指定相同的二级网络,则该 pod 会将多个网络接口附加到该网络。
要通过自定义来附加二级网络,请添加具有以下格式的注解:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来创建 pod。将
<name>
替换为 pod 的名称。oc create -f <name>.yaml
$ oc create -f <name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要确认
Pod
CR 中是否存在注解,请输入以下命令将<name>
替换为 pod 的名称。oc get pod <name> -o yaml
$ oc get pod <name> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下示例中,
example-pod
pod 附加到net1
二级网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
k8s.v1.cni.cncf.io/network-status
参数是对象的 JSON 数组。每个对象描述附加到 pod 的二级网络的状态。注解值保存为纯文本值。
3.3.1.1. 指定特定于 pod 的地址和路由选项 复制链接链接已复制到粘贴板!
将 pod 附加到二级网络时,您可能需要在特定 pod 中指定有关该网络的其他属性。这可让您更改路由的某些方面,并指定静态 IP 地址和 MAC 地址。要达到此目的,您可以使用 JSON 格式的注解。
先决条件
- pod 必须与二级网络位于同一个命名空间中。
-
安装 OpenShift CLI (
oc
) 。 - 您必须登录集群。
流程
要在指定地址和/或路由选项的同时将 pod 添加到二级网络,请完成以下步骤:
编辑
Pod
资源定义。如果要编辑现有Pod
资源,请运行以下命令在默认编辑器中编辑其定义。将<name>
替换为要编辑的Pod
资源的名称。oc edit pod <name>
$ oc edit pod <name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
Pod
资源定义中,将k8s.v1.cni.cncf.io/networks
参数添加到 podmetadata
映射中。k8s.v1.cni.cncf.io/networks
接受 JSON 字符串,该字符串除指定附加属性外,还引用NetworkAttachmentDefinition
自定义资源(CR)名称的对象。metadata: annotations: k8s.v1.cni.cncf.io/networks: '[<network>[,<network>,...]]' # ...
metadata: annotations: k8s.v1.cni.cncf.io/networks: '[<network>[,<network>,...]]' # ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<network>
- 如以下示例所示,将 替换为 JSON 对象。单引号是必需的。
在以下示例中,通过
default-route
参数,注解指定了哪个网络附加将使用默认路由。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
name
-
name
是与 pod 关联的二级网络的名称。 default-route
-
default-route
指定了一个网关,当在路由表中没有其它路由条目时使用这个网关。如果指定了多个default-route
键,这将导致 pod 无法成为活跃状态。
默认路由将导致任何没有在其它路由中指定的流量被路由到网关。
重要将 OpenShift Container Platform 的默认路由设置为默认网络接口以外的接口时,可能会导致应该是 pod 和 pod 间的网络流量被路由到其他接口。
要验证 pod 的路由属性,可使用
oc
命令在 pod 中执行ip
命令。oc exec -it <pod_name> -- ip route
$ oc exec -it <pod_name> -- ip route
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您还可以通过 JSON 格式的对象列表中的
default-route
键来引用 pod 的k8s.v1.cni.cncf.io/network-status
来查看哪个二级网络已被分配默认路由。要为 pod 设置静态 IP 地址或 MAC 地址,您可以使用 JSON 格式的注解。这要求您创建允许此功能的网络。这可以在 CNO 的 rawCNIConfig 中指定。
运行以下命令来编辑 CNO CR:
oc edit networks.operator.openshift.io cluster
$ oc edit networks.operator.openshift.io cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下 YAML 描述了 CNO 的配置参数:
Cluster Network Operator YAML 配置
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
name
-
为您要创建的二级网络附加指定名称。该名称在指定的
namespace
中需要是唯一的。 namespace
-
指定要在其中创建网络附加的命名空间。如果您未指定值,则使用
default
命名空间。 rawCNIConfig
- 基于以下模板,以 JSON 格式指定 CNI 插件配置。
以下对象描述了使用 macvlan CNI 插件的静态 MAC 地址和 IP 地址的配置参数:
使用静态 IP 和 MAC 地址的 macvlan CNI 插件 JSON 配置对象
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
name
-
指定要创建的二级网络附加的名称。该名称在指定的
namespace
中需要是唯一的。 plugins
- 指定 CNI 插件配置的数组。第一个对象指定 macvlan 插件配置,第二个对象指定 tuning 插件配置。
ips
- 指定一个请求启用 CNI 插件运行时配置功能的静态 IP 地址功能。
master
- 指定 macvlan 插件使用的接口。
mac
- 指定一个请求启用 CNI 插件的静态 MAC 地址功能。
以上网络附加可能会以 JSON 格式的注解引用,同时使用相关的键来指定将哪些静态 IP 和 MAC 地址分配给指定 pod。
使用以下内容编辑 pod:
oc edit pod <name>
$ oc edit pod <name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用静态 IP 和 MAC 地址的 macvlan CNI 插件 JSON 配置对象
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意静态 IP 地址和 MAC 地址不需要同时使用,您可以单独使用,也可以一起使用。
要验证一个带有二级网络的 pod 的 IP 地址和 MAC 属性,请使用
oc
命令在 pod 中执行 ip 命令。oc exec -it <pod_name> -- ip a
$ oc exec -it <pod_name> -- ip a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow