[Ubuntu Server] Netplanで仮想ブリッジを作成し、LXCコンテナを外部NWに接続する
やりたいこと
macvlanのようにコンテナをL2レベルで露出させた上で、ホスト<->コンテナ間通信を自由に行いたい。
つまり、Hyper-VでいうところのExternal Switchを構成したい。VMwareでいうところの普通の仮想スイッチ。
もしも下記に該当する場合は他のやり方で。どちらも仮想ブリッジを挟まないため早い(らしい)です
- ホスト<->コンテナ間の通信が不要: macvlanを使う
- ホストマシンでSR-IOVが使える: SR-IOVを使う
やること
作成の段階でネットワークが切断されるので注意。直接コンソール接続できる環境でやるのが安心。
作業の流れは下記の通り
1.Netplanで仮想ブリッジを作成
2.仮想ブリッジにコンテナを接続
1.Netplanで仮想ブリッジを作成
Netplanの設定ファイルを/ect/netplan/99-config.yaml
として作成する。(ファイル名は任意でよいが、アルファベット順に参照されていくことに注意)
初期設定の00-installer-config.yaml
や50-cloud-init.yaml
は触らない。
network:
version: 2
ethernets:
eth0:
dhcp4: false
dhcp6: false
bridges:
br0:
dhcp4: true
dhcp6: true
interfaces:
- eth0
上記は、eth0
上に仮想ブリッジbr0
を作成し、DHCPでIPをもってくる場合の例。
ホストマシンに与えるIPアドレスは、仮想ブリッジデバイス側に設定する。[1]
ここでのIP取得はDHCPでやっているが、固定IPでももちろんよい。
特にSSH等でNW越しに作業している場合は固定IPのほうがいいかも(DHCPだとどのIPもらったか探さないといけない)
設定したら、下記のどちらかで適用
# 即時適用
$ sudo netplan apply
# または、tryを使うと、timeoutまでにEnterが押されなければ設定を巻き戻してくれる
# SSH接続の場合はセッション切れると対応できないので、tmux等と併用するのがよさそう
$ sudo netplan try --timeout 60
2.仮想ブリッジにコンテナを接続
まず、下記で仮想ブリッジにつなぐためのプロファイルを設定する。
defaultプロファイルに設定しているが、新規作成してもよい。
# ホストのbr0に接続し、コンテナにはeth0として見せる
$ lxc network attach-profile br0 default eth0
# ストレージプールを設定。NWとは関係ないですがプロファイルの設定として必要
$ lxc profile device add default root disk path=/ pool=default
完了したら、このプロファイルで好きなコンテナを起動する。
$ lxc launch images:almalinux/9 -p default
参考
-
https://gihyo.jp/admin/serial/01/linux_containers/0014#sec2_h2
- 作成方針としては上記 ただしbrctlを使わない
-
https://0sn.net/posts/20240121/ubuntu-netplan/
- ブリッジの作成方法としてはここを参考にした
-
https://qiita.com/zen3/items/757f96cbe522a9ad397d
- 書いてる途中に見つけた 作業内容は同じです
-
https://qiita.com/tabimoba/items/e5ea32c8359f0f9e0f3b
- ここも同じ
Discussion