テナントネットワーク内に存在する複数のサブネットについて

1,750 views
Skip to first unread message

meromero

unread,
Jun 17, 2015, 4:10:49 AM6/17/15
to openst...@googlegroups.com

いつもお世話になっております。

Dashboard を入れて色々試しているのですが、
一つ理解できないところがありまして。。

以下のようなシンプルな構成です。




最初は、demo-net の下に 「192.168.100.0/24」 というサブネット一つがある状態で、
サブネットをもう一つ追加するとインスタンス作成時にサブネット選んで作れるのかな?って思って
コマンドで 「192.168.200.0/24」 サブネットを追加して、demo-router に接続しました。

それで、現在、上記のような画になっております。

ここで質問ですが、
インスタンス作成画面の 「ネットワーク」 タブでネットワークを選ぶ画面があると思います。
この画面でインスタンスが使うネットワークを選ぶわけですが、
選べるのは、サブネットではなく、ネットワーク単位でしか選べませんでした。

例えば、demo-subnet01 / demo-subnet02 とかじゃなくて
選べるのは、demo-net 。。。 みたいなネットワーク単位でした。

ネットワーク単位でしか選べないのは、正しい動きなんでしょうか。
サブネット単位でも選べるんだけど、現在の Dashboard では、サポートしていないだけなんでしょうか。。

確かに $ nova boot でインスタンス作成時に指定できるオプションに
テナントのネットワーク ID は指定できるんですけど、
サブネット ID は、指定できなかったので。。
私の認識・使い方が間違っているかもしれませんが。。

ご存知の方いらっしゃいましたら。。
教えてください~!

Naoto Gohko

unread,
Jun 17, 2015, 6:20:04 AM6/17/15
to openst...@googlegroups.com
郷古です。

あ、Dashboardでみてるんですね。

nova bootの時に、"--nic"オプションで、net-idを指定すると思いますが、さらにv4-fixed-ip という
オプションが見えるとおもいます。

使いたいsubnetの固定IPを直に指定すると、そのsubnetのIPがつくので、subnetを指定することと
同じになります。

L2分離の部分がネットワークIDの指定ですから、そのたとえばVLANの中に複数のセグメントを
格納している場合には、あとはNICに指定すれば使える状態になるってことになります。


subnetまで指定したい場合には、さきに、
neutron port-create --fixed-ip subnet_id=<subnet>,ip_address=<ipaddr> network_id
でVMインスタンスのportを作り、
(responseはport_id)

nova boot --nic port-id=<port_id> (opt)

で起動すると、指定のsubnetで指定のIPで起動することになります。

Dashboardでは、大雑把なnetwork_idの指定までということになりますね。
(見ないで書いていたりするので、ちがっていたらごめんなさい)
ただ、neutron port-createでportを先に作るっていうのは、細かい設定しようとするとでてきますね。


---
OpenStack UG CLI支部とか必要だろうか :)


2015年6月17日 17:10 meromero <ssmk...@gmail.com>:

--
このメールは Google グループのグループ「日本OpenStackユーザ会」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには openstack-ja...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
----
Naoto Gohko (chr...@gmail.com)

meromero

unread,
Jun 17, 2015, 10:44:52 PM6/17/15
to openst...@googlegroups.com
郷古さん

回答ありがとうございます。

基本的には、全てコマンドラインベースでやっているのですが、
環境を触れる人が私しかいなくて周りの人たちに OpenStack ってどんなものか見せるために
一応、Dashboard を入れてみました。

やっぱりコマンドラインベースが一番便利でしたけど、
予想はしていたのですが、やっぱり Dashboard って大雑把でしたね。
ちょっと凝ったことやろうとすると Dashboard じゃできないですね。。。

教えて頂いた nova boot に指定する「v4-fixed-ip」オプション試して見ました。

オプションとして固定 IP を指定するということは、
サブネット作成時にタイプを DHCP にしてはいけないってこと?かな?と思ったんですが、
試してみて、サブネットタイプが DHCP であっても固定 IP を指定できることが分かりました。

以下、試して動作すること確認しました。
$ neutron port-create --fixed-ip subnet_id=<subnet>,ip_address=<ipaddr> network_id
$ nova boot --nic port-id=xxxx ・・・

ポートして無しで、以下のようにしたらインスタンスにちゃんと割り当てできました。
$ nova boot --nic net-id=xxxx,v4-fixed-ip=192.168.100.111 ・・・
$ nova boot --nic net-id=xxxx,v4-fixed-ip=192.168.200.111 ・・・

本当は、固定 IP 指定ではなく、DHCP Pool から自動的に振られてほしかったのですが、
それは無理そうですね。。。

--nic net-id ではなくて --nic subnet-id みたいなオプションがあれば便利そうですけどね。。

固定 IP を振るってことは、ちゃんと IP アドレス管理できるように
何かしら仕組みを作らないと行けないですね。

色々使い方がありすぎて驚きました。

Naoto Gohko

unread,
Jun 18, 2015, 1:56:40 AM6/18/15
to openst...@googlegroups.com
郷古です。

できたということで何よりでした。

また、fixed-ipv4ですが、dhcp-agentにneutron port-create で生成されるNICのMAC ADDRESSと
指定されたIPを、dnsmasqd (dhcp-agentが使ってるdhcp server) がdhcp の固定IPとして割り振って
くれているはずです。

たしかに、nova boot でsubnet指定できると、CLI でたたくコマンドの数が減るので、
ありがたいのと、neutron は、未割り当てのIPがいまいちわかりづらいのが
ちょっとな~と思います。

私の認識では、neutron subnetの情報と、neutron port-list の使用済みIP 情報を合わせて見ないと、
未使用IPはわかりづらい感じがします。

IPAM(IP管理ツール)との連携みたいな話も、あったり(Contrail SDNの構成とか)なかったり
(Melange project (泣)) しますが、自分はある方が便利かもなと思います。




2015年6月18日 11:44 meromero <ssmk...@gmail.com>:

--
このメールは Google グループのグループ「日本OpenStackユーザ会」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには openstack-ja...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

meromero

unread,
Jun 18, 2015, 4:27:11 AM6/18/15
to openst...@googlegroups.com
郷古さん

そうですね。

他のツールとの連携もいいと思いますが、管理するものが増えるので
私としては、他のツールは、あまり入れたくないのが正直な気持ちですね。
(OpenStack を商用で使ったことがないので、連携したほうが良いか悪いか判断すらできないレベルですが。。)

DHCP の IP アドレス管理は、ネットワークノードでやってくれるので、
できるのであれば、IP アドレスの空きを調べるくらいなら内部で解決したいですね。。。

コントローラノードで rsh でネットワークノードの情報を持ってきて
煮るなり焼くなりすれば、シェル化して何とかなりそうな気もします。

controller$ neutron net-list
+--------------------------------------+----------+-------------------------------------------------------+
| id                                   | name     | subnets                                               |
+--------------------------------------+----------+-------------------------------------------------------+
| 0e32ae61-e5bf-495d-88ef-af57689d6109 | ext-net  | 87c94a63-0026-4ca5-a46b-291859899ed7 100.100.100.0/24 |
| c721e1a5-ffb9-49b4-b139-222eba1edabb | demo-net | 8238fce0-d42b-47db-a598-673d038d4899 192.168.200.0/24 |
|                                      |          | ce977aff-981e-47b5-b006-c3c7329db032 192.168.100.0/24 |
+--------------------------------------+----------+-------------------------------------------------------+

controller$ rsh -l hoge 100.100.100.100 ip netns
qdhcp-c721e1a5-ffb9-49b4-b139-222eba1edabb
qrouter-dc67c81c-5095-44c2-8f87-719720f21ca8

controller$ rsh -l hoge 100.100.100.100 cat /var/lib/neutron/dhcp/c721e1a5-ffb9-49b4-b139-222eba1edabb/host
fa:16:3e:e5:6a:12,host-192-168-100-1.openstacklocal,192.168.100.1
fa:16:3e:ce:7b:ba,host-192-168-100-2.openstacklocal,192.168.100.2
fa:16:3e:8b:80:f3,host-192-168-100-111.openstacklocal,192.168.100.111
fa:16:3e:6f:4f:5a,host-192-168-200-111.openstacklocal,192.168.200.111

色々と勉強になりました。

ありがとうございます~

Akihiro Motoki

unread,
Jun 18, 2015, 7:25:48 AM6/18/15
to openst...@googlegroups.com
元木です。

使用中のIPアドレスの一覧を取るのに、
network namespace の情報を見る必要はないと思います。

neutron port-list --network_id c721e1a5-ffb9-49b4-b139-222eba1edabb

を実行すると、ネットワークに属したポートの一覧が得られるので、
同じことが達成できると思います。

neutron port-list -f json --network_id xxxxx
とすると JSON 形式の出力が得られるので、
jq で加工したりもできます。

2015年6月18日 17:27 meromero <ssmk...@gmail.com>:

Naoto Gohko

unread,
Jun 18, 2015, 9:45:02 AM6/18/15
to openst...@googlegroups.com
元木さん


>> neutron port-list -f json --network_id xxxxx
>> とすると JSON 形式の出力が得られるので、
>> jq で加工したりもできます。

この部分結構衝撃を受けていますww
nova, glance, cinderとか、version違いのコマンドを叩いたりして。
俺のjunoで入れた neutron cliはjsonないじゃないかとか思ったりw

juno neutron CLIだと、csv, table(default)で、よくわからんcsvを出してくれていたので、
”-f json" でjqで取り出せるのは、shell scriptでちょっとやるには雲泥の差ですね。




2015年6月18日 20:25 Akihiro Motoki <amo...@gmail.com>:

meromero

unread,
Jun 18, 2015, 9:06:06 PM6/18/15
to openst...@googlegroups.com
元木さん, Naoto Gohko さん

neutron port-list --network_id c721e1a5-ffb9-49b4-b139-222eba1edabb

これいいですね!

知りませんでした。

特定ネットワークのポート一覧をピンポイントで取得できるのであれば、
使われてるポート・IP アドレスは、上記のコマンドで確認できるので、
namespace 情報を見る必要もないですね。

スッキリしました~

neutron help port-list しても
--network_id オプションは出てこなかったので、
こんな使い方ができるとは思ってもみませんでした。

出力ポーマットは、-f csv と -f table しか使えませんでした。
私の環境が、Juno + Neutron だから使えないんですかね・・・


$ neutron port-list -f json --network_id c721e1a5-ffb9-49b4-b139-222eba1edabb
usage: neutron port-list [-h] [-f {csv,table}] [-c COLUMN]
                         [--max-width <integer>]
                         [--quote {all,minimal,none,nonnumeric}]
                         [--request-format {json,xml}] [-D] [-F FIELD]
                         [-P SIZE] [--sort-key FIELD] [--sort-dir {asc,desc}]
neutron port-list: error: argument -f/--format: invalid choice: u'json' (choose from 'csv', 'table')


$ neutron port-list -f csv -c fixed_ips --network_id c721e1a5-ffb9-49b4-b139-222eba1edabb
"fixed_ips"
"{""subnet_id"": ""ce977aff-981e-47b5-b006-c3c7329db032"", ""ip_address"": ""192.168.100.111""}"
"{""subnet_id"": ""8238fce0-d42b-47db-a598-673d038d4899"", ""ip_address"": ""192.168.200.1""}"
"{""subnet_id"": ""8238fce0-d42b-47db-a598-673d038d4899"", ""ip_address"": ""192.168.200.111""}"
"{""subnet_id"": ""ce977aff-981e-47b5-b006-c3c7329db032"", ""ip_address"": ""192.168.100.1""}"
"{""subnet_id"": ""ce977aff-981e-47b5-b006-c3c7329db032"", ""ip_address"": ""192.168.100.2""}
{""subnet_id"": ""8238fce0-d42b-47db-a598-673d038d4899"", ""ip_address"": ""192.168.200.2""}"


json と jq の組合せができるのであれば、結構便利そうですね!

Reply all
Reply to author
Forward
0 new messages