k8s 的生态是不是对 nftables 兼容性很不好?

123 天前
 juzisang

前几周又把家庭集群从 docker swarm 切到 k3s 了,我把系统全装上了最新的 debian ,然后遇到好几个坑。

一、 kilo 会一直报规则不支持

容器会一直报 iptables 某个规则不支持,请使用 nftables...

但是能正常安装,使用也没问题,但是正常几天后,会突然出现集群网络不通的问题,不知道是不是也是 nftables 的问题

排查一路是发现 kilo 生成的 WireGuard ip 是一个旧的 ip ,一直没变

最后没找到解决方案,所以换成 tailscale 了,k3s 唯一给出的 vpn 方案。

二、tailscale subnet 无效

tailscale subnet 按官方教程配置好了,结果只能 ping 通装了 tailscale 的那个节点的内网 ip ,ping 不通其它的,看 iptables 规则也是有的。

只能搜索引擎慢慢翻,试了几种都没用,最后 reddit 找到个说修改 firewall-mode 的,加上就解决了...

TS_DEBUG_FIREWALL_MODE=nftables

行吧,好歹是解决了。

三、 安装 Calico 替换 flannel ,来解决获取不到用户真实 ip 的问题

装上这个之后,直接给我集群干崩了,无限重启。

翻官网 issues ,给得方案是不要使用 nftables https://github.com/projectcalico/calico/issues/8025

绷不住了,一路踩坑过来,是不是不能用 nftables 了,有人用上了吗

关键是 debian 最新的两个版本,默认使用 nftables

1475 次点击
所在节点    Kubernetes
14 条回复
DefoliationM
123 天前
看起来你的机器上不只装了 k8s ,还装了其他东西,我建议在完全干净的系统里装 k8s ,不然不好排查,完全不知道问题出在哪。
LanLiang
122 天前
kubernetes 官方 (kube-proxy)对 nftables 的支持将会在 1.31 版本进入 beta 阶段,默认开启.
ericFork
122 天前
calico 对 nftables 的支持将在 v3.29 引入( tech-preview ),GA 可能还需要一些耐心
guigeng
116 天前
我是 k3s + tailscale 方案,kube-proxy 使用 ipvs
就是有个问题,我内网有其他 vm 做了 advertise-routes ,只能通过 tailnet 的 ip 访问 master 了
`TS_DEBUG_FIREWALL_MODE=nftables`这个我没设置
```bash
NAME STATUS ROLES AGE VERSION
dogyun Ready <none> 19h v1.29.6+k3s2
dogyun-js Ready <none> 3h28m v1.29.6+k3s2
k3s-lab Ready control-plane,master 21h v1.29.6+k3s2
oracle-a1 Ready <none> 19h v1.29.6+k3s2
oracle-a2 Ready <none> 19h v1.29.6+k3s2
oracle-a3 Ready <none> 19h v1.29.6+k3s2
oracle-a4 Ready <none> 21h v1.29.6+k3s2
virmach Ready <none> 19h v1.29.6+k3s2
```

目前在任意一台 node 上 Ping pod 的 ip 地址都正常。
os 基本是用 debian12 ,ubuntu22.04 24.04
juzisang
116 天前
@guigeng #4 ping pod 是没问题,我说的是,共享家庭局域网设备到集群网络那个 SubNet ,ping 不通家里其它的设备 ip
guigeng
116 天前
@juzisang ping 家里其他网络设备是另外的 linux vm 开 subnet
juzisang
116 天前
@guigeng #6 开了,都是对的,加上我说的那个配置,TS_DEBUG_FIREWALL_MODE=nftables 什么都不变,就正常了。
guigeng
116 天前
@juzisang 请问一下,你内网开 subnet 的节点是 k3s 的 node 吗?我是家里 k3s node 默认使用 tailscale 10.42.0.0/24
家里其他电脑无法 ping 内网地址,只能 ping tailscale ip 地址。路由器加了静态路由。
juzisang
115 天前
@guigeng #8 我是家里内网的 k3s node 节点开了 subnet ,然后用云服务器上的 tailscale 节点 ping 不通家里的内网,只能 ping 通装了 tailscale 的那个 k3s node 节点的内网 ip 。我也加了静态路由
guigeng
114 天前
@juzisang k3s 使用 tailscale 方案的时候,默认是--advertise-routes=10.42.0.0/24
还需要执行 tailscale set --advertise-routes=192.168.100.0/24,10.42.0.0/24 ,然后 console 把家里节点的 192.168.100.0/24 这个 subroute 加进去
这样的话家里的 k3s node 才能从云服务器 ping 通。
之前 tailscale status 各个节点都是 direct ,但是现在发现部分节点编程 via tailscale 的公网节点了。。。不知道啥问题
juzisang
114 天前
@guigeng #10 我最近也老这样,自建 derper 后就稳定多了...
skrbug
114 天前
OP ,在 k8s 里面部署 tailscale 是为了解决什么需求呢?

外部设备通过 VPN 可以直连 POD 的 IP ?

有没有相关教程,学习下
@juzisang
guigeng
114 天前
@juzisang 我自建也这样,里面跑 daemonset,发现服务都不通了。
guigeng
114 天前
@juzisang 部署的 ds 是使用 hostNetwork

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1055949

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX