<p>We have an K8S Cluster environment with <code>1 master node</code> and <code>2 worker nodes</code> and all are on Linux and we are using flannel</p>
<p><strong>Example is given below</strong></p>
<pre><code>Master (CentOS 7) - 192.168.10.1

Worker Node-1 (CentOS 7) - 192.168.10.2
Worker Node-2 (CentOS 7) - 192.168.10.3

Worker Node-3 (Windows ) - 192.168.10.4
</code></pre>
<p>Now, we have to add a <code>Windows node</code> (eg 192.168.10.4) to existing cluster <code>192.168.10.1</code></p>
<p>According to this <a href="https://v1-17.docs.kubernetes.io/docs/setup/production-environment/windows/user-guide-windows-nodes/" rel="nofollow noreferrer">link</a> it appears that we have to update <code>cni-conf.json</code> section of <code>flannel</code> from <code>cbr0</code> to <code>vxlan0</code> and to my understanding this is done to communicate with Windows</p>
<p>My question will this change (<code>from cbr0 to vxlan0</code>) break the existing communication between  Linux to Linux?</p>

Sathish Kumar
<h2 id="lets-start-with-definitions">Let's start with definitions.</h2>
<p><code>cbr0</code> is own kubernetes bridge which is created to differentiate from <code>docker0</code> bridge used by docker.</p>
<p><code>vxlan</code> stands for <code>Virtual Extensible LAN</code> and it's an overlay network which means it encapsulates packet into another packet.</p>
<p>More precise definition:</p>
<blockquote>
<p>VXLAN is an encapsulation protocol that provides data center
connectivity using tunneling to stretch Layer 2 connections over an
underlying Layer 3 network.</p>
<p>The VXLAN tunneling protocol that encapsulates Layer 2 Ethernet frames
in Layer 3 UDP packets, enables you to create virtualized Layer 2
subnets, or segments, that span physical Layer 3 networks. Each Layer
2 subnet is uniquely identified by a VXLAN network identifier (VNI)
that segments traffic.</p>
</blockquote>
<h2 id="answer">Answer</h2>
<p>No, it won't break anything in communication between Linux nodes. This is an another option how nodes can communicate between each other using <code>flannel</code> CNI. I also tested this on my two nodes <code>linux</code> cluster and everything worked fine.</p>
<p>Main difference is how <code>flannel</code> will work with packets. It will be visible via <code>netstat</code> or <code>wireshark</code>, while for PODs nothing is going to be change because packets will be normalized when they come to PODs.</p>
<p><strong>Note!</strong> I recommend testing this change on a small dev/test cluster as there may be some additional setup for <code>firewalld</code> (usual rule before making any changes on production).</p>
<h2 id="useful-links">Useful links:</h2>
<ul>
<li><a href="https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#vxlan" rel="nofollow noreferrer">Flannel - recommended backends for VXLAN</a></li>
<li><a href="https://itnext.io/kubernetes-journey-up-and-running-out-of-the-cloud-flannel-c01283308f0e" rel="nofollow noreferrer">Kubernetes Journey — Up and running out of the cloud — flannel</a></li>
<li><a href="https://blog.neuvector.com/article/advanced-kubernetes-networking" rel="nofollow noreferrer">How Kubernetes Networking Works – Under the Hood</a></li>
</ul>
