是否有办法将K3s /法兰绒绑定到另一个接口?



我有一个K3s (v1.20.4+k3s1)集群,有3个节点,每个节点有两个接口。缺省接口有一个公共IP,第二个接口有一个10.190.1.0地址。我安装了带有和不带有-flannel-backend=none选项的k3,然后通过"kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml",之前通过参数"——iface="将kubectl -flannel容器绑定到内部接口。在这个设置中,kube-法兰绒吊舱获得内部接口的节点ip,但是我无法通过ICPM到达其他节点上的吊舱。如果不使用- interface参数部署法兰绒,则kube-法兰绒吊舱将从10.42.0.0网络获得一个地址。然后我可以访问其他主机的pod,但流量将通过公共接口路由,这是我想避免的。有人能给我点建议吗?

这个问题已经在评论区解决了,但为了更好地看到,我决定提供一个答案。

我们可以在K3s文档中看到,K3s默认使用法兰绒作为CNI:

默认情况下,K3s将以法兰绒作为CNI运行,使用VXLAN作为默认后端。要更改CNI,请参见配置自定义CNI一节。

默认情况下,法兰绒选择主机上的第一个接口(查看法兰绒文档),但我们可以使用——flannel-iface标志覆盖此行为。
另外,我们可以使用——node- IP标志显式地设置IP地址来为节点发布。


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

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

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标志,法兰绒将选择第一个接口(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标志覆盖默认的法兰绒接口:

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 

感谢@matt_j的解决方案。这对我很有效。您可以在安装k3s集群之后应用这些更改,只需更改systemd k3s即可。主节点和k3s-agent上的服务。

问题:安装k3s服务器没有额外的选项将导致法兰绒选择默认的网络接口,在我的情况下,它是'enp0s3',我想'enp0s8'作为法兰绒的默认网络接口。

注意:在这个例子中master_hostname=docker01, master_ip=192.168.56.10和worker_hostname=docker02, worker_ip=192.168.56.20

sudo nano/etc/systemd/system/k3s.service

[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
Wants=network-online.target
After=network-online.target
[Install]
WantedBy=multi-user.target
[Service]
Type=notify
EnvironmentFile=-/etc/default/%N
EnvironmentFile=-/etc/sysconfig/%N
EnvironmentFile=-/etc/systemd/system/k3s.service.env
KillMode=process
Delegate=yes
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s
ExecStartPre=/bin/sh -xc '! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service'
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s 
server 
'--write-kubeconfig' 
'/home/docker01/.kube/config' 
'--write-kubeconfig-mode' 
'666' 
'--tls-san' 
'192.168.56.10,192.168.56.20,docker02' 
'--node-external-ip=192.168.56.10' 
'--flannel-external-ip' 
'--node-ip' 
'192.168.56.10' 
'--flannel-iface' 
'enp0s8' 

sudo nano/etc/systemd/system/k3s-agent.service

[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
Wants=network-online.target
After=network-online.target
[Install]
WantedBy=multi-user.target
[Service]
Type=notify
EnvironmentFile=-/etc/default/%N
EnvironmentFile=-/etc/sysconfig/%N
EnvironmentFile=-/etc/systemd/system/k3s-agent.service.env
KillMode=process
Delegate=yes
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s
ExecStartPre=/bin/sh -xc '! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service'
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s 
agent 
'--token' 
'K10f0943a0652c34c251102669ea4fde4e777a1971c69c1ed8c07e7ee05ab630e2f::server:4298a71209a00719551ee49d868c6fba' 
'--server' 
'https://192.168.56.10:6443' 
'--node-external-ip' 
'192.168.56.20' 
'--flannel-iface' 
'enp0s8' 

在改变你的ExecStart之后,你可以在所有的节点上应用改变:

sudo systemctl daemon-reload

sudo systemctl restart

相关内容

  • 没有找到相关文章

最新更新