SpiderIPPool
简体中文 | English
介绍
SpiderIPPool 资源代表 Spiderpool 为 Pod 分配 IP 的 IP 地址范围。 请参照 SpiderIPPool CRD 为你的集群创建 SpiderIPPool 资源。
SpiderIPPool 功能
- 单双栈以及 IPv6 支持
- IP 地址范围控制
- 网关路由控制
- 仅用以及全局缺省池控制
- 搭配各种资源亲和性使用控制
使用介绍
单双栈控制
Spiderpool 支持 IPv4-only, IPv6-only, 双栈这三种 IP 地址分配方式,可通过 configmap 配置来控制。
通过 Helm 安装时可配置参数来指定:
--set ipam.enableIPv4=true --set ipam.enableIPv6=true
。
当我们 Spiderpool 环境开启双栈配置后,我们可以手动指定使用哪些 IPv4 和 IPv6 池来分配 IP 地址:
在双栈环境下,你也可为 Pod 只分配 IPv4/IPv6 的IP,如:
ipam.spidernet.io/ippool: '{"ipv4": ["custom-ipv4-ippool"]}'
apiVersion: apps/v1
kind: Deployment
metadata:
name: custom-dual-ippool-deploy
spec:
replicas: 3
selector:
matchLabels:
app: custom-dual-ippool-deploy
template:
metadata:
annotations:
ipam.spidernet.io/ippool: |-
{
"ipv4": ["custom-ipv4-ippool"],"ipv6": ["custom-ipv6-ippool"]
}
labels:
app: custom-dual-ippool-deploy
spec:
containers:
- name: custom-dual-ippool-deploy
image: busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh", "-c", "trap : TERM INT; sleep infinity & wait"]
指定 IPPool 为应用分配 IP 地址
对于以下指定使用 SpiderIPPool 规则的优先级,请参考 IP 候选池规则
使用 Pod Annotation 指定使用 IP 池
我们可借助注解 ipam.spidernet.io/ippool
或 ipam.spidernet.io/ippools
标记在 Pod 的 Annotation上来指定 Pod 使用哪些 IP 池, 注解 ipam.spidernet.io/ippools
多用于多网卡指定。此外我们可以指定多个 IP 池以供备选,当某个池的 IP 被用完后,可继续从你指定的其他池中分配地址。
ipam.spidernet.io/ippool: |-
{
"ipv4": ["demo-v4-ippool1", "backup-ipv4-ippool"],
"ipv6": ["demo-v6-ippool1", "backup-ipv6-ippool"]
}
在使用注解 ipam.spidernet.io/ippools
用于多网卡指定时,你可显式的通过指定 interface
字段标明网卡名,也可以通过**数组顺序排列**让第几张卡用哪些 IP 池。另外,字段 cleangateway
标明是否需要根据 IP 池中的 gateway
字段生成一条默认路由,当 cleangateway
为 true
标明无需生成默认路由。(默认为false)
多网卡场景下,一般无法为路由表
main
表生成两条及以上的默认路由。搭配Coordinator
插件可为你处理好该问题,因此你可以忽略cleangateway
字段。或者在单独使用 Spiderpool IPAM 插件时,可借助cleangateway: true
来标明不根据 IP 池 gateway 字段生成默认路由。
ipam.spidernet.io/ippools: |-
[{
"ipv4": ["demo-v4-ippool1"],
"ipv6": ["demo-v6-ippool1"],
},{
"ipv4": ["demo-v4-ippool2"],
"ipv6": ["demo-v6-ippool2"],
"cleangateway": true
}]
ipam.spidernet.io/ippools: |-
[{
"interface": "eth0",
"ipv4": ["demo-v4-ippool1"],
"ipv6": ["demo-v6-ippool1"],
"cleangateway": true
},{
"interface": "net1",
"ipv4": ["demo-v4-ippool2"],
"ipv6": ["demo-v6-ippool2"],
"cleangateway": false
}]
使用 Namespace 注解指定池
我们可以为 Namespace 打上注解 ipam.spidernet.io/default-ipv4-ippool
和 ipam.spidernet.io/default-ipv6-ippool
, 当应用部署时,可从应用所在 Namespace 的注解中选择 IP 池使用:
未使用 Pod Annotation 指定使用 IP 池时,优先使用此处 Namespace 注解规则。
apiVersion: v1
kind: Namespace
metadata:
annotations:
ipam.spidernet.io/default-ipv4-ippool: '["ns-v4-ippool1","ns-v4-ippool2"]'
ipam.spidernet.io/default-ipv6-ippool: '["ns-v6-ippool1","ns-v6-ippool2"]'
name: kube-system
...
使用 CNI 配置文件指定池
我们可以在 CNI 配置文件中,指定缺省的 IPv4 和 IPv6 池以供应用选择该 CNI 配置时使用,具体可参照 CNI配置
未使用 Pod Annotation 指定使用 IP 池,且没有通过 Namespace 注解指定 IP 池时,将优先使用此处 CNI 配置文件指定池规则。
{
"name": "macvlan-vlan0",
"type": "macvlan",
"master": "eth0",
"ipam": {
"type": "spiderpool",
"default_ipv4_ippool":["default-v4-ippool","backup-ipv4-ippool"],
"default_ipv6_ippool":["default-v6-ippool","backup-ipv6-ippool"]
}
}
为 SpiderIPPool 设置集群默认级别
在 SpiderIPPool CRD 中我们可以看到 spec.default
字段是一个 bool 类型,当我们没有通过 Annotation 或 CNI 配置文件指定 IPPool 时,系统会根据该字段挑选出集群默认池使用:
- 未使用 Pod Annotation 指定使用IP池,没有通过 Namespace 注解指定 IP 池时,且未在 CNI 配置文件中指定 IP 池时,此处会生效。
- 可为多个 IPPool 资源设置为集群默认级别。
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderIPPool
metadata:
name: master-172
spec:
default: true
...
SpiderIPPool 搭配亲和性使用
具体请参考 IP 池亲和性搭配
SpiderIPPool 网关与路由配置
具体请参考 路由功能
因此 Pod 会拿到基于网关的默认路由,以及此 IP 池上的自定义路由。(若 IP 池不设置网关,则不会生效默认路由)
命令行工作 (kubectl) 查看扩展字段
为了更简单方便的查看 SpiderIPPool 资源的相关属性,我们补充了一些扩展字段可让用户通过 kubectl get sp -o wide
查看:
ALLOCATED-IP-COUNT
字段表示该池已分配的 IP 数量TOTAL-IP-COUNT
字段表示该池的总 IP 数量DEFAULT
字段表示该池是否为集群默认级别DISABLE
字段表示该池是否被禁用NODENAME
字段表示与该池亲和的节点MULTUSNAME
字段表示与该池亲和的 multus 实例APP-NAMESPACE
字段属于 SpiderSubnet 功能独有,表明该池是一个系统自动创建的池,同时该字段表明其对应应用的命名空间。
~# kubectl get sp -o wide
NAME VERSION SUBNET ALLOCATED-IP-COUNT TOTAL-IP-COUNT DEFAULT DISABLE NODENAME MULTUSNAME APP-NAMESPACE
auto4-demo-deploy-subnet-eth0-fcca4 4 172.100.0.0/16 1 2 false false kube-system
test-pod-ippool 4 10.6.0.0/16 0 10 false false ["master","worker1"] ["kube-system/macvlan-vlan0"]
指标(metric)
我们也为 SpiderIPPool 资源补充了相关的指标信息,详情请看 metric