web-dev-qa-db-ja.com

LXDコンテナーと静的IPを使用したネットワーク

私は長年にわたっていくつかのDockerテストを行ってきましたが、特定の種類のテストでは、アプリケーションコンテナーだけではなくもう少し必要です。それで私はLXC/LXDコンテナーに目を向けました、それは素晴らしいです。 LXDをインストールした後、私は自分のコンテナを作成しました:

>> [email protected]:/$ lxc launch images:centos/7/AMD64 thing Creating thing
Starting thing 
>> [email protected]:/$ lxc list
+-------+---------+------------------+------+------------+-----------+ 
| NAME  |  STATE  |       IPV4       | IPV6 |    TYPE    | SNAPSHOTS |
+-------+---------+------------------+------+------------+-----------+ 
| thing | RUNNING | 10.0.3.30 (eth0) |      | PERSISTENT |         0 |
+-------+---------+------------------+------+------------+-----------+

すごい。ここではIPアドレスを制御できないようです。私は(Googleの助けを借りて見つけて)制御ファイルを見つけました:

>> [email protected]:/# locate lxc.conf 
/etc/init/lxc.conf 
..
/var/log/lxd/thing/lxc.conf

静的IP4アドレス(のように見える)を置くことができます。コンテナーを再起動したときにのみ、ホストは静的IPを忘れてしまったようで、DHCPから取得します。質問:

  • これを行う正しい方法は何ですか(つまり、最新のDockerには--ipスイッチインdocker runはIPアドレスを設定します)?
6
Willem

これらの構成は、/var/lib/lxc/ContainerName/configファイルに配置されます。パラメータの可能な値は指定されています マニュアル内 。それらは、さまざまな領域、ホスト名、ネットワーク、コンソール、tty、マウントポイント、cgroup、機能などに関係します...

ネットワークの下で、必要なものがすべて見つかります。指定されていない変数に対して、適切な値が自動的に生成されます。あなたの質問に最も関連する部分は次のとおりです:

lxc.network.name

インターフェース名は動的に割り当てられますが、コンテナによって使用されている構成ファイルが総称名を使用するために別の名前が必要な場合は、たとえば、 eth0、このオプションはコンテナ内のインターフェースの名前を変更します。

lxc.network.hwaddr

インターフェイスのMACアドレスは、デフォルトで仮想インターフェイスに動的に割り当てられますが、場合によっては、MACアドレスの競合を解決するため、または常に同じリンクローカルipv6アドレスを持つために必要です。

lxc.network.ipv4

仮想化インターフェースに割り当てるipv4アドレスを指定します。複数の行で複数のipv4アドレスを指定しています。アドレスの形式はx.y.z.t/mです。たとえば、 192.168.1.123/24。ブロードキャストアドレスは、ipv4アドレスの直後の同じ行に指定する必要があります。

lxc.network.ipv4.gateway

コンテナー内のゲートウェイとして使用するipv4アドレスを指定します。アドレスの形式はx.y.z.tです。たとえば、 192.168.1.123。特別な値autoを持つこともできます。これは、(lxc.network.linkオプションで指定された)ブリッジインターフェイスからプライマリアドレスを取得し、それをゲートウェイとして使用することを意味します。 autoは、vethおよびmacvlanネットワークタイプを使用している場合にのみ使用できます。

2
MariusMatutiae

LXDでコンテナーのIPアドレスを指定する場合は、/etc/default/lxd-bridgeファイル。そこでは、外部のdnsmasq構成ファイルを含める場所があります。

あなたがUbuntu 16.04を使っていると仮定すると、

開く/etc/default/lxd-bridgeお好みのエディタで。 Sudoを使用する必要があります。

16行目あたりで

LXD_CONFILE=""

Dnsmasq構成ファイルを指すエントリを追加します。このファイルを作成する必要があります。だから、好きな名前を付けてください。何かのようなもの lxd_bridge.conf

次に、上記で名前を付けたファイルを作成して編集します。

特定のIPアドレスを割り当てるコンテナごとに行を追加します。

このような:

dhcp-Host=containername,ipaddress

次に、lxd-bridgeを再起動してからコンテナーを再起動する必要があります。

これに関する詳細な記事は次のとおりです。

LXD静的IP

コンテナでAlpine Linuxを実行している場合は、これを機能させるために追加の手順を実行する必要があることに注意してください。 アルパイン

5
Jason Trickett

システム情報:lxc-3.0.1Ubuntu Server 18.04.1

多くの検索の結果、静的IPをコンテナに割り当てる次の簡単なコマンドが見つかりました。

lxc config set [container] raw.lxc 'lxc.net.[i].ipv4.address = [ip]/[subnet-mask]'

ここで、[container][i][ip]および[subnet-mask]は、それぞれコンテナー名、ネットワークインターフェイス番号、目的の静的IPアドレス、および目的のサブネットマスクのCIDRです。

たとえば、helloという名前のコンテナの0番目のネットワークインターフェースに、サブネットマスク240.10.0.20を使用して255.255.255.0を割り当てる場合は、次のように使用できます。

lxc config set hello raw.lxc 'lxc.net.0.ipv4.address = 240.10.0.20/24'

コマンドを実行した後、おそらくコンテナを再起動する必要があります。

これはおそらくコンテナの現在のIPアドレスを変更しないことに注意してください(とにかく私のセットアップでは)。コンテナは、元のIPと新しく割り当てられたIPの両方で到達可能である必要があります。その結果、lxc listのコンテナエントリには複数のIPアドレスが含まれる可能性があります。

lxc.net.[i]に追加できる受け入れ可能な構成キーについては、 ここ を参照してください。この webpage には、CIDR表記に関する情報が含まれています。

残念ながら、このソリューションを最初に見つけた場所を思い出せません。これが関連する GitHubの問題 であり、有用な情報が含まれている可能性があります。

4
Mohamed Laradji

私は解決策を見つけました ここ

StéphaneGraberに感謝します。

見積もり:

「LXDマネージドブリッジで最新のLXDを実行している場合は、コンテナーのネットワークインターフェースでipv4.addressプロパティを設定するだけです。

  • lxcストップc1
  • lxcネットワーク接続lxdbr0 c1 eth0 eth0
  • lxc設定デバイスセットc1 eth0 ipv4.address 10.99.10.42
  • lxc開始c1

2
Dmitry Somov

静的IPアドレスをlxdコンテナーに割り当てる方法にまだ苦労している人のために。

私の最初の試みはdnsmasqを介してそれを行うことだったので、/var/lib/lxd/networks/lxdbr0/dnsmasq.hosts/<container>にコンテナーのIPアドレスを追加し、dnsmasqサービスを再ロードしました。それは実際には機能しましたが、ホストを再起動した後も持続しませんでした。

Lxdツールでそれを実現することは可能だと思いました。実際、それは lcd-doc で言及されました。コマンドlxc config set <container> user.network-config <value>を使用してキーuser.network-configを構成する方法を本当に知りませんでした。値の引数に複数のkey:valuesを挿入できなかったので。

  1. コンテナのサブネットを確認してください

    lxc network show lxdbr0
    
  2. fistは次の値でyml(network.yml)ファイルを作成します

    version: 1
    config:
      - type: physical
        name: eth1
        subnets:
          - type: static
            ipv4: true
            address: <ip>
            netmask: 255.255.255.0
            gateway: <gateway> // ends often with .1
            control: auto
      - type: nameserver
        address: 8.8.8.8       // for example
    
  3. このネットワーク構成でコンテナを作成します

    lxc launch ubuntu:18.04 test --config=user.network-config="$(cat network.yml)"    
    

voalá:)

コンテナ作成後にIPアドレスを変更してみた

   lxc config set <container> user.network-config "$(cat network.yml)"

コンテナーを再起動しましたが、IPが更新されませんでした。コンテナを作成した後、それを機能させる方法を知っている人がいれば、とても感謝しています。

lxdバージョン3.0.1

1
alixander