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 地址分配的配置:
字段 | 类型 | 描述 |
---|---|---|
|
|
IPAM 地址类型。值必须是 |
|
| 指定分配给虚拟接口的 IP 地址的对象数组。支持 IPv4 和 IPv6 IP 地址。 |
|
| 指定要在 pod 中配置的路由的一组对象。 |
|
| 可选:指定 DNS 配置的对象数组。 |
address
数组需要带有以下字段的对象:
字段 | 类型 | 描述 |
---|---|---|
|
|
您指定的 IP 地址和网络前缀。例如:如果您指定 |
|
| 出口网络流量要路由到的默认网关。 |
字段 | 类型 | 描述 |
---|---|---|
|
|
CIDR 格式的 IP 地址范围,如 |
|
| 网络流量路由的网关。 |
字段 | 类型 | 描述 |
---|---|---|
|
| 用于发送 DNS 查询的一个或多个 IP 地址的数组。 |
|
|
要附加到主机名的默认域。例如,如果将域设置为 |
|
|
在 DNS 查找查询过程中,附加到非限定主机名(如 |
静态 IP 地址分配配置示例
3.7.1.2. 动态 IP 地址(DHCP)分配配置 复制链接链接已复制到粘贴板!
pod 在创建时获取其原始 DHCP 租期。该租期必须由集群中运行的一个小型的 DHCP 服务器部署定期续订。
对于以太网网络附加,SR-IOV Network Operator 不会创建 DHCP 服务器部署。Cluster Network Operator 负责创建最小 DHCP 服务器部署。
要触发 DHCP 服务器的部署,您必须编辑 Cluster Network Operator 配置来创建 shim 网络附加,如下例所示:
shim 网络附加定义示例
下表描述了使用 DHCP 进行动态 IP 地址地址分配的配置参数。
字段 | 类型 | 描述 |
---|---|---|
|
|
IPAM 地址类型。需要值 |
以下 JSON 示例描述了使用 DHCP 进行动态 IP 地址地址分配的配置 p。
动态 IP 地址(DHCP)分配配置示例
{ "ipam": { "type": "dhcp" } }
{
"ipam": {
"type": "dhcp"
}
}
3.7.1.3. 使用 Whereabouts 进行动态 IP 地址分配配置 复制链接链接已复制到粘贴板!
Whereabouts CNI 插件允许在不使用 DHCP 服务器的情况下动态地将 IP 地址分配给二级网络。
Whereabouts CNI 插件还支持在单独的 NetworkAttachmentDefinition
CRD 中多次出现同一 CIDR 范围的重叠 IP 地址范围和配置。这在多租户环境中提供了更大的灵活性和管理功能。
3.7.1.3.1. 动态 IP 地址配置对象 复制链接链接已复制到粘贴板!
下表描述了使用 Whereabouts 进行动态 IP 地址分配的配置对象:
字段 | 类型 | 描述 |
---|---|---|
|
|
IPAM 地址类型。需要 |
|
| CIDR 表示法中的 IP 地址和范围。IP 地址是通过这个地址范围来分配的。 |
|
| 可选: CIDR 标记中零个或更多 IP 地址和范围的列表。包含在排除地址范围中的 IP 地址。 |
|
| 可选:帮助确保每个 pod 的组或域都有自己的一组 IP 地址,即使它们共享相同的 IP 地址范围。设置此字段对于保持网络独立和组织非常重要,特别是在多租户环境中。 |
3.7.1.3.2. 使用 Whereabouts 的动态 IP 地址分配配置 复制链接链接已复制到粘贴板!
以下示例显示了使用 Whereabouts 的动态地址分配配置:
Whereabouts 动态 IP 地址分配
3.7.1.3.3. 使用 Whereabouts 带有重叠 IP 地址范围的动态 IP 地址分配 复制链接链接已复制到粘贴板!
以下示例显示了一个动态 IP 地址分配,它将重叠的 IP 地址范围用于多租户网络。
NetworkAttachmentDefinition 1
- 1
- 可选。如果设置,必须与
NetworkAttachmentDefinition 2
的network_name
匹配。
NetworkAttachmentDefinition 2
- 1
- 可选。如果设置,必须与
NetworkAttachmentDefinition 1
的network_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
守护进程集。
流程
运行以下命令来编辑
Network.operator.openshift.io
自定义资源(CR):oc edit network.operator.openshift.io cluster
$ oc edit network.operator.openshift.io cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在自定义资源 (CR) 的
spec
定义中包含此示例 YAML extract 中显示的additionalNetworks
部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存文件并退出文本编辑器。
运行以下命令,验证
whereabouts-reconciler
守护进程集是否已成功部署:oc get all -n openshift-multus | grep whereabouts-reconciler
$ oc get all -n openshift-multus | grep whereabouts-reconciler
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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
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 Copied! Toggle word wrap Toggle overflow
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 已启动并正在运行。
流程
运行以下命令,使用 IP 协调器的特定 cron 表达式在
openshift-multus
命名空间中创建一个名为whereabouts-config
的ConfigMap
对象:oc create configmap whereabouts-config -n openshift-multus --from-literal=reconciler_cron_expression="*/15 * * * *"
$ oc create configmap whereabouts-config -n openshift-multus --from-literal=reconciler_cron_expression="*/15 * * * *"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此 cron 表达式表示 IP 协调器每 15 分钟运行一次。根据您的特定要求调整表达式。
注意whereabouts-reconciler
守护进程集只能使用包含五个星号的 cron 表达式模式。目前才不支持带有用于表示秒的第 6 个星号。运行以下命令,获取与
openshift-multus
命名空间中的whereabouts-reconciler
守护进程集和 pod 相关的资源信息。oc get all -n openshift-multus | grep whereabouts-reconciler
$ oc get all -n openshift-multus | grep whereabouts-reconciler
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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
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 Copied! Toggle word wrap Toggle overflow 运行以下命令,以验证
whereabouts-reconciler
pod 是否运行带有配置的时间间隔的 IP 协调器:oc -n openshift-multus logs whereabouts-reconciler-2p7hw
$ oc -n openshift-multus logs whereabouts-reconciler-2p7hw
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7.1.6. 为动态分配双栈 IP 地址创建配置 复制链接链接已复制到粘贴板!
双栈 IP 地址分配可使用 ipRanges
参数进行配置:
- IPv4 地址
- IPv6 地址
- 多个 IP 地址分配
流程
-
将
type
设置为whereabouts
。 使用
ipRanges
来分配 IP 地址,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将网络附加到 pod。如需更多信息,请参阅"将 pod 添加到二级网络"。
- 验证是否分配了所有 IP 地址。
运行以下命令,以确保 IP 地址被分配为元数据。
$ oc exec -it mypod -- ip a
$ oc exec -it mypod -- ip a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow