Ubuntu Weekly Recipe

第535回 LXD 3.0のネットワーク設定

この記事を読むのに必要な時間:およそ 7 分

標準のインターフェースeth0をカスタマイズする

eth0はdefaultプロファイルから継承されたデバイスです。このためlxc config deviceによる設定の変更が動作しない場合もあります。おおよそ「defaultプロファイルを継承しているすべてのコンテナで適用可能とは言えない設定」は,lxc config deviceが使えないと考えればいいでしょう。たとえばIPv4アドレスを指定するipv4.addressはプロファイルで設定できませんので,プロファイルから継承したデバイスに対するlxc config deviceは使えません。

もし,eth0をより柔軟に設定変更したいのであれば,次のいずれかの方法でeth0を明示的に設定する必要があります。

  1. defaultプロファイルをカスタマイズする
  2. default以外のプロファイルを作成し,それを適用する
  3. コンテナに対してeth0設定を上書きする

1.のdefaultプロファイルをカスタマイズする方法は,そのホスト上のすべてのコンテナに対して同じ設定を適用したい場合に便利です。ただしIPアドレスのようなコンテナ固有の設定は共有できません。2.の別のプロファイルを作る方法は,特定のコンテナ群のみdefault以外のプロファイルを適用する場合,もしくはdefaultプロファイルにいくつかの設定を上書きする場合に便利です。しかしながらIPアドレス云々の制約は1.と同じです。このため,コンテナ固有の設定を行いたいなら,3.の方法が現実的でしょう。

3.の方法において,eth0をlxdbr0に属するbridgedなインターフェースとして作るのであれば,固定IPアドレスを割り当てた時と手順は同じです。ただしattachする際にあらかじめコンテナを停止しておいたほうが良いでしょう。

$ lxc stop container
$ lxc network attach lxdbr0 container eth0
$ lxc config device set container eth0 ipv4.address 10.154.195.100
$ lxc start container

macvlanなインターフェースをeth0として作るのであれば,単純に「lxc config device add」をするだけです。明示的に「name=eth0」を指定しないと,eth1が作られてしまうので注意してください。

$ lxc config device add container eth1 nic nictype=macvlan parent=enp0s31f6
$ lxc exec container dhclient eth0

特定のアドレス・ポートを公開する

コンテナでbridgedインターフェースを使っている場合,コンテナからインターネット(ホストの外)へのアクセスは可能ではあるものの,インターネット(ホストの外)からアクセスはできません。これはコンテナで動かしているサービスを外部に公開したい場合に不便です。

LXD 2.0の頃はリバースプロキシーを用意したり,iptablesを使ってポートフォワーディングなどを手動で設定する必要がありましたが,LXD 3.0までに「proxy」デバイスが追加され,これを設定することでlxcコマンドから各種転送設定を行えるようになりました。

たとえばホストの80番ポート宛のアクセスを,すべてcontainerコンテナの8080番ポートに転送するには次のように設定します。

$ lxc config device add container port80 \
  proxy listen=tcp:0.0.0.0:80 connect=tcp:localhost:8080

「port80」は任意の設定名です。LXD自身はlistenで指定したアドレスとポート番号でbind()listen()を行い,ネットワークプロキシーとして振る舞い,connectで指定したアドレス・ポート番号に転送します。

proxyデバイスは次のコマンドで削除できます。

$ lxc config device remove container port80

なお,より新しいLXD 3.x系ではTCPだけでなく,UDPやUNIXソケットなどもサポートしているようです。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入