Tengo un clúster K3s (v1.20.4+k3s1) con 3 nodos, cada uno con dos interfaces. La interfaz predeterminada tiene una IP pública, la segunda una dirección 10.190.1.0. Instalé K3s con y sin la opción -flannel-backend=none y luego implementé flannel a través de " kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml" , previamente vinculando el contenedor kube-flannel a la interfaz interna a través de los argumentos "--iface=". En esta configuración, los pods kube-flannel obtienen la IP del nodo de la interfaz interna, pero no puedo acceder a los pods en los otros nodos a través de ICPM. Si implemento flannel sin -iface arg, los pods kube-flannel obtienen una dirección de la red 10.42.0.0. Entonces puedo llegar a los pods de los otros hosts, pero el tráfico se enrutará a través de las interfaces públicas, lo que quiero evitar. ¿Alguien tiene un consejo para mí?
El problema se resolvió en la sección de comentarios, pero para una mejor visibilidad, decidí proporcionar una respuesta.
Como podemos ver en la documentación de K3s, K3s usa franela como CNI por defecto:
De forma predeterminada, K3s se ejecutará con flannel como CNI, utilizando VXLAN como backend predeterminado. Para cambiar el CNI, consulte la sección sobre cómo configurar un CNI personalizado.
De forma predeterminada, flannel selecciona la primera interfaz en un host (consulte la documentación de flannel ), pero podemos anular este comportamiento con el indicador --flannel-iface .
Además, podemos configurar explícitamente la dirección IP para anunciar el nodo usando el indicador --node-ip .
He creado un ejemplo simple para ilustrar cómo funciona.
En mi máquina host tengo dos interfaces de red ( ens4 y ens5 ):
kmaster:~# ip as | 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 Sin configurar los --flannel-iface y --node-ip , flannel seleccionará la primera interfaz ( 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 Pero como mencioné antes, podemos anular la interfaz de franela predeterminada con el --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