-
podSelector
和namespaceSelector
-
ipBlock
作为集群管理员,您可以使用NetworkAttachmentDefinition
(NAD) 资源为您的集群配置额外的次要网络。
对用户定义网络作为次要网络的支持将在未来版本的 OpenShift Container Platform 中添加。 |
Red Hat OpenShift Networking OVN-Kubernetes 网络插件允许为 Pod 配置次要网络接口。要配置次要网络接口,必须在NetworkAttachmentDefinition
自定义资源定义 (CRD) 中定义配置。
Pod 和多网络策略创建可能保持挂起状态,直到节点中的 OVN-Kubernetes 控制平面代理处理关联的 |
您可以以二层或本地网拓扑配置 OVN-Kubernetes 附加网络。
二层拓扑支持东西向集群流量,但不允许访问底层物理网络。
本地网拓扑允许连接到物理网络,但需要对集群节点上的底层 Open vSwitch (OVS) 桥接进行额外配置。
以下部分提供了 OVN-Kubernetes 目前允许用于次要网络的每种拓扑的示例配置。
网络名称必须唯一。例如,创建引用相同网络的不同配置的多个 |
您可以将 OVN-Kubernetes 附加网络与以下支持的平台一起使用
裸机
IBM Power®
IBM Z®
IBM® LinuxONE
VMware vSphere
Red Hat OpenStack 平台 (RHOSP)
下表描述了 OVN-Kubernetes CNI 网络插件的配置参数
字段 | 类型 | 描述 |
---|---|---|
|
|
CNI 规范版本。所需值为 |
|
|
网络名称。这些网络不是命名空间的。例如,您可以拥有一个名为 |
|
|
要配置的 CNI 插件的名称。此值必须设置为 |
|
|
网络的拓扑配置。必须是 |
|
|
在集群中使用的网络子网。 对于 省略时,实现网络的逻辑交换机仅提供二层通信,用户必须为 Pod 配置 IP 地址。端口安全仅防止 MAC 欺骗。 |
|
|
最大传输单元 (MTU)。默认值 |
|
|
包含此配置的网络附件定义 CRD 的元数据 |
|
|
CIDR 和 IP 地址的逗号分隔列表。IP 地址将从可分配的 IP 地址池中删除,并且永远不会传递给 Pod。 |
|
|
如果拓扑设置为 |
k8s.cni.cncf.io
API组中提供的MultiNetworkPolicy
自定义资源定义(CRD)提供的多网络策略API与OVN-Kubernetes辅助网络兼容。定义网络策略时,可使用的网络策略规则取决于OVN-Kubernetes辅助网络是否定义了subnets
字段。详细信息请参考下表:
指定subnets 字段 |
允许的多网络策略选择器 |
---|---|
是 |
|
否 |
|
例如,只有当名为blue2
的辅助网络的辅助网络CNI配置中定义了subnets
字段时,以下多网络策略才有效。
apiVersion: k8s.cni.cncf.io/v1beta1
kind: MultiNetworkPolicy
metadata:
name: allow-same-namespace
annotations:
k8s.v1.cni.cncf.io/policy-for: blue2
spec:
podSelector:
ingress:
- from:
- podSelector: {}
以下示例使用ipBlock
网络策略选择器,此选择器对于OVN-Kubernetes辅助网络始终有效。
apiVersion: k8s.cni.cncf.io/v1beta1
kind: MultiNetworkPolicy
metadata:
name: ingress-ipblock
annotations:
k8s.v1.cni.cncf.io/policy-for: default/flatl2net
spec:
podSelector:
matchLabels:
name: access-control
policyTypes:
- Ingress
ingress:
- from:
- ipBlock:
cidr: 10.200.0.0/30
交换式localnet
拓扑通过集群范围的逻辑交换机将作为网络附件定义(NAD)创建的工作负载互连到物理网络。
必须将辅助网络映射到OVN桥接器才能将其用作OVN-Kubernetes辅助网络。桥接映射允许网络流量到达物理网络。桥接映射将物理网络名称(也称为接口标签)关联到使用Open vSwitch (OVS)创建的桥接器。
您可以创建一个NodeNetworkConfigurationPolicy
对象(nmstate.io/v1
API组的一部分)来声明性地创建映射。此API由NMState Operator提供。通过使用此API,您可以将桥接映射应用于与您指定的nodeSelector
表达式(例如node-role.kubernetes.io/worker: ''
)匹配的节点。
附加辅助网络时,您可以使用现有的br-ex
桥接器或创建一个新的桥接器。使用哪种方法取决于您的特定网络基础设施。
如果您的节点只包含单个网络接口,则必须使用现有的桥接器。此网络接口由OVN-Kubernetes拥有和管理,您不得将其从br-ex
桥接器中移除或更改接口配置。如果您移除或更改网络接口,您的集群网络将无法正常工作。
如果您的节点包含多个网络接口,您可以将不同的网络接口附加到新的桥接器,并将其用于您的辅助网络。这种方法可以实现与主集群网络的流量隔离。
在以下示例中,localnet1
网络映射到br-ex
桥接器。
apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
name: mapping (1)
spec:
nodeSelector:
node-role.kubernetes.io/worker: '' (2)
desiredState:
ovn:
bridge-mappings:
- localnet: localnet1 (3)
bridge: br-ex (4)
state: present (5)
1 | 配置对象的名称。 |
2 | 指定要应用节点网络配置策略的节点的节点选择器。 |
3 | 将流量转发到OVS桥接器的辅助网络的名称。此辅助网络必须与定义OVN-Kubernetes辅助网络的NetworkAttachmentDefinition CRD的spec.config.name 字段的名称匹配。 |
4 | 节点上OVS桥接器的名称。只有在指定state: present 时才需要此值。 |
5 | 映射的状态。必须是present (添加桥接器)或absent (移除桥接器)。默认值为present 。 |
在以下示例中,localnet2
网络接口附加到ovs-br1
桥接器。通过此附加,网络接口可作为辅助网络供OVN-Kubernetes网络插件使用。
apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
name: ovs-br1-multiple-networks (1)
spec:
nodeSelector:
node-role.kubernetes.io/worker: '' (2)
desiredState:
interfaces:
- name: ovs-br1 (3)
description: |-
A dedicated OVS bridge with eth1 as a port
allowing all VLANs and untagged traffic
type: ovs-bridge
state: up
bridge:
allow-extra-patch-ports: true
options:
stp: false
port:
- name: eth1 (4)
ovn:
bridge-mappings:
- localnet: localnet2 (5)
bridge: ovs-br1 (6)
state: present (7)
1 | 配置对象的名称。 |
2 | 指定要应用节点网络配置策略的节点的节点选择器。 |
3 | 一个新的OVS桥接器,与OVN-Kubernetes用于所有集群流量的默认桥接器分开。 |
4 | 要与此新的OVS桥接器关联的主机系统上的网络设备。 |
5 | 将流量转发到OVS桥接器的辅助网络的名称。此辅助网络必须与定义OVN-Kubernetes辅助网络的NetworkAttachmentDefinition CRD的spec.config.name 字段的名称匹配。 |
6 | 节点上OVS桥接器的名称。只有在指定state: present 时才需要此值。 |
7 | 映射的状态。必须是present (添加桥接器)或absent (移除桥接器)。默认值为present 。 |
建议使用这种声明式方法,因为NMState Operator会自动且透明地将辅助网络配置应用于节点选择器指定的全部节点。
以下JSON示例配置了本地网辅助网络
{
"cniVersion": "0.3.1",
"name": "ns1-localnet-network",
"type": "ovn-k8s-cni-overlay",
"topology":"localnet",
"subnets": "202.10.130.112/28",
"vlanID": 33,
"mtu": 1500,
"netAttachDefName": "ns1/localnet-network"
"excludeSubnets": "10.100.200.0/29"
}
交换式(第2层)拓扑网络通过集群范围的逻辑交换机互连工作负载。此配置可用于IPv6和双栈部署。
2层交换拓扑网络仅允许在集群内的Pod之间传输数据包。 |
以下JSON示例配置了交换式辅助网络
{
"cniVersion": "0.3.1",
"name": "l2-network",
"type": "ovn-k8s-cni-overlay",
"topology":"layer2",
"subnets": "10.100.200.0/24",
"mtu": 1300,
"netAttachDefName": "ns1/l2-network",
"excludeSubnets": "10.100.200.0/29"
}
必须通过k8s.v1.cni.cncf.io/networks
注释指定辅助网络附件。
以下示例为Pod配置了两个辅助附件,每个附件都对应本指南中介绍的一个附件配置。
apiVersion: v1
kind: Pod
metadata:
annotations:
k8s.v1.cni.cncf.io/networks: l2-network
name: tinypod
namespace: ns1
spec:
containers:
- args:
- pause
image: k8s.gcr.io/e2e-test-images/agnhost:2.36
imagePullPolicy: IfNotPresent
name: agnhost-container
以下示例配置了具有静态IP地址的Pod。
|
apiVersion: v1
kind: Pod
metadata:
annotations:
k8s.v1.cni.cncf.io/networks: '[
{
"name": "l2-network", (1)
"mac": "02:03:04:05:06:07", (2)
"interface": "myiface1", (3)
"ips": [
"192.0.2.20/24"
] (4)
}
]'
name: tinypod
namespace: ns1
spec:
containers:
- args:
- pause
image: k8s.gcr.io/e2e-test-images/agnhost:2.36
imagePullPolicy: IfNotPresent
name: agnhost-container
1 | 网络名称。此值在所有NetworkAttachmentDefinition CRD中必须唯一。 |
2 | 要为接口分配的MAC地址。 |
3 | 要为Pod创建的网络接口的名称。 |
4 | 要分配给网络接口的IP地址。 |