配置 IPPool

IPPool 是比 Subnet 更细粒度的 IPAM 管理单元。
您可以通过 IPPool 将子网段细分为多个单元,每个单元绑定一个或多个命名空间。

说明

创建 IPPool

以下是示例:

apiVersion: kubeovn.io/v1
kind: IPPool
metadata:
  name: pool-1
spec:
  subnet: ovn-default
  ips:
  - "10.16.0.201"
  - "10.16.0.210/30"
  - "10.16.0.220..10.16.0.230"
  namespaces:
  - ns-1
  1. IP 池所属的子网。
  2. IP 范围。支持的格式有:<IP><CIDR><IP1>..<IP2>。支持 IPv4 和 IPv6。
  3. 可选,IP 池绑定的命名空间。绑定命名空间中的 Pod 只会从绑定的 IP 池中获取 IP,而不会从子网中的其他范围获取。

使用 IPPool

要从 IP 池中随机分配 IP,只需将 IP 池绑定到目标命名空间。
当绑定命名空间中的 Pod 创建时,其 IP 将从对应的 IP 池中分配。

NOTE

在将 IP 池绑定到命名空间之前,请确保该命名空间只绑定了 IP 池所属的子网。

您也可以通过注解为 Pod 指定 IP 池:

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  annotations:
    ovn.kubernetes.io/ip_pool: pool-1
spec:
  containers:
  - name: web
    image: nginx:latest

对于工作负载,可以在 Deployment、StatefulSet 等的 Pod 模板中使用注解:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
      annotations:
        ovn.kubernetes.io/ip_pool: pool-1
    spec:
      containers:
      - name: web 
        image: nginx:latest

注意事项

  1. 为确保与 Fixed Addresses 功能兼容,IP 池名称不能是 IP 地址。
  2. 允许 IP 地址超出子网范围,但这些 IP 不会生效。
  3. 同一子网下不同的 IP 池不能有重叠的 IP 范围。
  4. .spec.ips 字段可随时更新,修改后会立即生效。
  5. IP 池会继承子网的保留 IP,从 IP 池中随机分配 IP 时,会跳过 IP 池范围内的保留 IP。
  6. 从子网中随机分配 IP 时,会排除该子网内所有 IP 池的 IP 范围。
  7. 可以将多个 IP 池绑定到同一个命名空间。