固定 ip 和 预留 ip, 我理解这两个功能关系很近。
预留用于资源创建前, 固定用于资源的生命周期中。如果一个资源需要使用一个 IP,那么就需要覆盖这两个场景。
固定 ip
固定 ip 的使用场景按照固定 ip 和网卡的绑定关系分,可以分为两种:
- pod 网卡使用的主 ip (第一个 ip)
- pod 网卡使用的 vip (其他 ip )
1. pod 网卡使用的主 ip
- statefuset 固定 ip
- vm 固定 ip
这种情况 目前已经支持了,如果有什么 pod 需要固定 ip 的情况,应该要自己设计一个 operator。
cni 的设计是按照 k8s 负载设计的
2. pod 网卡使用的 vip
这个可以使用 vip 资源,该资源和 k8s 资源以及 ip 完全独立,创建即可占位 ip
其他
很多 openstack 迁移过来的可能想使用 neutron port,其实 port 迁移过来就是 ip 和 vip。port 在 ovs 场景,只有是否是虚拟 type 的区别。
openstack 的资源是基于 uuid 维护的,k8s 是基于名字的,但是这个区别在 ip 占位场景汇总其实可以忽略,你想使用一个 ip,直接使用 ip 中划线作为名字即可。
kubeovn 还使用一个功能,就是使用 vip 先占位,然后给 pod 主网卡用。这个设计一开始感觉是想填补 port 的空白,但是实际上多少有点让 ip 和 vip 的功能不清晰了。
kubeovn 还有两种资源可以预留 ip, 比如 subnet exclude ip 以及 ip pool,这两种资源可以让 ip 先预留出来,然后让用户自己去分配 ip 的,比如基于 operator。
PS:
k8s 的设计是基于 ns 和 资源名的,所以预留一个 ip 的功能,往往需要先考虑预留 ns 和 资源名。一旦确定了这个,ip 是否能够预留就确定了。