Есть ли какой-нибудь способ привязать K3s / flannel к другому интерфейсу?

#kubernetes #networking #interface #flannel #k3s

#kubernetes #сеть #интерфейс #фланель #k3s

Вопрос:

У меня есть кластер K3s (v1.20.4 k3s1) с 3 узлами, каждый с двумя интерфейсами. Интерфейс по умолчанию имеет общедоступный IP-адрес, второй — адрес 10.190.1.0. Я установил K3s с опцией -flannel-backend= none и без нее, а затем развернул flannel через » kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml «, предварительно привязав контейнер kube-flannel к внутреннему интерфейсу с помощью аргументов «—iface=». В этой настройке модули kube-flannel получают IP-адрес узла внутреннего интерфейса, но я не могу связаться с модулями на других узлах через ICPM. Если я разверну flannel без аргумента iface, модули kube-flannel получат адрес из сети 10.42.0.0. Тогда я смогу получить доступ к модулям других хостов, но трафик будет маршрутизироваться через общедоступные интерфейсы, чего я хочу избежать. У кого-нибудь есть совет для меня?

Комментарии:

1. ICMP Включен ли трафик в вашей частной сети? Вы пытались получить доступ к Pods ним с узла или с другого Pod ? Вы пытались использовать аргумент —node-ip ? Насколько я знаю, есть аргумент —flannel-iface , а не --iface= .

2. вы правы, «—flannel-iface=» сработало. Спасибо!

3. Это здорово 🙂 итак, использование --flannel-iface= решило вашу проблему, и теперь все работает так, как ожидалось?

4. точно 🙂 теперь я могу использовать: 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:

Проблема была решена в разделе комментариев, но для лучшей наглядности я решил предоставить ответ.

Как мы можем видеть в документации K3s, K3s использует flannel в качестве CNI по умолчанию:

По умолчанию K3s будет работать с flannel в качестве CNI, используя VXLAN в качестве серверной части по умолчанию. Чтобы изменить CNI, обратитесь к разделу о настройке пользовательского CNI.

По умолчанию flannel выбирает первый интерфейс на хосте (посмотрите документацию flannel), но мы можем переопределить это поведение с помощью флага —flannel-iface .
Кроме того, мы можем явно задать IP-адрес для объявления для узла, используя флаг —node-ip .


Я создал простой пример, чтобы проиллюстрировать, как это работает.

На моем хост-компьютере у меня есть два сетевых интерфейса ( ens4 и 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 выберет первый интерфейс ( 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 по умолчанию с --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