<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ovs on Tomofumi Kondo</title>
    <link>https://blog.tomokon.net/tags/ovs/</link>
    <description>Recent content in Ovs on Tomofumi Kondo</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja-jp</language>
    <lastBuildDate>Sat, 04 Apr 2026 21:28:11 +0900</lastBuildDate><atom:link href="https://blog.tomokon.net/tags/ovs/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>OVN-Kubernetes のノード再起動後にネットワーク断になる</title>
      <link>https://blog.tomokon.net/posts/ovn-kubernetes-delete-transient-ports/</link>
      <pubDate>Sat, 04 Apr 2026 21:28:11 +0900</pubDate>
      
      <guid>https://blog.tomokon.net/posts/ovn-kubernetes-delete-transient-ports/</guid>
      
      <description>&lt;h2 id=&#34;1-はじめに&#34;&gt;1. はじめに&lt;/h2&gt;
&lt;p&gt;みなさん、自宅 Kubernetes クラスタ運用してますか？&lt;/p&gt;
&lt;p&gt;今回は、自宅サーバーで動かしている &lt;strong&gt;OVN-Kubernetes&lt;/strong&gt;（Helm デプロイ）の環境で、&lt;strong&gt;ノードを再起動すると外部疎通が完全に断になる&lt;/strong&gt;というなかなか厄介な問題に遭遇したので、原因の深掘りと解決までの記録をお話しします。&lt;/p&gt;
&lt;p&gt;OVN-Kubernetes のセットアップについては&lt;a href=&#34;https://blog.tomokon.net/posts/kubeadm-ovn-kubernetes/&#34;&gt;こちらの記事&lt;/a&gt;で紹介しているので、興味があればぜひ読んでみてください。&lt;/p&gt;
&lt;h2 id=&#34;2-ovn-kubernetes-のブリッジ構成&#34;&gt;2. OVN-Kubernetes のブリッジ構成&lt;/h2&gt;
&lt;h3 id=&#34;nictobridge-の仕組み&#34;&gt;NicToBridge の仕組み&lt;/h3&gt;
&lt;p&gt;OVN-Kubernetes は、ノードの物理 NIC（例: &lt;code&gt;eth0&lt;/code&gt;）を OVS ブリッジ（&lt;code&gt;breth0&lt;/code&gt;）に組み込んで使います。
この処理を行うのが &lt;code&gt;NicToBridge()&lt;/code&gt; 関数です。&lt;/p&gt;
&lt;p&gt;やっていることをざっくりまとめると：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;OVS ブリッジ &lt;code&gt;breth0&lt;/code&gt; を作成&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eth0&lt;/code&gt; を &lt;code&gt;breth0&lt;/code&gt; のポートとして追加&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eth0&lt;/code&gt; に &lt;code&gt;other-config:transient=true&lt;/code&gt; を設定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eth0&lt;/code&gt; の IP アドレスとルートを &lt;code&gt;breth0&lt;/code&gt; に移行&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// go-controller/pkg/util/nicstobridge.go (NicToBridge)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;stdout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;stderr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;RunOVSVsctl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s&#34;&gt;&amp;#34;--&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;--may-exist&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;add-br&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bridge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s&#34;&gt;&amp;#34;--&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;br-set-external-id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bridge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;bridge-id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bridge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s&#34;&gt;&amp;#34;--&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;br-set-external-id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bridge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;bridge-uplink&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;iface&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s&#34;&gt;&amp;#34;--&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;set&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;bridge&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bridge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;fail-mode=standalone&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Sprintf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;other_config:hwaddr=%s&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ifaceLink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;HardwareAddr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s&#34;&gt;&amp;#34;--&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;--may-exist&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;add-port&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bridge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;iface&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s&#34;&gt;&amp;#34;--&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;set&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;port&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;iface&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;other-config:transient=true&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ここでポイントになるのが &lt;strong&gt;&lt;code&gt;other-config:transient=true&lt;/code&gt;&lt;/strong&gt; です。
これは「このポートは一時的なものなので、OVS 再起動時に削除してよい」というマーカーです。&lt;/p&gt;
&lt;h3 id=&#34;正常な再起動フロー&#34;&gt;正常な再起動フロー&lt;/h3&gt;
&lt;p&gt;正常に機能する場合、以下のような流れでノード再起動後もネットワークが復旧します。&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  sequenceDiagram
    participant OVS as ovsdb-server
    participant NIC as eth0
    participant BR as breth0
    participant OVN as ovnkube-node

    Note over OVS: ノード再起動
    OVS-&amp;gt;&amp;gt;OVS: --delete-transient-ports で起動
    OVS-&amp;gt;&amp;gt;NIC: transient ポート(eth0)を削除
    Note over NIC: eth0 がブリッジから外れる
    NIC-&amp;gt;&amp;gt;NIC: systemd-networkd が IP を設定
    Note over NIC: eth0 経由で外部疎通が復旧
    OVN-&amp;gt;&amp;gt;OVN: API server に到達可能
    OVN-&amp;gt;&amp;gt;BR: NicToBridge() で eth0 を再接続
    Note over BR: breth0 に IP を移行して通常運用に復帰
&lt;/pre&gt;

&lt;h2 id=&#34;3-発生した問題&#34;&gt;3. 発生した問題&lt;/h2&gt;
&lt;p&gt;さて、ここからが本題です。
実際にノードを再起動すると、&lt;strong&gt;外部疎通が完全に断になってしまいました&lt;/strong&gt;。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
