0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KubeVirt/Harvesterで「bridgeなのに外部接続できない」問題をYAML編集で解決した話〜 pod network / Multus / VM Network の違いを理解する 〜

0
Last updated at Posted at 2026-05-06

はじめに

KubeVirt/Harvester 上で仮想アプライアンス(今回は Coriolis Appliance)を起動したところ、

  • VM は正常起動
  • bridge 接続
  • management Network 選択済み

にもかかわらず、外部PCからアクセスできない、という問題に遭遇しました。

最終的には、

networks:
  - pod: {}

を、

networks:
  - multus:
      networkName: default/custom

へ変更することで解決しました。

この記事では単なる「解決手順」だけでなく、

  • Harvester / KubeVirt のネットワーク構造
  • bridge と pod network の関係
  • なぜ UI だけでは分かりづらいのか

まで含めて整理します。


環境

  • Harvester
  • Coriolis Appliance
  • 自宅LAN: 192.168.11.0/24
  • Harvester Host: 192.168.11.8

発生した問題

VMコンソールを見ると:

IPv4 address for eth0: 10.52.0.79

となっていました。

しかし、自宅PC (192.168.11.x) から:

ping 10.52.0.79

は通らず、Web UI にもアクセスできません。


最初に疑ったこと

最初は、

  • アプライアンス側固定IP
  • cloud-init
  • DHCP設定ミス

などを疑いました。

しかし VM 内部を確認すると:

ip a
inet 10.52.0.79/32

さらに:

ip route

結果:

default via 169.254.1.1 dev eth0

ここで違和感がありました。


重要な気付き

169.254.x.x10.52.x.x は、家庭LANでは普通出てきません。

つまり VM は、

物理LANではなく
Kubernetes内部ネットワーク

へ接続されている可能性が高い。


VM YAML を確認

Harvester UI 上では、

  • management Network
  • bridge

に見えていました。

しかし YAML を確認すると:

          interfaces:
            - bridge: {}
              macAddress: (環境に固有のアドレス)
              model: virtio
              name: default

これは問題ありません。

しかし、

networks:
  - name: default
    pod: {}

となっていました。

ここが本質でした。


bridge = 物理LAN、ではない

これは KubeVirt 初学者が非常に混乱しやすいポイントです。

KubeVirt/Harvesterでは:

Interface と Network は別概念

です。

つまり:

bridge: {}

は、

「どのネットワークへbridgeするか」

を指定していません。

実際に接続先を決めるのは:

networks:

側です。


pod network とは?

pod: {}

は、

Kubernetes Pod Network

を意味します。

つまり VM は:

Kubernetes内部ネットワーク

に存在していた。

そのため:

  • 10.52.x.x
  • 169.254.1.1

になっていたわけです。


解決方法

Harvester で VM Network を作成しました。

image.png

image.png

image.png

その後 VM YAML を変更。

変更前:

networks:
  - name: default
    pod: {}

変更後:

networks:
  - multus:
      networkName: default/custom
    name: default

結果

VM起動後:

ip a

結果:

192.168.11.12

さらに:

https://192.168.11.12

へブラウザからアクセス成功。


なぜ UI では分かりづらかったのか

Harvester UI では、Netowork設定でTypeとして「bridge」を選択できます。

しかし内部的には:

  • pod network
  • multus network
  • bridge plugin

などが抽象化されています。

つまり UI の「bridge」だけでは、

本当に物理LANへ出ているか

は分からない。


一般化すると

今回の問題は Coriolis 固有というより、

KubeVirt / Harvester のネットワーク抽象化

に起因しています。

特に:

bridge にしたのに外部からアクセスできない

場合、

まず確認すべきは:

networks:
  - pod: {}

になっていないか、です。


学んだこと

VMware感覚を持ち込むと混乱する

VMware では:

NIC = Bridged

で完結します。

しかし KubeVirt は:

Interface
+
Network Attachment

の二層構造。


「bridge」は接続先ではない

重要。

bridge: {}

は:

「接続方式」

であり、

「どのネットワークに繋ぐか」

ではない。


pod network は内部ネットワーク

pod: {}

は外部LANではなく、

Kubernetes内部ネットワーク

です。


まとめ

Harvester/KubeVirtでは、

interfaces:

だけでなく、

networks:

を見る必要があります。

特に:

pod: {}

なのか、

multus:

なのかで、VM の世界が完全に変わります。

同じように、

  • bridge にしたのに繋がらない
  • 10.x.x.x が出る
  • 169.254.x.x gateway が出る

という場合は、

まず VM YAML を確認してみると解決が早いかもしれません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?