Closed huangzhuxing closed 3 years ago
你的问题原因是没有配置floatingip池,配置后应该是调度器插件galaxy-ipam在调度阶段分配ip,写入pod的annotation中
- tke.cloud.tencent.com/eni-ip:"1" 是需要配置的。
- 固定IP功能仅支持underlay网络,不支持overlay网络,你应该将CNI配置中ipam部分删掉(不删掉也没关系)。需要配置floatingip池 Configmap https://github.com/tkestack/galaxy/blob/master/doc/galaxy-ipam-config.md#float-ip-configuration
感谢大佬在百忙之中答复我的疑问。
抱歉,在之前没完全说清楚我的环境信息,关于“floatingip池”,我是有配置的,但我没有单独创建kind: FloatingIP这个资源,如图:
后面我又发现了新的情况,用pod的annotation中的 ip 跟实际的 POD IP 不是一致的(之前我试过用galaxy-bridge,是可以保持一致并且能一直重建成功固定的,近期是重建了 k8s 环境后用galaxy-bridge也无法固定),建如下图:
我也摘取了 galaxy 的日志(为自己方便 debug,加了一下自己的日志代码,逻辑没动): 获取出来的 IP 是172.16.49.244,传入给 cni.go --> DelegateAdd 执行,调用invoke.ExecPluginWithResult的函数执行返回的是172.16.49.251 IP,本来计划将 cni 的 0.6.0 升级到0.8.1 尝试排除下,发现编译的时候多个地方报错,有部分函数 api的参数结构发生调整,就暂搁这个思路了。
galaxy-ipam 的日志: 一直是172.16.49.244这个 IP
关于您说的“固定IP功能仅支持underlay网络,不支持overlay网络”,这块我不是特别理解我当前的网络环境是 underlay 还是 overlay 的,我主要是通过虚拟机的网卡eno16777736设置我的 macvlan 网络的(通过 galaxy 创建的 macvlan 也能正常使用),不知道是否跟这个有关,还望大佬提供一下排查思路,继续指引一下,感谢!
我看你用的自己的macvlan的cni,需要修改下cni以支持从pod的annotation中获取ip,https://github.com/tkestack/galaxy/blob/dbc3522b3c42b31b49a224599c42e6229d5efe03/pkg/galaxy/server.go#L268-L285 https://github.com/tkestack/galaxy/blob/master/cni/ipam/ipam.go#L44-L58
感谢大佬指引。 macvlan 一直没有固定 ip 的问题大概已经弄清楚,我简单总结下:
1、我开始以为 bin 目录下的 macvlan 是 galaxy 编译出来的,后来发现是在 make 编译时,从下载的cni-plugins 解压出来,所以这块如果需要原生的macvlan实现 ip 固定,可能需要改动一下。
2、之前使用galaxy-k8s-vlan验证通过,后来出现问题是因为我更新了 float ip,但 galaxy-ipam 没有读取到最新的配置导致。
3 、目前验证 galaxy-k8s-vlan没有问题,但galaxy-flannel和galaxy-bridge一直不能固定,发现两种现象: 3.1:如果floatingip-config配置中,指定一个节点可以用多个网段时(如下配置代码),galaxy-flannel(172.20.x.x) 在 Annotation.args.commo.ipinfos设置的 ip 一直是第一个网段 ip,并且跟 pod ip 无法对应上(如下图),而 vlan(10.20.30.x) 则是正常的 3.2:尝试过将floatingip-config只保留galaxy-flannel(172.20.x.x)的 IP 段,仍然无法对应上,但Annotation.args.commo.ipinfos与galaxy-flannel(172.20.x.x)会变成同网段,例如 pod ip 是 172.20.0.10,而 pod 的 args 可能是172.20.0.20 这种奇怪现象, 这块可能是我还有某些地方没有正确配置导致?
kind: ConfigMap
apiVersion: v1
metadata:
name: floatingip-config
namespace: kube-system
data:
floatingips: '[ {
"routableSubnet": "172.16.49.131/32",
"ips":["10.20.30.3~10.20.30.253"],
"subnet":"10.20.30.0/24",
"gateway":"10.20.30.1"
}, {
"routableSubnet": "172.16.49.131/32",
"ips":["172.20.0.0~172.20.253.253"],
"subnet":"172.20.0.0/16",
"gateway":"172.20.0.0"
},{
"routableSubnet": "172.16.49.131/32",
"ips":["172.16.49.3~172.16.49.253"],
"subnet":"172.16.49.0/24",
"gateway":"172.16.49.2"
}]'
galaxy-flannel、galaxy-bridge不支持固定IP 支持固定IP的是这里的https://github.com/tkestack/galaxy/blob/master/doc/supported-cnis.md underlay network plugin
收到,感谢大佬的耐性指导。
之前我在同样的环境试过是能够固定 ip 的,请问下大佬,这个问题该如何定位?会不会是 etcd 的数据错乱导致?
实验步骤和环境信息见下图:
第一次删除(ip 从 251 变成 253):
测试 demo:
第二次删除(ip 从 253 变成 200):
我开始认为与s tke.cloud.tencent.com/eni-ip:“1” 有关,但我重试将该参数加上,最后的验证结果依然是一样的(如下图): (ip 从 202 变成 204)
环境信息如下(galaxy 的 image 我重新 build 过,主要是将 macvlan copy 进去): galaxy 是 1.0.8 k8s 是 1.19.11 docker 是19.03.12 all-in-one 单节点环境
macvlan配置如下:
[root@rhl7base yaml]# cat /etc/cni/net.d/20-macvlan.conf { "cniVersion": "0.2.0", "type": "macvlan", "name": "galaxy-k8s-macvlan", "master": "eno16777736", "mode": "bridge", "ipam": { "type": "host-local", "ranges": [ [ { "subnet": "172.16.49.0/24", "rangeStart": "172.16.49.200", "rangeEnd": "172.16.49.253", "gateway": "172.16.49.2" } ] ] } }
我试过使用 ipvlan,同样是以上效果。