微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有什么办法可以将 K3s/flannel 绑定到另一个接口?

如何解决有什么办法可以将 K3s/flannel 绑定到另一个接口?

我有一个 K3s (v1.20.4+k3s1) 集群,有 3 个节点,每个节点有两个接口。认接口有一个公共 IP,第二个是 10.190.1.0 地址。我安装了带有和不带有 -flannel-backend=none 选项的 K3s,然后通过“kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml"”部署了 flannel,之前通过参数“--iface=”将 kube-flannel 容器绑定到内部接口. 在这个设置中,kube-flannel pods 获得了内部接口的 node-ip,但我无法通过 ICPM 访问其他节点上的 pods。如果我在没有 -iface arg 的情况下部署 flannel,kube-flannel pods 会得到一个地址来自 10.42.0.0 网络。然后我可以到达其他主机的 pod,但流量将通过公共接口路由,我想避免这种情况。有人给我提示吗?

解决方法

问题已在评论部分解决,但为了更好的可见性,我决定提供答案。

正如我们在 K3s documentation 中看到的,K3s 默认使用 flannel 作为 CNI:

默认情况下,K3s 将使用 flannel 作为 CNI,使用 VXLAN 作为默认后端。要更改 CNI,请参阅配置自定义 CNI 部分。

默认情况下,flannel 选择主机上的第一个接口(查看 flannel documentation),但我们可以使用 --flannel-iface 标志覆盖此行为。
此外,我们可以使用 --node-ip 标志明确设置 IP 地址来为节点做广告。


我创建了一个简单的例子来说明它是如何工作的。

在我的主机上,我有两个网络接口(IBM862ens4):

ens5

不设置 kmaster:~# ip a s | grep -i "UP\|inet" 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 inet 127.0.0.1/8 scope host lo 2: ens4: <BROADCAST,MULTICAST,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000 inet 10.156.15.197/32 brd 10.156.15.197 scope global dynamic ens4 3: ens5: <BROADCAST,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000 inet 192.168.0.2/32 brd 192.168.0.2 scope global dynamic ens5 --flannel-iface 标志,flannel 将选择第一个界面 (--node-ip):

ens4: 10.156.15.197

但正如我之前提到的,我们可以使用 kmaster:~# curl -sfL https://get.k3s.io | sh - [INFO] Finding release for channel stable [INFO] Using v1.20.4+k3s1 as release ... [INFO] systemd: Starting k3s kmaster:~# kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP kmaster Ready control-plane,master 97s v1.20.4+k3s1 10.156.15.197 标志覆盖默认的法兰绒接口:

--flannel-iface

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。