3.7. 在二级网络中配置 IP 地址分配


以下小节提供了如何为二级网络配置 IP 地址分配的说明和信息。

3.7.1. 配置网络附加的 IP 地址分配

对于二级网络,可以使用 IP 地址管理(IPAM) CNI 插件来分配 IP 地址,该插件支持各种分配方法,包括动态主机配置协议(DHCP)和静态分配。

负责动态分配 IP 地址的 DHCP IPAM CNI 插件与两个不同的组件一起运行:

  • CNI 插件 :负责与 Kubernetes 网络堆栈集成,以请求和释放 IP 地址。
  • DHCP IPAM CNI 守护进程 :用于 DHCP 事件的监听程序,该事件与环境中的现有 DHCP 服务器协调,以处理 IP 地址分配请求。这个守护进程并不是 DHCP 服务器本身。

对于在 IPAM 配置中需要 type: dhcp 的网络,请确保以下内容:

  • DHCP 服务器可用并在环境中运行。DHCP 服务器是集群外部的,应该成为客户的现有网络基础架构的一部分。
  • DHCP 服务器被正确配置为为节点提供 IP 地址。

如果环境中 DHCP 服务器不可用,建议使用 Whereabouts IPAM CNI 插件。Whereabouts CNI 提供类似的 IP 地址管理功能,而无需外部 DHCP 服务器。

注意

当没有外部 DHCP 服务器或首选静态 IP 地址管理时,请使用 Whereabouts CNI 插件。Whereabouts 插件包含一个协调器守护进程来管理过时的 IP 地址分配。

在整个容器生命周期中,必须定期更新 DHCP 租期,因此需要单独的守护进程 DHCP IPAM CNI 守护进程。要部署 DHCP IPAM CNI 守护进程,请修改 Cluster Network Operator (CNO)配置,以触发此守护进程的部署,作为二级网络设置的一部分。

3.7.1.1. 静态 IP 地址分配配置

下表描述了静态 IP 地址分配的配置:

Expand
表 3.11. ipam 静态配置对象
字段类型描述

type

string

IPAM 地址类型。值必须是 static

addresses

数组

指定分配给虚拟接口的 IP 地址的对象数组。支持 IPv4 和 IPv6 IP 地址。

Routes

数组

指定要在 pod 中配置的路由的一组对象。

dns

数组

可选:指定 DNS 配置的对象数组。

address 数组需要带有以下字段的对象:

Expand
表 3.12. ipam.addresses[] array
字段类型描述

address

string

您指定的 IP 地址和网络前缀。例如:如果您指定 10.10.21.10/24,那么会为二级网络分配 IP 地址 10.10.21.10,网掩码为 255.255.255.0

gateway

string

出口网络流量要路由到的默认网关。

Expand
表 3.13. ipam.routes[] array
字段类型描述

dst

string

CIDR 格式的 IP 地址范围,如 192.168.17.0/24 或默认路由 0.0.0.0/0

gw

string

网络流量路由的网关。

Expand
表 3.14. ipam.dns object
字段类型描述

nameservers

数组

用于发送 DNS 查询的一个或多个 IP 地址的数组。

domain

数组

要附加到主机名的默认域。例如,如果将域设置为 example.com,对 example-host 的 DNS 查找查询将被改写为 example-host.example.com

search

数组

在 DNS 查找查询过程中,附加到非限定主机名(如 example-host)的域名的数组。

静态 IP 地址分配配置示例

{
  "ipam": {
    "type": "static",
      "addresses": [
        {
          "address": "191.168.1.7/24"
        }
      ]
  }
}
Copy to Clipboard Toggle word wrap

3.7.1.2. 动态 IP 地址(DHCP)分配配置

pod 在创建时获取其原始 DHCP 租期。该租期必须由集群中运行的一个小型的 DHCP 服务器部署定期续订。

重要

对于以太网网络附加,SR-IOV Network Operator 不会创建 DHCP 服务器部署。Cluster Network Operator 负责创建最小 DHCP 服务器部署。

要触发 DHCP 服务器的部署,您必须编辑 Cluster Network Operator 配置来创建 shim 网络附加,如下例所示:

shim 网络附加定义示例

apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  additionalNetworks:
  - name: dhcp-shim
    namespace: default
    type: Raw
    rawCNIConfig: |-
      {
        "name": "dhcp-shim",
        "cniVersion": "0.3.1",
        "type": "bridge",
        "ipam": {
          "type": "dhcp"
        }
      }
  # ...
Copy to Clipboard Toggle word wrap

下表描述了使用 DHCP 进行动态 IP 地址地址分配的配置参数。

Expand
表 3.15. ipam DHCP 配置对象
字段类型描述

type

string

IPAM 地址类型。需要值 dhcp

以下 JSON 示例描述了使用 DHCP 进行动态 IP 地址地址分配的配置 p。

动态 IP 地址(DHCP)分配配置示例

{
  "ipam": {
    "type": "dhcp"
  }
}
Copy to Clipboard Toggle word wrap

Whereabouts CNI 插件允许在不使用 DHCP 服务器的情况下动态地将 IP 地址分配给二级网络。

Whereabouts CNI 插件还支持在单独的 NetworkAttachmentDefinition CRD 中多次出现同一 CIDR 范围的重叠 IP 地址范围和配置。这在多租户环境中提供了更大的灵活性和管理功能。

3.7.1.3.1. 动态 IP 地址配置参数

下表描述了使用 Whereabouts 进行动态 IP 地址分配的配置对象:

Expand
表 3.16. ipam whereabouts 配置参数
字段类型描述

type

string

IPAM 地址类型。需要 abouts 的值。

range

string

CIDR 表示法中的 IP 地址和范围。IP 地址是通过这个地址范围来分配的。

exclude

数组

可选: CIDR 标记中零个或更多 IP 地址和范围的列表。包含在排除地址范围中的 IP 地址。

network_name

string

可选:帮助确保每个 pod 的组或域都有自己的一组 IP 地址,即使它们共享相同的 IP 地址范围。设置此字段对于保持网络独立和组织非常重要,特别是在多租户环境中。

以下示例显示了使用 Whereabouts 的 NAD 文件中的动态地址分配配置:

Whereabouts 动态 IP 地址分配排除特定的 IP 地址范围

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/27",
    "exclude": [
       "192.0.2.192/30",
       "192.0.2.196/32"
    ]
  }
}
Copy to Clipboard Toggle word wrap

以下示例显示了一个动态 IP 地址分配,它将重叠的 IP 地址范围用于多租户网络。

NetworkAttachmentDefinition 1

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/29",
    "network_name": "example_net_common", 
1

  }
}
Copy to Clipboard Toggle word wrap

1
可选。如果设置,必须与 NetworkAttachmentDefinition 2network_name 匹配。

NetworkAttachmentDefinition 2

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/24",
    "network_name": "example_net_common", 
1

  }
}
Copy to Clipboard Toggle word wrap

1
可选。如果设置,必须与 NetworkAttachmentDefinition 1network_name 匹配。

3.7.1.4. 创建abouts-reconciler 守护进程集的位置

Whereabouts 协调器负责管理集群中 pod 的动态 IP 地址分配,使用 Whereabouts IP 地址管理 (IPAM) 解决方案。它确保每个 pod 从指定的 IP 地址范围中获取唯一的 IP 地址。它还会在 pod 删除或缩减时处理 IP 地址发行版本。

注意

您还可以使用 NetworkAttachmentDefinition 自定义资源定义(CRD)进行动态 IP 地址分配。

当您通过 Cluster Network Operator 配置二级网络时,会自动创建 whereabouts-reconciler 守护进程。从 YAML 清单配置二级网络时,它不会自动创建。

要触发 whereabouts-reconciler 守护进程集的部署,您必须通过编辑 Cluster Network Operator 自定义资源文件来手动创建一个 whereabouts-shim 网络附加。

使用以下步骤部署 whereabouts-reconciler 守护进程集。

流程

  1. 运行以下命令来编辑 Network.operator.openshift.io 自定义资源(CR):

    $ oc edit network.operator.openshift.io cluster
    Copy to Clipboard Toggle word wrap
  2. 在自定义资源 (CR) 的 spec 定义中包含此示例 YAML extract 中显示的 additionalNetworks 部分:

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    # ...
    spec:
      additionalNetworks:
      - name: whereabouts-shim
        namespace: default
        rawCNIConfig: |-
          {
           "name": "whereabouts-shim",
           "cniVersion": "0.3.1",
           "type": "bridge",
           "ipam": {
             "type": "whereabouts"
           }
          }
        type: Raw
    # ...
    Copy to Clipboard Toggle word wrap
  3. 保存文件并退出文本编辑器。
  4. 运行以下命令,验证 whereabouts-reconciler 守护进程集是否已成功部署:

    $ oc get all -n openshift-multus | grep whereabouts-reconciler
    Copy to Clipboard Toggle word wrap

    输出示例

    pod/whereabouts-reconciler-jnp6g 1/1 Running 0 6s
    pod/whereabouts-reconciler-k76gg 1/1 Running 0 6s
    daemonset.apps/whereabouts-reconciler 6 6 6 6 6 kubernetes.io/os=linux 6s
    Copy to Clipboard Toggle word wrap

3.7.1.5. 配置 Whereabouts IP 协调器调度

Whereabouts IPAM CNI 插件每天运行 IP 协调器。此过程会清理任何已搁置的 IP 分配,搁置的 IP 分配可能会耗尽 IP 资源,并使新的 pod 无法获取分配给它们的 IP。

使用这个流程更改 IP 协调器运行的频率。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 您已部署了whereabouts-reconciler 守护进程集,whereabouts-reconciler pod 已启动并正在运行。

流程

  1. 运行以下命令,使用 IP 协调器的特定 cron 表达式在 openshift-multus 命名空间中创建一个名为 whereabouts-configConfigMap 对象:

    $ oc create configmap whereabouts-config -n openshift-multus --from-literal=reconciler_cron_expression="*/15 * * * *"
    Copy to Clipboard Toggle word wrap

    此 cron 表达式表示 IP 协调器每 15 分钟运行一次。根据您的特定要求调整表达式。

    注意

    whereabouts-reconciler 守护进程集只能使用包含五个星号的 cron 表达式模式。目前才不支持带有用于表示秒的第 6 个星号。

  2. 运行以下命令,获取与 openshift-multus 命名空间中的 whereabouts-reconciler 守护进程集和 pod 相关的资源信息。

    $ oc get all -n openshift-multus | grep whereabouts-reconciler
    Copy to Clipboard Toggle word wrap

    输出示例

    pod/whereabouts-reconciler-2p7hw                   1/1     Running   0             4m14s
    pod/whereabouts-reconciler-76jk7                   1/1     Running   0             4m14s
    daemonset.apps/whereabouts-reconciler          6         6         6       6            6           kubernetes.io/os=linux   4m16s
    Copy to Clipboard Toggle word wrap

  3. 运行以下命令,以验证 whereabouts-reconciler pod 是否运行带有配置的时间间隔的 IP 协调器:

    $ oc -n openshift-multus logs whereabouts-reconciler-2p7hw
    Copy to Clipboard Toggle word wrap

    输出示例

    2024-02-02T16:33:54Z [debug] event not relevant: "/cron-schedule/..2024_02_02_16_33_54.1375928161": CREATE
    2024-02-02T16:33:54Z [debug] event not relevant: "/cron-schedule/..2024_02_02_16_33_54.1375928161": CHMOD
    2024-02-02T16:33:54Z [debug] event not relevant: "/cron-schedule/..data_tmp": RENAME
    2024-02-02T16:33:54Z [verbose] using expression: */15 * * * *
    2024-02-02T16:33:54Z [verbose] configuration updated to file "/cron-schedule/..data". New cron expression: */15 * * * *
    2024-02-02T16:33:54Z [verbose] successfully updated CRON configuration id "00c2d1c9-631d-403f-bb86-73ad104a6817" - new cron expression: */15 * * * *
    2024-02-02T16:33:54Z [debug] event not relevant: "/cron-schedule/config": CREATE
    2024-02-02T16:33:54Z [debug] event not relevant: "/cron-schedule/..2024_02_02_16_26_17.3874177937": REMOVE
    2024-02-02T16:45:00Z [verbose] starting reconciler run
    2024-02-02T16:45:00Z [debug] NewReconcileLooper - inferred connection data
    2024-02-02T16:45:00Z [debug] listing IP pools
    2024-02-02T16:45:00Z [debug] no IP addresses to cleanup
    2024-02-02T16:45:00Z [verbose] reconciler success
    Copy to Clipboard Toggle word wrap

3.7.1.6. Whereabouts IPAM CNI 插件的快速 IPAM 配置

Wherabouts 是一个 IP 地址管理 (IPAM) Container Network Interface (CNI) 插件,可在集群范围的级别上分配 IP 地址。Whereabouts 不需要 DHCP 服务器。

典型的 Wherabouts 工作流如下所述:

  1. Whereabouts 采用无类别域间路由(CIDR)表示法中的地址范围,如 192.168.2.0/24,并在该范围内分配 IP 地址,如 192.168.2.1192.168.2.254
  2. Whereabouts 将 CIDR 范围内的最低值地址分配给 pod,并在该 pod 生命周期的数据存储中跟踪 IP 地址。
  3. 当 pod 被删除时,Whereabouts 会从 pod 释放地址,以便该地址可用于分配。

要提高 Whereabouts 的性能,特别是当集群中的节点运行大量 pod 时,您可以启用 Fast IPAM 功能。

重要

Fast IPAM 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

Fast IPAM 功能使用 nodeslicepools (由 Whereabouts Controller 管理)来优化节点的 IP 分配。

先决条件

  • 您可以将about s-shim 配置添加到 Network.operator.openshift.io 自定义资源(CR),以便 Cluster Network Operator (CNO)可以部署 Whereabouts Controller。请参阅"创建 Whereabouts 协调器守护进程集"。
  • 要使 Fast IPAM 功能正常工作,请确保同一 openshift-multus namesapace 中存在 NetworkAttachmentDefinition (NAD) 和 pod。

流程

  1. 输入以下命令确认 Whereabouts Controller 正在运行。

    $ oc get pods -n openshift-multus | grep controller
    Copy to Clipboard Toggle word wrap

    输出示例

    multus-admission-controller-d89bc96f-gbf7s   2/2     Running   0              6h3m
    ...
    Copy to Clipboard Toggle word wrap

    重要

    如果 Whereabouts 控制器没有运行,则 Fast IPAM 无法正常工作。

  2. 为集群创建一个 NAD 文件,并将 Fast IPAM 详情添加到文件中:

    带有 Fast IPAM 配置的 NAD 文件示例

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: wb-ipam
      namespace: openshift-multus 
    1
    
    spec:
      config: {
    	"cniVersion": "0.3.0",
    	"name": "wb-ipam-cni-name", 
    2
    
    	"type": "bridge",
    	"bridge": "cni0",
    	"ipam": {
      	"type": "whereabouts", 
    3
    
      	"range": "10.5.0.0/20", 
    4
    
      	"node_slice_size": "/24" 
    5
    
        }
      }
    # ...
    Copy to Clipboard Toggle word wrap

    1
    CNO 部署 NAD 的命名空间。
    2
    Whereabouts IPAM CNI 插件的名称。
    3
    IPAM CNI 插件的类型:whereabouts
    4
    Whereabouts IPAM CNI 插件用于将 IP 地址分配给 pod 的 IP 池的 IP 地址范围。
    5
    设置每个节点的 IP 地址的分片大小。
  3. 将 Whereabouts IPAM CNI 插件注解详情添加到 pod 的 YAML 文件中:

    apiVersion: v1
    kind: Pod
    metadata:
      name: <pod_name> 
    1
    
      annotations:
      k8s.v1.cni.cncf.io/networks: openshift-multus/wb-ipam 
    2
    
    spec:
      containers:
      - name: samplepod 
    3
    
      command: ["/bin/ash", "-c", "trap : TERM INT; sleep infinity & wait"] 
    4
    
      image: alpine
    # ...
    Copy to Clipboard Toggle word wrap
    1
    pod 的名称。
    2
    引用 openshift-multus 命名空间中存在的 Whereabouts IPAM CNI 插件名称的注解详情。
    3
    pod 的容器名称。
    4
    定义容器的入口点,并在 Whereabouts IPAM CNI 插件中定义容器的行为。
  4. 将 NAD 文件配置应用到集群中运行的节点上存在的 pod:

    $ oc create -f <NAD_file_name>.yaml
    Copy to Clipboard Toggle word wrap

验证

  1. 输入以下命令显示 pod 的 IP 地址详情:

    $ oc describe pod <pod_name>
    Copy to Clipboard Toggle word wrap

    输出示例

    ...
    IP:     192.168.2.0
    IPs:
      IP:   192.168.2.0
    Containers:
      samplepod:
        Container ID:   docker://<image_name>
        Image:          <app_name>:v1
        Image ID:
    ...
    Copy to Clipboard Toggle word wrap

  2. 输入以下命令访问 pod 并确认其接口:

    $ oc exec <pod_name> -- ip a
    Copy to Clipboard Toggle word wrap

    输出示例

    ...
    3: net1@if23: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
        link/ether 82:01:98:e5:0c:b7 brd ff:ff:ff:ff:ff:ff
        inet 192.168.2.0/24 brd 10.10.0.255 scope global net1 
    1
    
           valid_lft forever preferred_lft forever
        inet6 fe80::8001:98ff:fee5:cb7/64 scope link
           valid_lft forever preferred_lft forever
    ...
    Copy to Clipboard Toggle word wrap

    1
    Pod 按预期附加到 net1 接口上的 192.168.2.1 IP 地址。
  3. 输入以下命令,检查 openshift-multus 命名空间中是否存在节点选择器池。预期输出显示节点选择器池的名称和创建期限(以分钟为单位)。

    $ oc get nodeslicepool -n openshift-multus
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME            AGE
    nodeslicepool   32m
    Copy to Clipboard Toggle word wrap

3.7.1.7. 为动态分配双栈 IP 地址创建配置

双栈 IP 地址分配可使用 ipRanges 参数进行配置:

  • IPv4 地址
  • IPv6 地址
  • 多个 IP 地址分配

流程

  1. type 设置为 whereabouts
  2. 使用 ipRanges 来分配 IP 地址,如下例所示:

    cniVersion: operator.openshift.io/v1
    kind: Network
    =metadata:
      name: cluster
    spec:
      additionalNetworks:
      - name: whereabouts-shim
        namespace: default
        type: Raw
        rawCNIConfig: |-
          {
           "name": "whereabouts-dual-stack",
           "cniVersion": "0.3.1,
           "type": "bridge",
           "ipam": {
             "type": "whereabouts",
             "ipRanges": [
                      {"range": "192.168.10.0/24"},
                      {"range": "2001:db8::/64"}
                  ]
           }
          }
    Copy to Clipboard Toggle word wrap
  3. 将网络附加到 pod。如需更多信息,请参阅"将 pod 添加到二级网络"。
  4. 验证是否分配了所有 IP 地址。
  5. 运行以下命令,以确保 IP 地址被分配为元数据。

    $ oc exec -it mypod -- ip a
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat