配置 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,而不会从子网中的其他范围获取。

使用 IPPool

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

NOTE

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

你也可以通过 annotation 将 IP 池分配给 Pod:

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

对于 workload,请在 Deployment、StatefulSet 等的 Pod 模板中使用 annotation:

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 池可以绑定到同一个命名空间。