Otama's Playground > サーバー > LXDの後継「Incus」を試す:インスタンスをホストネットワークに接続する

LXDの後継「Incus」を試す:インスタンスをホストネットワークに接続する

今回は、Incusで作成したインスタンスを、クラスタ内のネットワークではなく、ホスト側のネットワークに直接接続する方法をご紹介します。Netplanを使っていますが、Netplanでなくても基本的な手順は同じなので、応用も効くはずです。

前準備: bridgeネットワークを構成する

まずは、ホスト側にブリッジネットワークを設定します。

cloud-initを無効化する

Ubuntuを使っている場合、50-cloud-init.yamlというファイルがネットワーク設定の邪魔をすることがあります。これを無効化しておきます。Netplanを使っていない場合はスキップして大丈夫です。

Bash
sudo touch /etc/cloud/cloud-init.disabled
sudo rm /etc/netplan/50-cloud-init.yaml

bridge用の設定を書く

次に、ブリッジネットワークの設定ファイルを書いていきます。ここではbr0というブリッジネットワークを作成し、物理ネットワークデバイスのenp3s0をそのインターフェースとして使います。br0側に固定IPアドレスなどを設定します。

Bash
# /etc/netplan/01-config.yaml
network:
  version: 2
  ethernets:
    enp3s0:
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      dhcp4: false
      dhcp6: false
      interfaces: [enp3s0]
      addresses: [192.168.100.101/24]
      routes:
        - to: default
          via: 192.168.100.1
      nameservers:
        addresses: [192.168.100.1]
      parameters:
        stp: false
        forward-delay: 0

設定をapplyする

ここまでできたら、設定を適用します。コマンド実行後、ip aifconfigなどを使って、br0ネットワークデバイスがちゃんと構成されているか確認してみてください。ついでに、物理デバイスにIPアドレスが降ってきていないことも確認すると完璧です。

注: 設定を間違えると、リモートで接続できなくなる可能性があります。もしもの時のために、物理マシンにディスプレイを接続できる環境で作業することをおすすめします。

Bash
sudo chmod 600 /etc/netplan/01-config.yaml # rootユーザーでyamlを作らなかった場合
sudo netplan generate # 不要かも
sudo netplan apply

クラスタ内のサーバーに適用する

もしIncusをクラスタで構成しているなら、ブートストラップサーバー以外のサーバーにもbr0を作成する必要があります。クラスタ内のすべてのサーバーで、同じ手順を踏んでください。このとき、固定IPアドレスなどは適宜調整が必要です。

プロフィールにネットワークを設定

いよいよIncus側の設定です。先ほど作成したブリッジネットワーク(br0)を継承して、Incusのインスタンスがホストネットワークに接続できるように設定していきます。ネットワークからは現状できないようなので、プロフィールに直接設定を書き込んでいきます。

いくつかの参考スレッドを貼っておきます。

参考1: https://discuss.linuxcontainers.org/t/incus-cluster-network-issue/18650
参考2: https://discuss.linuxcontainers.org/t/attaching-instances-from-the-managed-bridge-network-to-the-host-bridge-network/21530/3
参考3: https://discuss.linuxcontainers.org/t/how-to-use-my-local-lan-instead-of-incus-network-ipv4-and-ipv6/21564/4
参考4: https://discuss.linuxcontainers.org/t/incus-container-bridge-issues/22128/3

CLIで設定する場合

プロフィールは任意ですが、ここではdefaultプロフィールに適用します。

Bash
incus profile device remove default eth0
incus profile device add default eth0 nic nictype=bridged parent=br0 name=eth0

GUIで設定する場合

IncusのGUIを使っている場合は、プロフィール編集画面の以下のトグルからYAMLの設定画面に移動できます。

ここでeth0の部分を以下のように変更してください。

インスタンスを作成します

いよいよインスタンスを作成する番です!先ほど設定したプロフィールを使って、新しいインスタンスを作成してみましょう。

インスタンスが起動したら、ip aなどでIPアドレスがちゃんと降ってきているか確認してみてください。もし設定したホストネットワークのIPアドレス範囲から取得できていれば、ほぼ成功です!喜びながら、pingも打ってみましょう。

補足: Cloud-Initで固定IPを割り振る

一例ですがUbuntu24.04のイメージを使用する場合、Cloud-Init設定内にあるNetwork Configを以下のように記述することでIPv4アドレスを固定可能です。

YAML
version: 2
ethernets:
  enp5s0:
    dhcp4: false
    dhcp6: true
    addresses:
      - 192.168.100.123/24 # 使用したいアドレス
    routes:
      - to: default
        via: 192.168.0.1 
    nameservers:
      addresses:
        - 192.168.0.1

最後に

今回はIncusのインスタンスをホスト側のネットワークに接続する方法をご紹介しました。クラスタのネットワークとは別に、直接ホストのネットワークにインスタンスを参加させたい場合に役立つ設定です。

ブリッジネットワークの設定、cloud-initの無効化、そしてIncusプロフィールの変更と、いくつかの手順を踏む必要がありましたが、うまくいって良かったです。

もしうまくいかない場合は、コメントいただければわかる範囲で回答します。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です