<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Multi-Location Clusters on Cozystack</title><link>https://deploy-preview-470--cozystack.netlify.app/docs/v1/operations/multi-location/</link><description>Recent content in Multi-Location Clusters on Cozystack</description><generator>Hugo</generator><language>en</language><atom:link href="https://deploy-preview-470--cozystack.netlify.app/docs/v1/operations/multi-location/index.xml" rel="self" type="application/rss+xml"/><item><title>Networking Mesh</title><link>https://deploy-preview-470--cozystack.netlify.app/docs/v1/operations/multi-location/networking-mesh/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-470--cozystack.netlify.app/docs/v1/operations/multi-location/networking-mesh/</guid><description>&lt;p&gt;Kilo creates a WireGuard mesh between cluster locations. When running with Cilium, it uses
IPIP encapsulation routed through Cilium&amp;rsquo;s VxLAN overlay so that traffic between locations
works even when the cloud network blocks raw IPIP (protocol 4) packets.&lt;/p&gt;
&lt;h2 id="select-the-cilium-kilo-networking-variant"&gt;Select the cilium-kilo networking variant&lt;/h2&gt;
&lt;p&gt;During platform setup, select the &lt;strong&gt;cilium-kilo&lt;/strong&gt; networking variant. This deploys both Cilium
and Kilo as an integrated stack with the required configuration:&lt;/p&gt;
&lt;h2 id="how-it-works"&gt;How it works&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Kilo runs in &lt;code&gt;--local=false&lt;/code&gt; mode &amp;ndash; it does not manage routes within a location (Cilium handles that)&lt;/li&gt;
&lt;li&gt;Kilo creates a WireGuard tunnel (&lt;code&gt;kilo0&lt;/code&gt;) between location leaders&lt;/li&gt;
&lt;li&gt;Non-leader nodes in each location reach remote locations through IPIP encapsulation to their location leader, routed via Cilium&amp;rsquo;s VxLAN overlay&lt;/li&gt;
&lt;li&gt;The leader decapsulates IPIP and forwards traffic through the WireGuard tunnel&lt;/li&gt;
&lt;li&gt;Cilium&amp;rsquo;s &lt;code&gt;enable-ipip-termination&lt;/code&gt; option creates the &lt;code&gt;cilium_tunl&lt;/code&gt; interface (kernel&amp;rsquo;s &lt;code&gt;tunl0&lt;/code&gt; renamed) that Kilo uses for IPIP TX/RX &amp;ndash; without it, the kernel detects TX recursion on the tunnel device&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="talos-machine-config-for-cloud-nodes"&gt;Talos machine config for cloud nodes&lt;/h2&gt;
&lt;p&gt;Cloud worker nodes must include Kilo annotations in their Talos machine config:&lt;/p&gt;</description></item><item><title>Local Cloud Controller Manager</title><link>https://deploy-preview-470--cozystack.netlify.app/docs/v1/operations/multi-location/local-ccm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-470--cozystack.netlify.app/docs/v1/operations/multi-location/local-ccm/</guid><description>&lt;p&gt;The &lt;code&gt;local-ccm&lt;/code&gt; package provides a lightweight cloud controller manager for self-managed clusters.
It handles node IP detection and node lifecycle without requiring an external cloud provider.&lt;/p&gt;
&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;External IP detection&lt;/strong&gt;: Detects each node&amp;rsquo;s external IP via &lt;code&gt;ip route get&lt;/code&gt; (default target: &lt;code&gt;8.8.8.8&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node initialization&lt;/strong&gt;: Removes the &lt;code&gt;node.cloudprovider.kubernetes.io/uninitialized&lt;/code&gt; taint so pods can be scheduled&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node lifecycle controller&lt;/strong&gt; (optional): Monitors NotReady nodes via ICMP ping and removes them after a configurable timeout&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install"&gt;Install&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cozypkg add cozystack.local-ccm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="talos-machine-config"&gt;Talos machine config&lt;/h2&gt;
&lt;p&gt;All nodes in the cluster (including control plane) must have &lt;code&gt;cloud-provider: external&lt;/code&gt; set
so that kubelet defers node initialization to the cloud controller manager:&lt;/p&gt;</description></item></channel></rss>