配置 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
- IP 池所属的子网。
- IP 范围。支持的格式有:<IP>、<CIDR> 和 <IP1>..<IP2>。支持 IPv4 和 IPv6。
- 可选的绑定命名空间。绑定命名空间中的 Pod 只会从绑定的池中获取 IP,而不会从子网中的其他范围获取。
使用 IPPool
要从 IP 池中随机分配 IP,只需将 IP 池绑定到目标命名空间。
当绑定命名空间中的 Pod 创建时,其 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
注意事项
- 为确保与功能 Fixed Addresses 兼容,IP 池名称不能是 IP 地址。
- 允许 IP 地址超出子网范围,但这些 IP 不会生效。
- 同一子网下的不同 IP 池不能有重叠的 IP 范围。
.spec.ips 字段可随时更新,任何更改将立即生效。
- IP 池会继承子网的保留 IP。随机分配 IP 池中的 IP 时,会跳过 IP 池范围内的保留 IP。
- 从子网随机分配 IP 时,会排除子网中所有 IP 池的 IP 范围。
- 可以将多个 IP 池绑定到同一个命名空间。