kubernetes 有没有办法将K3 s/法兰绒绑定到另一个接口?

iswrvxsc  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(2)|浏览(100)

我有一个K3 s(v1.20.4+ k3 s1)集群,有3个节点,每个节点有两个接口。默认的接口有一个公网IP,第二个是10.190.1.0地址。我安装了K3 s,有和没有-flannel-backend=none选项,然后通过“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。如果我部署flannel而不使用-iface arg,kube-flannel pod会从www.example.com网络中获取地址10.42.0.0。然后我可以访问其他主机的pod,但流量将通过公共接口路由,这是我希望避免的。有人给我小费吗?

6tqwzwtp

6tqwzwtp1#

这个问题在评论部分得到了解决,但是为了更好的可见性,我决定提供一个答案。
正如我们在K3 s文档中看到的,K3 s默认使用法兰绒作为CNI:
默认情况下,K3 s将使用flnel作为CNI运行,使用VXLAN作为默认后端。要更改CNI,请参阅有关配置自定义CNI的章节。
默认情况下,flannel选择主机上的第一个接口(请参阅flannel文档),但是我们可以使用--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标志的情况下,flannel将选择第一个接口(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标志覆盖默认的flannel接口:

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

irlmq6kh

irlmq6kh2#

感谢@matt_j的解决方案。对我很有效。您可以在安装k3 s集群后应用这些更改,只需更改主节点上的systemd k3s.service和工作节点上的k3 s-agent.service。
问题:安装k3 s服务器而不使用额外的选项将导致flannel选择默认的网络接口,在我的情况下是'enp 0 s3',我希望'enp 0 s8'是flannel的默认网络接口。
注意:在本例中,master_hostname= docker 01,master_ip=192.168.56.10,worker_hostname= docker 02,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

相关问题