apiVersion: k8s.ovn.org/v1
kind: UserDefinedNetwork
metadata:
name: udn-1 (1)
namespace: <some_custom_namespace>
spec:
topology: Layer2 (2)
layer2: (3)
role: Primary (4)
subnets:
- "10.0.0.0/24"
- "2001:db8::/60" (5)
有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围。 |
在实施用户定义网络 (UDN) 之前,OVN-Kubernetes CNI 插件仅支持所有 Pod 附加到的主网络或主要网络上的第 3 层拓扑。这允许所有集群中的 Pod 都是同一全局第 3 层网络的一部分的网络模型,但限制了自定义主网络配置的能力。
用户定义网络为集群管理员和用户提供了高度可定制的主网络和次要网络类型的网络配置选项。使用 UDN,管理员可以创建具有增强隔离、工作负载的 IP 地址管理和高级网络功能的定制网络拓扑。UDN 支持第 2 层和第 3 层拓扑类型,能够实现各种网络架构和拓扑,从而增强网络的灵活性和安全性,并提高性能。
|
与仅限命名空间范围的 NAD 不同,UDN 使管理员能够通过利用ClusterUserDefinedNetwork
自定义资源 (CR) 来创建和定义跨越多个命名空间的附加集群级网络。UDN 还使管理员和用户能够使用UserDefinedNetwork
CR 在命名空间级别定义附加网络。
以下部分进一步强调了用户定义网络的优势和限制、创建ClusterUserDefinedNetwork
或UserDefinedNetwork
自定义资源时的最佳实践、如何创建自定义资源以及可能与您的部署相关的其他配置详细信息。
用户定义网络提供以下优势:
增强的网络隔离以确保安全
租户隔离:命名空间可以拥有自己的隔离主网络,类似于在 Red Hat OpenStack Platform (RHOSP) 中隔离租户的方式。这通过降低跨租户流量的风险来提高安全性。
网络灵活性
第 2 层和第 3 层支持:集群管理员可以将主网络配置为第 2 层或第 3 层网络类型。这为主网络提供了次要网络的灵活性。
简化的网络管理
降低网络配置复杂性:使用用户定义网络,无需复杂的网络策略,因为可以通过将工作负载分组到不同的网络中来实现隔离。
高级功能
一致且可选择的 IP 地址分配:用户可以指定并在不同的命名空间和集群中重用 IP 子网,从而提供一致的网络环境。
支持多个网络:用户定义网络功能允许管理员将多个命名空间连接到单个网络,或为不同的命名空间集创建不同的网络。
简化从 Red Hat OpenStack Platform (RHOSP) 迁移应用程序
网络一致性:使用用户定义网络,通过提供类似的网络隔离和配置选项,可以简化从 OpenStack 到 OpenShift Container Platform 的应用程序迁移。
开发人员和管理员可以使用自定义资源创建命名空间范围的用户定义网络。该过程概述如下:创建命名空间,创建和配置自定义资源,在命名空间中创建 Pod。
虽然用户定义网络 (UDN) 提供高度可定制的网络配置选项,但在实施和管理这些网络时,集群管理员和开发人员应注意其限制。在实施用户定义网络之前,请考虑以下限制。
DNS 限制:
Pod 的 DNS 查询将解析为集群默认网络上的 Pod 的 IP 地址。即使 Pod 是用户定义网络的一部分,DNS 查询也不会解析为该用户定义网络上的 Pod 的 IP 地址。但是,服务和外部实体的 DNS 查询将按预期运行。
当 Pod 分配给主 UDN 时,它可以访问集群默认网络上的 Kubernetes API (KAPI) 和 DNS 服务。
初始网络分配:必须先创建命名空间和网络,然后再创建 Pod。将具有 Pod 的命名空间分配给新网络或在现有命名空间中创建 UDN 将不被 OVN-Kubernetes 接受。
健康检查限制:Kubelet 健康检查由集群默认网络执行,它不会确认 Pod 上主接口的网络连接。因此,在使用用户定义网络的情况下,可能出现 Pod 在默认网络中显示为健康状态,但在主接口上连接中断的情况。
网络策略限制:允许在连接到不同用户定义主网络的命名空间之间进行流量的网络策略无效。由于这些隔离网络之间没有连接,因此这些流量策略不会生效。
在设置UserDefinedNetwork
(UDN) 资源之前,用户应考虑以下信息:
不应使用openshift-*
命名空间来设置 UDN。
用户定义网络需要 2 个伪装 IP 地址。您必须重新配置您的伪装子网,使其足够大以容纳所需的网络数量。
|
确保租户使用UserDefinedNetwork
资源而不是NetworkAttachmentDefinition
(NAD) 资源。这可能会在租户之间造成安全风险。
在创建网络分段时,只有在无法使用 UDN 资源完成用户定义网络分段时,才应使用 NAD 资源。
UDN 的集群子网和服务 CIDR 不能与默认集群子网 CIDR 重叠。OVN-Kubernetes 网络插件使用100.64.0.0/16
作为默认网络的连接子网,您不能使用该值来配置 UDN 的joinSubnets
字段。如果默认地址值在集群的任何网络中使用,则必须通过设置joinSubnets
字段来覆盖它。更多信息,请参见“UserDefinedNetworks CR 的附加配置细节”。
以下步骤创建一个命名空间范围的用户定义网络。根据您的用例,使用my-layer-two-udn.yaml
示例(用于Layer2
拓扑类型)或my-layer-three-udn.yaml
示例(用于Layer3
拓扑类型)创建您的请求。
为Layer2
或Layer3
拓扑类型的用户定义网络创建一个请求。
创建一个 YAML 文件,例如my-layer-two-udn.yaml
,以定义您对Layer2
拓扑的请求,如下例所示。
apiVersion: k8s.ovn.org/v1
kind: UserDefinedNetwork
metadata:
name: udn-1 (1)
namespace: <some_custom_namespace>
spec:
topology: Layer2 (2)
layer2: (3)
role: Primary (4)
subnets:
- "10.0.0.0/24"
- "2001:db8::/60" (5)
1 | 您的UserDefinedNetwork 资源的名称。这不能是default ,也不能与集群网络操作员 (CNO) 创建的任何全局命名空间重复。 |
2 | topology 字段描述网络配置;可接受的值为Layer2 和Layer3 。指定Layer2 拓扑类型将创建一个由所有节点共享的逻辑交换机。 |
3 | 此字段指定拓扑配置。它可以是layer2 或layer3 。 |
4 | 指定Primary 或Secondary 。在 4.17 中,只支持Primary 角色规范。 |
5 | 对于Layer2 拓扑类型,以下内容指定subnet 字段的配置详细信息。
|
创建一个 YAML 文件,例如my-layer-three-udn.yaml
,以定义您对Layer3
拓扑的请求,如下例所示。
apiVersion: k8s.ovn.org/v1
kind: UserDefinedNetwork
metadata:
name: udn-2-primary (1)
namespace: <some_custom_namespace>
spec:
topology: Layer3 (2)
layer3: (3)
role: Primary (4)
subnets: (5)
- cidr: 10.150.0.0/16
hostSubnet: 24
- cidr: 2001:db8::/60
hostSubnet: 64
1 | 您的UserDefinedNetwork 资源的名称。这不能是default ,也不能与集群网络操作员 (CNO) 创建的任何全局命名空间重复。 |
2 | topology 字段描述网络配置;可接受的值为Layer2 和Layer3 。指定Layer3 拓扑类型将为每个节点创建一个第 2 层段,每个段都有一个不同的子网。第 3 层路由用于互连节点子网。 |
3 | 此字段指定拓扑配置。有效值为layer2 或layer3 。 |
4 | 指定Primary 或Secondary 角色。在 4.17 中,只支持Primary 角色规范。 |
5 | 对于Layer3 拓扑类型,以下内容指定subnet 字段的配置详细信息。
|
通过运行以下命令应用您的请求:
$ oc apply -f <my_layer_two_udn.yaml>
其中<my_layer_two_udn.yaml>
是您的Layer2
或Layer3
配置文件的名称。
通过运行以下命令验证您的请求是否成功:
$ oc get userdefinednetworks udn-1 -n <some_custom_namespace> -o yaml
其中some_custom_namespace
是您为用户定义网络创建的命名空间。
apiVersion: k8s.ovn.org/v1
kind: UserDefinedNetwork
metadata:
creationTimestamp: "2024-08-28T17:18:47Z"
finalizers:
- k8s.ovn.org/user-defined-network-protection
generation: 1
name: udn-1
namespace: some-custom-namespace
resourceVersion: "53313"
uid: f483626d-6846-48a1-b88e-6bbeb8bcde8c
spec:
layer2:
role: Primary
subnets:
- 10.0.0.0/24
- 2001:db8::/60
topology: Layer2
status:
conditions:
- lastTransitionTime: "2024-08-28T17:18:47Z"
message: NetworkAttachmentDefinition has been created
reason: NetworkAttachmentDefinitionReady
status: "True"
type: NetworkReady
下表解释了 UDN 的其他可选配置。不建议在没有明确需求和对 OVN-Kubernetes 网络拓扑的理解的情况下设置这些字段。
字段 | 类型 | 描述 |
---|---|---|
|
对象 |
省略时,平台将为
|
|
对象 |
|
|
整数 |
最大传输单元 (MTU)。默认值为 |