有没有办法将 K3s / flannel 绑定到另一个接口?

Posted

技术标签:

【中文标题】有没有办法将 K3s / flannel 绑定到另一个接口?【英文标题】:Is there any way to bind K3s / flannel to another interface? 【发布时间】:2021-06-01 13:56:22 【问题描述】:

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

【问题讨论】:

您的专用网络中是否启用了ICMP 流量?您是否尝试从一个节点或另一个 Pod 访问这些 Pods ?您是否尝试过使用 --node-ip 参数?据我所知,有--flannel-iface 参数,而不是--iface= 你说得对,“--flannel-iface=" 有效。谢谢! 太好了 :) 所以使用 --flannel-iface= 解决了您的问题,现在一切都按预期工作了? 完全正确 :) 现在我可以使用:curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="v1.20.4+k3s1" INSTALL_K3S_EXEC="server --disable=traefik --flannel-iface=ens10 --bind-address 10.190.1.5 --advertise-address 10.190.1.5 --datastore-endpoint etcd --node-name kube-master-01 --node-ip 10.190.1.5 --node-external-ip 10.190.1.30 --cluster-init" sh -s - 安装第一个主节点,而 ens10 是第二个接口 【参考方案1】:

问题已在 cmets 部分解决,但为了更好地了解我决定提供答案。

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

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

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


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

在我的主机上,我有两个网络接口(@98​​7654325@ 和 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,UP,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,MULTICAST,UP,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--node-ip标志,flannel会选择第一个接口(@98​​7654330@):

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 标志覆盖默认法兰绒接口:

kmaster:~# curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--node-ip=192.168.0.2 --flannel-iface=ens5" 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   64s   v1.20.4+k3s1   192.168.0.2 

【讨论】:

以上是关于有没有办法将 K3s / flannel 绑定到另一个接口?的主要内容,如果未能解决你的问题,请参考以下文章

将 flannel 配置为在 kubernetes 中使用非默认接口

为啥匹配的持久卷不绑定到匹配的持久卷声明(使用 k3s)?

基础指南:如何在K3s中配置Traefik?

有没有办法将 Qt 的源代码构建复制到另一个位置?

有没有办法将代码从 Iphone 应用程序运行到另一个 Iphone 应用程序?

有没有办法将preferredStatusBarStyle 与RxCocoa 绑定?