前々回の続きとなります。Deflectionまた、前回の内容が理解できていることを前提として記載します。DeflectionLXC/LXDコンテナは「LightweightなKVM」というイメージで使用しています。このため、コンテナのトラフィックをBridgeで外部ネットワークに流して使用する場合の設定方法を記載したいと思います。InstallWinおよびVMWare環境は以下の画像で確認してもらった方が良いかもしれません。前々回の記事に加えてNICを追加していますが、実際に使用するのはトータル3つです。具体的には以下の通りです。Interface設定方法は過去記事を参照ください。metonymical.hatenablog.comなお、ベアメタル環境でも同様に設定可能です。init時にDefaultで作成されています。Profileの設定よりコンテナ作成時にlxdbr0が使用されるように構成されています。lxdbr0はNATして外部ネットワークに接続されています。私の用途としては、コンテナ上でyumなどを行いたい場合のInternet接続用マネジメントインターフェースとして使用しています。KVMライクにLXC/LXDコンテナを使用したいので、今回行う設定は(1)~(2)となります。lxdbr30を作成し、コンテナlxc751を収容します。networkコマンドを使用して設定を行っていきます。前々回の続きという想定なので、lxc751というコンテナは既に作成済みという認識で進めます。流れというよりも、それぞれ別々の設定となります。~コマンドのみ~以下のコマンドを投入していきます。やりたいことが既に決まっている方は、構成図とコマンドの内容を見るだけでもよいと思います。物理インターフェースとBridgeインターフェースを1対1でアサインします。nonelxdbr30が作成され、物理インターフェースens34にもアタッチされました。コンテナに対してDHCPでIPアドレス割り当てを行うため、lxdbr30自身にもIPアドレスを設定しています。|+---------+---------+----------------------+----------------------------------------------+------------+-----------+lxdbr30にコンテナlxc751のeth1をアタッチし、コンテナのIP設定を行っています。その後コンテナを起動し、lxc751のeth1上でdhclientコマンドを実行しています。「コンテナのIP設定」と記載しましたが厳密には異なります。上記コマンドの場合、恒久設定ではないためコンテナ上で設定ファイルを作成します。/etc/sysconfig/network-scripts/ifcfg-eth1DEVICE=eth0BOOTPROTO=dhcpONBOOT=yesHOSTNAME=LXC_NAMENM_CONTROLLED=noTYPE=EthernetMTU=DHCP_HOSTNAME=`hostname`#コンテナのviが起動されるため、sed(:s/eth0/eth1/g)して保存(:wq)します。lxc751」によりコンテナ上でコマンドを実行できます。コピーして、DEVICE=eth1に書き換え、コンテナを再起動しています。listによりeth1のアドレスが取得できていればOKです。3.手動によるIP固定設定の場合やっていることは前項と同様です。何が異なるか?と言いますと、lxdbr30にIPアドレスを設定したくない場合を想定しています。具体的には、以下のような構成の場合です。コンテナlxc751からLBまで、LBからコンテナlxc752までをそれぞれ同一VLANとしたい場合、Bridgeインターフェース上でIPアドレスを設定してしまうと、ホストOS上のRoutingテーブルにlxdbr30とlxdbr31がconnectedで載ってきてしまうため、LBまで到達せずに内部で折り返してしまいます。net.ipv4.ip_forwardを無効にしてしまうと、今度はlxdbr0で稼働しているNAT+Routingが動作しなくなるため、lxdbr30にIPアドレスを設定せずに構成する方法を記載します。nonelxdbr30が作成され、物理インターフェースens34にもアタッチされました。lxdbr30自身にはIPアドレスが設定されていません。|+---------+---------+---------------------+----------------------------------------------+------------+-----------+lxdbr30にコンテナlxc751のeth1をアタッチしましたが、コンテナのIPは設定されていません。/etc/sysconfig/network-scripts/ifcfg-eth1DEVICE=eth0BOOTPROTO=dhcpONBOOT=yesHOSTNAME=LXC_NAMENM_CONTROLLED=noTYPE=EthernetMTU=DHCP_HOSTNAME=`hostname`#コンテナのviが起動されるため、sedで置換してIPとPrefixを追記して保存します。コピーして、DEVICE=eth1に書き換え、コンテナを再起動しています。listによりeth1のアドレスが表示されていればOKです。4.補足1:nmcliコマンドでBridgeを作成した場合nmcliコマンドでBridgeインターフェースを作成しても、lxc上で利用可能です。nmcliコマンドで作成した場合、lxdの管理下から外れるため、以下のようにMANAGED=NOとなります。|+---------+----------+---------+-------------+---------+nmcliでBridgeを作成した場合、LXDクラスタを組んだときなどに困りそうな予感はしていますが、もう少し検証してみようと思います。LXC/LXDのネットワーク周りの設定は以下の公式サイトに詳細が記載されています。https://lxd-ja.readthedocs.io/ja/latest/networks/5.補足2:PortForwarding設定コンテナ内のサービスを外部に公開したい場合、今回解説したBridgeの他に、Defaultで作成されるlxdbr0上でPortForwardingを行う方法があります。connect=tcp:localhost:80lxc751:コンテナ名httpd:任意の名前listen=tcp:0.0.0.0:80:ホスト側の待受けポート*2connect=tcp:localhost:80:コンテナ側(lxc751)の待受けポート以上です。6.最後に以下のサイトを参考にさせて頂きました。技術評論社LXC/LXDはコンテナ起動後、ちょいちょいいじりたい時に便利だなと思っています。「LightweightなKVM」とか「KVMライク」といった使い方が、私にはマッチしています。ちなみに、SR-IOVやCloud-initにも対応しているため、そちらの検証もやってみたいなと思います。*1:lxcコマンドでは、アサインではなく、アタッチという言葉を使っているため統一します。*2:IPはホストOSの物理インターフェースのIPアドレスにアクセスしてください。月別アーカイブはてなブログをはじめよう!metonymicalさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。