<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Cilium on Hallblazzar: 開發者日誌</title>
    <link>https://dev-journal.hallblazzar.dev/zh-tw/categories/cilium/</link>
    <description>Recent content in Cilium on Hallblazzar: 開發者日誌</description>
    <generator>Hugo</generator>
    <language>zh-tw</language>
    <lastBuildDate>Sat, 02 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://dev-journal.hallblazzar.dev/zh-tw/categories/cilium/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>關於遷移 Kubernetes CNI Plugin 的一些經驗談</title>
      <link>https://dev-journal.hallblazzar.dev/zh-tw/posts/2026_may_02_cni_migration/</link>
      <pubDate>Sat, 02 May 2026 00:00:00 +0000</pubDate>
      <guid>https://dev-journal.hallblazzar.dev/zh-tw/posts/2026_may_02_cni_migration/</guid>
      <description>&lt;div class=&#34;notice tip&#34;&gt;&#xA;  &lt;div class=&#34;notice-title&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-lightbulb&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;Tip&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;notice-content&#34;&gt;TL;DR：如果你正在為你的 Kubernetes 尋找替代的 CNI Plugin 與對應的遷移計劃，Cilium 是一個很好的選擇。它支援從幾乎任何 CNI 進行 Live-Migration ，並提供 Network Policy 與完整的的可觀測性生態系。&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;對於正在運行的 Kubernetes 叢集（特別是在 Production 上）而言，遷移 CNI Plugin 並不是簡單的任務。 一個簡易的策略是 &lt;a href=&#34;https://www.redhat.com/en/topics/devops/what-is-blue-green-deployment&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;藍綠部署（Blue/Green deployment）&lt;/a&gt;，即設定一個帶有目標 CNI 的新叢集，並將工作負載從舊叢集轉移到新叢集上。 這種方法能確保停機時間最少（仍需要額外設定，例如 Load Balancer 以確保可用性），且能忽略不同 CNI 之間的差異。 然而，如果必須進行「原地遷移」呢？ 雖然這種場景不常見且具挑戰性，但對於運行有 Stateful 或受託管的工作負載的叢集通常是必要的。 例如，平台透過 Kubernetes 提供運算資源，但營運人員無法控制部署在其中的服務。 如果營運人員希望在不讓使用者察覺或參與的情況下遷移 CNI，則仍需要原地遷移。&lt;/p&gt;&#xA;&lt;p&gt;原地遷移可以分為兩種類型：替換與 Live-Migration 。 替換意味著移除舊的 CNI 並安裝新的，這代表在移除與安裝之間會發生網路的連接中斷，且會令遷移結果不可預測；相較之下， Live-Migration 在遷移過程能夠中保持網路連接，以將對工作負載的影響降至最低。 大多數 CNI Plugin 完全不或僅有限度地支援 Live-Migration ，例如 &lt;a href=&#34;https://ovn-kubernetes.io/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;OVN-Kubernetes&lt;/a&gt;、&lt;a href=&#34;https://www.kube-router.io/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Kube-Router&lt;/a&gt; 和 &lt;a href=&#34;https://github.com/flannel-io/flannel&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Flannel&lt;/a&gt;。 雖然有些 CNI 支援 Live-Migration ，但僅在特定條件下運作，例如 &lt;a href=&#34;https://docs.tigera.io/calico/latest/about/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Calico&lt;/a&gt; 支援&lt;a href=&#34;https://docs.tigera.io/calico/latest/getting-started/kubernetes/flannel/migration-from-flannel&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;從 Flannel 和 Canal 遷移&lt;/a&gt;，但不支援從其他 CNI Plugin 遷移。 缺乏 Live-Migration 支援源於 CNI Plugin 的設計。 &lt;a href=&#34;https://www.cni.dev/docs/spec/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CNI Specification&lt;/a&gt; 定義了 Container Runtime 如何選擇 CNI Plugin 及其應支援的操作，但並未提供跨不同 CNI Plugin 運行時， Pod 之間能夠保持連通性的 Interface。有些使用者可能會考慮使用 &lt;a href=&#34;https://github.com/k8snetworkplumbingwg/multus-cni&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Multus&lt;/a&gt;。 該 Plugin 可以作為不同 CNI 之間的中介層運行，這使得支援任意 CNI Plugin 間的 Live-Migration 成為可能。 然而，根據我的經驗，混合不同 CNI 的 Network Interface 及相關的 IP table 規則時，Multus 並不總是能正常運作（取決於目標 CNI Plugin ），這使得 Multus 並非一個可靠的解決方案。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
