4664 Words

OpenStack Ussuri マニュアルインストールその9―起動編

Controller

  • Horizon ダッシュボードからポチポチやってもできるしわかりやすい気がする

ネットワーク作成

プロバイダネットワーク

OpenStack Docs: Provider network - Create the provider network

  1. admin環境スクリプトの読み込み

    $any user

    . admin-openrc
    
  2. プロバイダネットワーク作成

    $any user

    • flat (untagged なごくごく普通の)ネットワークの場合

      openstack network create  --share --external --provider-physical-network provider --provider-network-type flat provider
      
      • --provider-physical-network providerではOpenStack Ussuriマニュアルインストールその6―Neutron編/etc/neutron/plugins/ml2/ml2_conf.ini編集で設定したプロバイダネットワーク名を使用する
        • 例えば、複数 NIC に対してflat_networks = provider1,provider2,...network_vlan_ranges = provider1:<start Vlan ID>:<end Vlan ID>,provider2:<start Vlan ID>:<end Vlan ID>,...のように設定した場合は、providerではなくprovider1provider2…を指定する
      • 最後のproviderは作成するプロバイダネットワークの名前なので適宜変更してよい
    • VLAN ネットワークの場合

      openstack network create  --share --external --provider-physical-network provider --provider-network-type vlan --provider-segment VLAN_ID provider
      
      • --provider-physical-network providerではOpenStack Ussuriマニュアルインストールその6―Neutron編/etc/neutron/plugins/ml2/ml2_conf.ini編集で設定したプロバイダネットワーク名を使用する
        • 例えば、複数 NIC に対してflat_networks = provider1,provider2,...network_vlan_ranges = provider1:<start Vlan ID>:<end Vlan ID>,provider2:<start Vlan ID>:<end Vlan ID>,...のように設定した場合は、providerではなくprovider1provider2…を指定する
      • VLAN_IDは引き込みたい VLAN ID に書き換える
      • 最後のproviderは作成するプロバイダネットワークの名前なので適宜変更してよい
    • 出力は以下の感じ

      +---------------------------+--------------------------------------+
      | Field                     | Value                                |
      +---------------------------+--------------------------------------+
      | admin_state_up            | UP                                   |
      | availability_zone_hints   |                                      |
      | availability_zones        |                                      |
      | created_at                | 2017-03-14T14:37:39Z                 |
      | description               |                                      |
      | dns_domain                | None                                 |
      | id                        | 54adb94a-4dce-437f-a33b-e7e2e7648173 |
      | ipv4_address_scope        | None                                 |
      | ipv6_address_scope        | None                                 |
      | is_default                | None                                 |
      | mtu                       | 1500                                 |
      | name                      | provider                             |
      | port_security_enabled     | True                                 |
      | project_id                | 4c7f48f1da5b494faaa66713686a7707     |
      | provider:network_type     | flat                                 |
      | provider:physical_network | provider                             |
      | provider:segmentation_id  | None                                 |
      | qos_policy_id             | None                                 |
      | revision_number           | 3                                    |
      | router:external           | External                             |
      | segments                  | None                                 |
      | shared                    | True                                 |
      | status                    | ACTIVE                               |
      | subnets                   |                                      |
      | updated_at                | 2017-03-14T14:37:39Z                 |
      +---------------------------+--------------------------------------+
      
    • --externalオプションは外部ネットワーク(プロバイダネットワーク)の作成

    • OpenStack Ussuriマニュアルインストールその6―Neutron編で編集した /etc/neutron/plugins/ml2/ml2_conf.ini[ml2_type_flat][ml2_type_vlan]セクション、 /etc/neutron/plugins/ml2/linuxbridge_agent.iniの[linux_bridge]`セクションを読んで構成してくれるみたい

  3. サブネット作成

    $any user

    openstack subnet create \
        --network provider \
        --allocation-pool start=PROVIDER_START_IP,end=PROVIDER_END_IP \
        --dns-nameserver DNS_IP \
        --gateway PROVIDER_GATEWAY_IP \
        --subnet-range PROVIDER_SUBNET(CIDR) \
        provider
    
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | allocation_pools  | PROVIDER_START_IP-PROVIDER_END_IP    |
    | cidr              | PROVIDER_SUBNET(CIDR)                |
    | created_at        | 2017-03-29T05:48:29Z                 |
    | description       |                                      |
    | dns_nameservers   | DNS_IP                               |
    | enable_dhcp       | True                                 |
    | gateway_ip        | PROVIDER_GATEWAY_IP                  |
    | host_routes       |                                      |
    | id                | e84b4972-c7fc-4ce9-9742-fdc845196ac5 |
    | ip_version        | 4                                    |
    | ipv6_address_mode | None                                 |
    | ipv6_ra_mode      | None                                 |
    | name              | provider                             |
    | network_id        | 1f816a46-7c3f-4ccf-8bf3-fe0807ddff8d |
    | project_id        | 496efd248b0c46d3b80de60a309177b5     |
    | revision_number   | 2                                    |
    | segment_id        | None                                 |
    | service_types     |                                      |
    | subnetpool_id     | None                                 |
    | updated_at        | 2017-03-29T05:48:29Z                 |
    +-------------------+--------------------------------------+
    
    • 例えば、以下みたいな感じで作る

      openstack subnet create \
          --network provider \
          --allocation-pool start=172.16.100.1,end=172.16.100.255 \
          --dns-nameserver 1.1.1.1 \
          --gateway 172.16.0.1 \
          --subnet-range 172.16.0.0/16 \
          provider
      
    • --allocation-poolでは OpenStack が適当に割り当ててくれるプロバイダネットワークの IP アドレスの範囲を指定

    • --dns-nameserverは適当に好きなやつ


セルフサービスネットワーク

OpenStack Docs: Self-service network - Create the self-service network
OpenStack Docs: Self-service network - Create a router

  1. myuser環境スクリプトの読み込み

    $any user

    . demo-openrc
    
    • 当然adminプロジェクトに作ってもよいがドキュメントに倣う
    • セルフサービスネットワークはプロジェクトごとに作るのが普通だと思うのでadminプロジェクト以外にも作成可能なことを確認する意味も込めて
  2. セルフサービスネットワーク作成

    $any user

    openstack network create selfservice
    
    +-------------------------+--------------------------------------+
    | Field                   | Value                                |
    +-------------------------+--------------------------------------+
    | admin_state_up          | UP                                   |
    | availability_zone_hints |                                      |
    | availability_zones      |                                      |
    | created_at              | 2016-11-04T18:20:59Z                 |
    | description             |                                      |
    | headers                 |                                      |
    | id                      | 7c6f9b37-76b4-463e-98d8-27e5686ed083 |
    | ipv4_address_scope      | None                                 |
    | ipv6_address_scope      | None                                 |
    | mtu                     | 1450                                 |
    | name                    | selfservice                          |
    | port_security_enabled   | True                                 |
    | project_id              | 3828e7c22c5546e585f27b9eb5453788     |
    | project_id              | 3828e7c22c5546e585f27b9eb5453788     |
    | revision_number         | 3                                    |
    | router:external         | Internal                             |
    | shared                  | False                                |
    | status                  | ACTIVE                               |
    | subnets                 |                                      |
    | tags                    | []                                   |
    | updated_at              | 2016-11-04T18:20:59Z                 |
    +-------------------------+--------------------------------------+
    
    • 最後のselfserviceは作成するセルフサービスネットワークの名前なので適宜変更してよい
    • myuserに強い権限がないのでオプションは原則指定できないらしい
    • 自動的にOpenStack Ussuriマニュアルインストールその6―Neutron編で編集した /etc/neutron/plugins/ml2/ml2_conf.ini[ml2][ml2_type_vxlan]セクションを読んで構成してくれるらしい
  3. サブネット作成

    $any user

    openstack subnet create \
        --network selfservice \
        --dns-nameserver DNS_IP \
        --gateway SELF_SERVICE_GATEWAY_IP \
        --subnet-range SELF_SERVICE_SUBNET(CIDR) \
        selfservice
    
    +-------------------+-------------------------------------------+
    | Field             | Value                                     |
    +-------------------+-------------------------------------------+
    | allocation_pools  | SELF_SERVICE_START_IP-SELF_SERVICE_END_IP |
    | cidr              | SELF_SERVICE_SUBNET(CIDR)                 |
    | created_at        | 2016-11-04T18:30:54Z                      |
    | description       |                                           |
    | dns_nameservers   | DNS_IP                                    |
    | enable_dhcp       | True                                      |
    | gateway_ip        | SELF_SERVICE_GATEWAY_IP                   |
    | headers           |                                           |
    | host_routes       |                                           |
    | id                | 5c37348e-e7da-439b-8c23-2af47d93aee5      |
    | ip_version        | 4                                         |
    | ipv6_address_mode | None                                      |
    | ipv6_ra_mode      | None                                      |
    | name              | selfservice                               |
    | network_id        | b9273876-5946-4f02-a4da-838224a144e7      |
    | project_id        | 3828e7c22c5546e585f27b9eb5453788          |
    | project_id        | 3828e7c22c5546e585f27b9eb5453788          |
    | revision_number   | 2                                         |
    | service_types     | []                                        |
    | subnetpool_id     | None                                      |
    | updated_at        | 2016-11-04T18:30:54Z                      |
    +-------------------+-------------------------------------------+
    
    • 例えば、以下みたいな感じで作る

      openstack subnet create \
          --network selfservice \
          --dns-nameserver 1.1.1.1 \
          --gateway 10.0.0.1 \
          --subnet-range 10.0.0.0/24 \
          selfservice
      
      • allocation_poolsは自動的に設定され、上の例では10.0.0.2-10.0.0.254とかになるはず
    • 内部(NAT 越しのプライベートな)ネットワークなので、サブネットはプロバイダネットワークのサブネットと重ならないように自由に決めていいと思う

    • --dns-nameserverは適当に好きなやつ

  4. ルータ作成

    $any user

    openstack router create router
    
    +-------------------------+--------------------------------------+
    | Field                   | Value                                |
    +-------------------------+--------------------------------------+
    | admin_state_up          | UP                                   |
    | availability_zone_hints |                                      |
    | availability_zones      |                                      |
    | created_at              | 2016-11-04T18:32:56Z                 |
    | description             |                                      |
    | external_gateway_info   | null                                 |
    | flavor_id               | None                                 |
    | headers                 |                                      |
    | id                      | 67324374-396a-4db6-9443-c70be167a42b |
    | name                    | router                               |
    | project_id              | 3828e7c22c5546e585f27b9eb5453788     |
    | project_id              | 3828e7c22c5546e585f27b9eb5453788     |
    | revision_number         | 2                                    |
    | routes                  |                                      |
    | status                  | ACTIVE                               |
    | updated_at              | 2016-11-04T18:32:56Z                 |
    +-------------------------+--------------------------------------+
    
    • 最後のrouterは作成するルータの名前なので適宜変更してよい
    • プロバイダネットワークとセルフサービスネットワークをつなぐためのルータ作成
    • 通常は双方向 NAT の仮想ルータが用意される
  5. セルフサービスネットワークとルータを接続

    $any user

    openstack router add subnet router selfservice
    
  6. プロバイダネットワークとルータを接続

    $any user

    openstack router set router --external-gateway provider
    

動作確認

OpenStack Docs: Self-service network - Verify operation

  1. admin環境スクリプトの読み込み

    $any user

    . admin-openrc
    
  2. ネットワーク名前空間の一覧表示

    $any user

    ip netns
    
    qrouter-89dd2083-a160-4d75-ab3a-14239f01ea0b
    qdhcp-7c6f9b37-76b4-463e-98d8-27e5686ed083
    qdhcp-0e62efcd-8cee-46c7-b163-d8df05c3c5ad
    
    • qrouter1 つとqdhcp2 つがあるはず
      • ルータ 1 つとネットワーク 2 つ(プロバイダとセルフサービスを 1 つずつ)作ったので
  3. ルータのポート一覧表示

    $any user

    openstack port list --router router
    
    +--------------------------------------+------+-------------------+-------------------------------------------------------------------------------+--------+
    | ID                                   | Name | MAC Address       | Fixed IP Addresses                                                            | Status |
    +--------------------------------------+------+-------------------+-------------------------------------------------------------------------------+--------+
    | bff6605d-824c-41f9-b744-21d128fc86e1 |      | fa:16:3e:2f:34:9b | ip_address='10.0.0.1', subnet_id='3482f524-8bff-4871-80d4-5774c2730728'       | ACTIVE |
    | d6fe98db-ae01-42b0-a860-37b1661f5950 |      | fa:16:3e:e8:c1:41 | ip_address='172.16.100.xxx', subnet_id='5cc70da8-4ee7-4565-be53-b9c011fca011' | ACTIVE |
    +--------------------------------------+------+-------------------+-------------------------------------------------------------------------------+--------+
    
  4. ルータのプロバイダネットワーク側のゲートウェイ IP アドレス (172.16.100.xxx) への疎通確認
    コントローラノードまたは172.16.0.0/16サブネット内の任意のホストから

    $any user

    ping -c 4 172.16.100.xxx
    

フレーバー作成

OpenStack Docs: Launch an instance - Create m1.nano flavor

  • フレーバーは VM インスタンスに割り与えるリソース(VCPU の数やメモリ、ディスクサイズなど)のテンプレート
  • Cirros 検証用の小さいフレーバーを用意しておくとよい

$any user

openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
+----------------------------+---------+
| Field                      | Value   |
+----------------------------+---------+
| OS-FLV-DISABLED:disabled   | False   |
| OS-FLV-EXT-DATA:ephemeral  | 0       |
| disk                       | 1       |
| id                         | 0       |
| name                       | m1.nano |
| os-flavor-access:is_public | True    |
| properties                 |         |
| ram                        | 64      |
| rxtx_factor                | 1.0     |
| swap                       |         |
| vcpus                      | 1       |
+----------------------------+---------+
  • 最後のm1.nanoは作成するフレーバーの名前なので適宜変更してよい
  • 上記コマンドでは以下のテンプレートをm1.nanoフレーバーとして作成している
    Resource NameValue
    VCPU1
    RAM64M
    Disk1G

フレーバー例

OpenStack Docs: Manage flavors

  • OpenStack Mitaka 以前はデフォルトでフレーバーが生成されていたらしい

    FlavorVCPURAMDisk
    m1.tiny1512M1G
    m1.small12048M20G
    m1.medium24096M40G
    m1.large48192M80G
    m1.xlarge816384M160G
  • 環境や使いたい OS にあわせて作りましょう


SSH 鍵生成

OpenStack Docs: Launch an instance - Generate a key pair

  1. myuser環境スクリプトの読み込み

    $any user

    . demo-openrc
    
    • 当然adminプロジェクトに作ってもよいがドキュメントに倣う
    • プロジェクトごとに違う SSH 鍵を作るのが普通だと思うのでadminプロジェクト以外にも作成可能なことを確認する意味も込めて
  2. SSH 鍵生成・登録

    $any user

    ssh-keygen -q -N ""
    openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
    
    +-------------+-------------------------------------------------+
    | Field       | Value                                           |
    +-------------+-------------------------------------------------+
    | fingerprint | ee:3d:2e:97:d4:e2:6a:54:6d:0d:ce:43:39:2c:ba:4d |
    | name        | mykey                                           |
    | user_id     | 58126687cbcc4888bfa9ab73a2256f27                |
    +-------------+-------------------------------------------------+
    
    • 最後のmykeyは作成する鍵の名前なので適宜変更してよい
    • 検証用にコントローラノードで鍵を生成しているが、当然自分が普段作っている鍵を登録してもよい
    • というか自分の鍵を登録したほうがいいと思う
  3. 確認

    $any user

    openstack keypair list
    
    +-------+-------------------------------------------------+
    | Name  | Fingerprint                                     |
    +-------+-------------------------------------------------+
    | mykey | ee:3d:2e:97:d4:e2:6a:54:6d:0d:ce:43:39:2c:ba:4d |
    +-------+-------------------------------------------------+
    

セキュリティグループのルール

OpenStack Docs: Launch an instance - Add security group rules

  • defaultセキュリティグループではインスタンスへのリモートアクセスを拒否するようにファイアウォールが構成されている
    • なんらかのサービスを試して疎通が取れないときはここが原因のことが多い(個人の感想)
  • 今回は ICMP、SSH だけ許可しておく
  • Web サーバとか試すなら http (80), https (443)をあけ忘れないように
  1. myuser環境スクリプトの読み込み

    $any user

    . demo-openrc
    
    • 当然adminプロジェクトに作ってもよいがドキュメントに倣う
    • プロジェクトごとに違うセキュリティグループのルールを作るのが普通だと思うのでadminプロジェクト以外にも作成可能なことを確認する意味も込めて
  2. ICMP 許可

    $any user

    openstack security group rule create --proto icmp default
    
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | created_at        | 2017-03-30T00:46:43Z                 |
    | description       |                                      |
    | direction         | ingress                              |
    | ether_type        | IPv4                                 |
    | id                | 1946be19-54ab-4056-90fb-4ba606f19e66 |
    | name              | None                                 |
    | port_range_max    | None                                 |
    | port_range_min    | None                                 |
    | project_id        | 3f714c72aed7442681cbfa895f4a68d3     |
    | protocol          | icmp                                 |
    | remote_group_id   | None                                 |
    | remote_ip_prefix  | 0.0.0.0/0                            |
    | revision_number   | 1                                    |
    | security_group_id | 89ff5c84-e3d1-46bb-b149-e621689f0696 |
    | updated_at        | 2017-03-30T00:46:43Z                 |
    +-------------------+--------------------------------------+
    
  3. SSH 許可

    $any user

    openstack security group rule create --proto tcp --dst-port 22 default
    
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | created_at        | 2017-03-30T00:43:35Z                 |
    | description       |                                      |
    | direction         | ingress                              |
    | ether_type        | IPv4                                 |
    | id                | 42bc2388-ae1a-4208-919b-10cf0f92bc1c |
    | name              | None                                 |
    | port_range_max    | 22                                   |
    | port_range_min    | 22                                   |
    | project_id        | 3f714c72aed7442681cbfa895f4a68d3     |
    | protocol          | tcp                                  |
    | remote_group_id   | None                                 |
    | remote_ip_prefix  | 0.0.0.0/0                            |
    | revision_number   | 1                                    |
    | security_group_id | 89ff5c84-e3d1-46bb-b149-e621689f0696 |
    | updated_at        | 2017-03-30T00:43:35Z                 |
    +-------------------+--------------------------------------+
    

インスタンス起動

OpenStack Docs: Launch an instance on the provider network
OpenStack Docs: Launch an instance on the self-service network
OpenStack Docs: Block Storage
OpenStack Docs: Launch an instance from a volume

  • ドキュメントでは CLI ベースで書かれているが、Cinder ブロックストレージを有効化しているため CLI ベースでは結構コマンド数が多く面倒だったりする
  • 簡単に試すために Horizon ダッシュボードからポチポチやりましょう
    1. Horizon ダッシュボードにmyuserユーザでログイン
    2. プロバイダネットワーク、セルフサービスネットワーク上に Cirros VM をm1.nanoフレーバーで建てる

確認事項例

  • インスタンスのコンソールから VM にログインして内部から外に向けて ping 疎通ができること
  • インスタンスに外部から ping 疎通、SSH 接続ができること
    • セルフサービスネットワーク上の VM インスタンスには floating IP を設定することでプロバイダネットワークから ping や SSH が通るようになる

おわり

以上で起動編終了です
構築と簡単な起動テストは完了したので、あとは自由に試してみてください
お疲れ様でした

関連記事一覧