5499 Words

OpenStack Ussuri マニュアルインストールその6―Neutron 編

  • Neutron はネットワークを管理する
  • 複雑なネットワークを作りたいときは Open vSwitch プラグインを使うようだがドキュメントがあまり整っていない印象…
    • DevStack は Open vSwitch 使ってるみたいだった
  • 今回はドキュメントに載っている Linux Bridge ベースで構築する
  • ネットワークオプションが 2 種類ある
    1. プロバイダネットワークオンリー
    2. プロバイダネットワーク+セルフサービスネットワーク
    • プロバイダネットワークは NIC から引き込んでくるネットワーク
    • セルフサービスネットワークは NAT 越し(?)の内部ネットワーク
    • いろいろな機能を使いたかったらオプション 2 を選ぶべきということでオプション 2 で構築する

コントローラノード

OpenStack Docs: Install and configure controller node

Controller

  • コントローラノードには Neutron サーバやプラグイン、エージェントが一通り入る
  • ネットワークノードを分離する場合はコントローラノードには Neutron サーバやプラグインだけ入れることになると思うが分離の詳しい方法はわからないので調べてください

前提条件

OpenStack Docs: Install and configure controller node - Prerequisites

  1. Neutron をインストールする前にデータベースを作成する必要がある

    #root user

    mysql
    
    # 以下は`MariaDB [(none)]>`のプロンプトに入力する
    CREATE DATABASE neutron;
    GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
    GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
    
    • !Caution NEUTRON_DBPASSは適切なパスワードに書き換える
    • neutronデータベースの作成とアクセス権限の付与
    • ドキュメントでは一般ユーザでmysql -u root -pと書いてあるが、他のサービスのインストール手順と同じく root ユーザでmysqlに変える
  2. admin環境スクリプトの読み込み

    $any user

    . admin-openrc
    
  3. サービス資格情報

    • neutronユーザ作成

      $any user

      openstack user create --domain default --password-prompt neutron
      # 対話形式のパスワードプロンプトがでる
      User Password:
      Repeat User Password:
      
      +---------------------+----------------------------------+
      | Field               | Value                            |
      +---------------------+----------------------------------+
      | domain_id           | default                          |
      | enabled             | True                             |
      | id                  | fdb0f541e28141719b6a43c8944bf1fb |
      | name                | neutron                          |
      | options             | {}                               |
      | password_expires_at | None                             |
      +---------------------+----------------------------------+
      
      • !Caution パスワードプロンプトではNEUTRON_PASSを入力
    • serviceプロジェクト、neutronユーザにadminの役割を割り当てる

      $any user

      openstack role add --project service --user neutron admin
      
    • networkサービス (name: neutron) を作成

      $any user

      openstack service create --name neutron --description "OpenStack Networking" network
      
      +-------------+----------------------------------+
      | Field       | Value                            |
      +-------------+----------------------------------+
      | description | OpenStack Networking             |
      | enabled     | True                             |
      | id          | f71529314dab4a4d8eca427e701d209e |
      | name        | neutron                          |
      | type        | network                          |
      +-------------+----------------------------------+
      
  4. networkサービスに API エンドポイント作成

    $any user

    openstack endpoint create --region RegionOne network public http://controller:9696
    
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 85d80a6d02fc4b7683f611d7fc1493a3 |
    | interface    | public                           |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | f71529314dab4a4d8eca427e701d209e |
    | service_name | neutron                          |
    | service_type | network                          |
    | url          | http://controller:9696           |
    +--------------+----------------------------------+
    

    $any user

    openstack endpoint create --region RegionOne network internal http://controller:9696
    
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 09753b537ac74422a68d2d791cf3714f |
    | interface    | internal                         |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | f71529314dab4a4d8eca427e701d209e |
    | service_name | neutron                          |
    | service_type | network                          |
    | url          | http://controller:9696           |
    +--------------+----------------------------------+
    

    $any user

    openstack endpoint create --region RegionOne network admin http://controller:9696
    
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 1ee14289c9374dffb5db92a5c112fc4e |
    | interface    | admin                            |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | f71529314dab4a4d8eca427e701d209e |
    | service_name | neutron                          |
    | service_type | network                          |
    | url          | http://controller:9696           |
    +--------------+----------------------------------+
    
    • publicinternaladminにそれぞれ作成

Neutron インストール

  1. パッケージインストール

    OpenStack Docs: Networking Option 2: Self-service networks - Install the components

    #root user

    apt install \
        neutron-server \
        neutron-plugin-ml2 \
        neutron-linuxbridge-agent \
        neutron-l3-agent \
        neutron-dhcp-agent \
        neutron-metadata-agent
    
  2. /etc/neutron/neutron.conf編集(サーバの設定)

    OpenStack Docs: Networking Option 2: Self-service networks - Configure the server component

    [DEFAULT]
    # ...
    
    core_plugin = ml2
    service_plugins = router
    allow_overlapping_ips = true
    
    # `RABBIT_PASS`は適切なパスワードに書き換える
    transport_url = rabbit://openstack:RABBIT_PASS@controller
    
    # `keystone`を利用することを指定
    auth_strategy = keystone
    
    # ネットワークの変更をNovaに通知するための設定
    notify_nova_on_port_status_changes = true
    notify_nova_on_port_data_changes = true
    
    # ...
    
    [database]
    # 他のオプションはすべて削除またはコメントアウトする
    # `NEUTRON_DBPASS`は適切なパスワードに書き換える
    connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
    
    [keystone_authtoken]
    # 他のオプションはすべて削除またはコメントアウトする
    # `NEUTRON_PASS`は適切なパスワードに書き換える
    www_authenticate_uri = http://controller:5000
    auth_url = http://controller:5000
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = neutron
    password = NEUTRON_PASS
    
    [nova]
    # 他のオプションはすべて削除またはコメントアウトする
    # `NOVA_PASS`は適切なパスワードに書き換える
    auth_url = http://controller:5000
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    region_name = RegionOne
    project_name = service
    username = nova
    password = NOVA_PASS
    
    [oslo_concurrency]
    # ...
    lock_path = /var/lib/neutron/tmp
    
    # ...
    
    • !Caution RABBIT_PASSは適切なパスワードに書き換える
    • !Caution NEUTRON_DBPASSは適切なパスワードに書き換える
    • !Caution NEUTRON_PASSは適切なパスワードに書き換える
    • !Caution NOVA_DBPASSは適切なパスワードに書き換える
  3. /etc/neutron/plugins/ml2/ml2_conf.ini編集(L2 モジュールの設定)

    OpenStack Docs: Networking Option 2: Self-service networks - Configure the Modular Layer 2 (ML2) plug-in

    # ...
    
    [ml2]
    # ...
    
    # flat, VLAN, VXLANネットワークを有効化
    type_drivers = flat,vlan,vxlan
    
    # セルフサービスネットワーク上でVXLANを有効化
    tenant_network_types = vxlan
    
    # Linux BridgeとL2 Populationを有効化
    mechanism_drivers = linuxbridge,l2population
    
    # ポートセキュリティの拡張ドライバを有効化
    extension_drivers = port_security
    
    [ml2_type_flat]
    # ...
    # flatネットワークとしてプロバイダネットワークを指定する
    # (vlanネットワークを使う場合はここはコメントアウトする)
    # 複数NICがある場合は以下のようにカンマで列挙する
    # ex) flat_networks = provider1,provider2,...
    flat_networks = provider
    
    [ml2_type_vlan]
    # ...
    # vlanネットワークとしてプロバイダネットワークを指定する
    # (flatネットワークを使う場合はここはコメントアウトする)
    # 複数NICがある場合は以下のようにカンマで列挙する
    # ex) network_vlan_ranges = provider1:<start Vlan ID>:<end Vlan ID>,provider2:<start Vlan ID>:<end Vlan ID>,...
    # `:<start Vlan ID>:<end Vlan ID>`の部分を書かないと任意のVlan IDを引き込める
    # network_vlan_ranges = provider
    
    [ml2_type_vxlan]
    # ...
    # セルフサービスネットワーク上のVXLANの範囲
    vni_ranges = 1:1000
    
    [securitygroup]
    # ...
    # ipsetを有効化(セキュリティグループルールの効率を高めるためらしい)
    enable_ipset = true
    
    # ...
    
  4. /etc/neutron/plugins/ml2/linuxbridge_agent.ini編集(Linux Bridge エージェントの設定)

    OpenStack Docs: Networking Option 2: Self-service networks - Configure the Linux bridge agent

    # ...
    
    [linux_bridge]
    # `/etc/neutron/plugins/ml2/ml2_conf.ini`の[ml2_type_flat]または[ml2_type_vlan]で書いたもので記述する
    # `PROVIDER_INTERFACE_NAME`はプロバイダネットワークのインターフェース名に書き換える(ethxxとか、ensxxみたいな感じ)
    # 複数ある場合は以下のようにカンマで列挙する
    # ex) physical_interface_mappings = provider1:PROVIDER_INTERFACE_NAME1,provider2:PROVIDER_INTERFACE_NAME2,...
    physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
    
    [vxlan]
    # ex) local_ip = 192.168.0.11
    enable_vxlan = true
    local_ip = CONTROLLER_MANAGEMENT_IP
    l2_population = true
    
    [securitygroup]
    # ...
    enable_security_group = true
    
    # Linux Bridgeでセキュリティグループを有効化するにはiptablesのfirewallドライバを使用するらしい
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
    
    # ...
    
    • コントローラノードがネットワークブリッジフィルターが有効になっているか確認する

      #root user

      sysctl -a | grep net.bridge.bridge-nf-call-ip
      
      net.bridge.bridge-nf-call-ip6tables = 1
      net.bridge.bridge-nf-call-iptables = 1
      ...
      
      • これらの値が1なら OK
      • 有効になってない場合はbr_netfilterカーネルモジュールをロードすればよいらしい
  5. /etc/neutron/l3_agent.ini編集(L3 エージェントの設定)

    OpenStack Docs: Networking Option 2: Self-service networks - Configure the layer-3 agent

    [DEFAULT]
    # ...
    # インターフェースドライバにLinux Bridgeを設定
    interface_driver = linuxbridge
    
    # ...
    
  6. /etc/neutron/dhcp_agent.ini編集(DHCP エージェントの設定)

    OpenStack Docs: Networking Option 2: Self-service networks - Configure the DHCP agent

    [DEFAULT]
    # ...
    
    # インターフェースドライバにLinux Bridgeを設定
    interface_driver = linuxbridge
    
    # DHCPドライバにDNSMASQを設定
    dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
    
    # ネットワーク上のメタデータにアクセスできるように設定(?)
    enable_isolated_metadata = true
    
    # ...
    
  7. /etc/neutron/metadata_agent.ini編集(メタデータエージェントの設定)

    OpenStack Docs: Install and configure controller node - Configure the metadata agent

    • !Caution METADATA_SECRETは適切なパスワードに書き換える
  8. /etc/nova/nova.conf編集(Nova で Neutron ネットワークを使用するための設定)

    OpenStack Docs: Install and configure controller node - Configure the Compute service to use the Networking service

    • Nova インストール時に設定済み
  9. Neutron データベース同期

    OpenStack Docs: Install and configure controller node - Finalize installation

    #root user

    su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
    

コントローラノードのサービス再起動

OpenStack Docs: Install and configure controller node - Finalize installation

#root user

systemctl restart nova-api
systemctl restart neutron-server
systemctl restart neutron-linuxbridge-agent
systemctl restart neutron-dhcp-agent
systemctl restart neutron-metadata-agent
systemctl restart neutron-l3-agent

コンピュートノード

OpenStack Docs: Install and configure compute node

Compute

  • コンピュートノードには原則エージェントのみが入る
  • インスタンスのネットワーク接続やセキュリティグループの適応などを担う

Neutron エージェントインストール

  1. パッケージインストール

    OpenStack Docs: Install and configure compute node - Install the components

    #root user

    apt install neutron-linuxbridge-agent
    
  2. /etc/neutron/neutron.conf編集(サーバの設定)

    OpenStack Docs: Install and configure compute node - Configure the common component

    [DEFAULT]
    # ...
    
    # `RABBIT_PASS`は適切なパスワードに書き換える
    transport_url = rabbit://openstack:RABBIT_PASS@controller
    
    # `keystone`を利用することを指定
    auth_strategy = keystone
    
    # ...
    
    [database]
    # ...
    # コンピュートノードからデータベースに直接アクセスしないのでコメントアウトする
    # connection = ...
    
    [keystone_authtoken]
    # 他のオプションはすべて削除またはコメントアウトする
    # `NEUTRON_PASS`は適切なパスワードに書き換える
    www_authenticate_uri = http://controller:5000
    auth_url = http://controller:5000
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = neutron
    password = NEUTRON_PASS
    
    [oslo_concurrency]
    # ...
    lock_path = /var/lib/neutron/tmp
    
    # ...
    
    • !Caution RABBIT_PASSは適切なパスワードに書き換える
    • !Caution NEUTRON_PASSは適切なパスワードに書き換える
  3. /etc/neutron/plugins/ml2/linuxbridge_agent.ini編集(Linux Bridge エージェントの設定)

    OpenStack Docs: Networking Option 2: Self-service networks - Configure the Linux bridge agent

    # ...
    
    [linux_bridge]
    # コントローラノードの`/etc/neutron/plugins/ml2/ml2_conf.ini`の[ml2_type_flat]または[ml2_type_vlan]で書いたもので記述する
    # `PROVIDER_INTERFACE_NAME`はプロバイダネットワークのインターフェース名に書き換える(ethxxとか、ensxxみたいな感じ)
    # 複数ある場合は以下のようにカンマで列挙する
    # ex) physical_interface_mappings = provider1:PROVIDER_INTERFACE_NAME1,provider2:PROVIDER_INTERFACE_NAME2,...
    physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
    
    [vxlan]
    # ex) local_ip = 192.168.0.12
    enable_vxlan = true
    local_ip = COMPUTE_MANAGEMENT_IP
    l2_population = true
    
    [securitygroup]
    # ...
    enable_security_group = true
    
    # Linux Bridgeでセキュリティグループを有効化するにはiptablesのfirewallドライバを使用するらしい
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
    
    # ...
    
    • コントローラノードがネットワークブリッジフィルターが有効になっているか確認する

      #root user

      sysctl -a | grep net.bridge.bridge-nf-call-ip
      
      net.bridge.bridge-nf-call-ip6tables = 1
      net.bridge.bridge-nf-call-iptables = 1
      ...
      
      • これらの値が1なら OK
      • 有効になってない場合はbr_netfilterカーネルモジュールをロードすればよいらしい
  4. /etc/nova/nova.conf編集(Nova で Neutron ネットワークを使用するための設定)

    OpenStack Docs: Install and configure compute node - Configure the Compute service to use the Networking service

    • Nova インストール時に設定済み

コンピュートノードのサービス再起動

OpenStack Docs: Install and configure compute node - Finalize installation

#root user

systemctl restart nova-compute
systemctl restart neutron-linuxbridge-agent

動作確認

Controller

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

    OpenStack Docs: Verify operation

    $any user

    . admin-openrc
    
  2. ネットワーク拡張機能一覧を表示(Neutron Server の確認)

    OpenStack Docs: Verify operation

    $any user

    openstack extension list --network
    
    +---------------------------+---------------------------+----------------------------+
    | Name                      | Alias                     | Description                |
    +---------------------------+---------------------------+----------------------------+
    | Default Subnetpools       | default-subnetpools       | Provides ability to mark   |
    |                           |                           | and use a subnetpool as    |
    |                           |                           | the default                |
    | Availability Zone         | availability_zone         | The availability zone      |
    |                           |                           | extension.                 |
    | Network Availability Zone | network_availability_zone | Availability zone support  |
    |                           |                           | for network.               |
    | Port Binding              | binding                   | Expose port bindings of a  |
    |                           |                           | virtual port to external   |
    |                           |                           | application                |
    | agent                     | agent                     | The agent management       |
    |                           |                           | extension.                 |
    | Subnet Allocation         | subnet_allocation         | Enables allocation of      |
    |                           |                           | subnets from a subnet pool |
    | DHCP Agent Scheduler      | dhcp_agent_scheduler      | Schedule networks among    |
    |                           |                           | dhcp agents                |
    | Neutron external network  | external-net              | Adds external network      |
    |                           |                           | attribute to network       |
    |                           |                           | resource.                  |
    | Neutron Service Flavors   | flavors                   | Flavor specification for   |
    |                           |                           | Neutron advanced services  |
    | Network MTU               | net-mtu                   | Provides MTU attribute for |
    |                           |                           | a network resource.        |
    | Network IP Availability   | network-ip-availability   | Provides IP availability   |
    |                           |                           | data for each network and  |
    |                           |                           | subnet.                    |
    | Quota management support  | quotas                    | Expose functions for       |
    |                           |                           | quotas management per      |
    |                           |                           | tenant                     |
    | Provider Network          | provider                  | Expose mapping of virtual  |
    |                           |                           | networks to physical       |
    |                           |                           | networks                   |
    | Multi Provider Network    | multi-provider            | Expose mapping of virtual  |
    |                           |                           | networks to multiple       |
    |                           |                           | physical networks          |
    | Address scope             | address-scope             | Address scopes extension.  |
    | Subnet service types      | subnet-service-types      | Provides ability to set    |
    |                           |                           | the subnet service_types   |
    |                           |                           | field                      |
    | Resource timestamps       | standard-attr-timestamp   | Adds created_at and        |
    |                           |                           | updated_at fields to all   |
    |                           |                           | Neutron resources that     |
    |                           |                           | have Neutron standard      |
    |                           |                           | attributes.                |
    | Neutron Service Type      | service-type              | API for retrieving service |
    | Management                |                           | providers for Neutron      |
    |                           |                           | advanced services          |
    | resources: subnet,        |                           | more L2 and L3 resources.  |
    | subnetpool, port, router  |                           |                            |
    | Neutron Extra DHCP opts   | extra_dhcp_opt            | Extra options              |
    |                           |                           | configuration for DHCP.    |
    |                           |                           | For example PXE boot       |
    |                           |                           | options to DHCP clients    |
    |                           |                           | can be specified (e.g.     |
    |                           |                           | tftp-server, server-ip-    |
    |                           |                           | address, bootfile-name)    |
    | Resource revision numbers | standard-attr-revisions   | This extension will        |
    |                           |                           | display the revision       |
    |                           |                           | number of neutron          |
    |                           |                           | resources.                 |
    | Pagination support        | pagination                | Extension that indicates   |
    |                           |                           | that pagination is         |
    |                           |                           | enabled.                   |
    | Sorting support           | sorting                   | Extension that indicates   |
    |                           |                           | that sorting is enabled.   |
    | security-group            | security-group            | The security groups        |
    |                           |                           | extension.                 |
    | RBAC Policies             | rbac-policies             | Allows creation and        |
    |                           |                           | modification of policies   |
    |                           |                           | that control tenant access |
    |                           |                           | to resources.              |
    | standard-attr-description | standard-attr-description | Extension to add           |
    |                           |                           | descriptions to standard   |
    |                           |                           | attributes                 |
    | Port Security             | port-security             | Provides port security     |
    | Allowed Address Pairs     | allowed-address-pairs     | Provides allowed address   |
    |                           |                           | pairs                      |
    | project_id field enabled  | project-id                | Extension that indicates   |
    |                           |                           | that project_id field is   |
    |                           |                           | enabled.                   |
    +---------------------------+---------------------------+----------------------------+
    
  3. Neutron エージェント一覧を表示

    OpenStack Docs: Networking Option 2: Self-service networks

    $any user

    openstack network agent list
    
    +--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
    | ID                                   | Agent Type         | Host       | Availability Zone | Alive | State | Binary                    |
    +--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
    | f49a4b81-afd6-4b3d-b923-66c8f0517099 | Metadata agent     | controller | None              | True  | UP    | neutron-metadata-agent    |
    | 27eee952-a748-467b-bf71-941e89846a92 | Linux bridge agent | controller | None              | True  | UP    | neutron-linuxbridge-agent |
    | 08905043-5010-4b87-bba5-aedb1956e27a | Linux bridge agent | compute1   | None              | True  | UP    | neutron-linuxbridge-agent |
    | 830344ff-dc36-4956-84f4-067af667a0dc | L3 agent           | controller | nova              | True  | UP    | neutron-l3-agent          |
    | dd3644c9-1a3a-435a-9282-eb306b4b0391 | DHCP agent         | controller | nova              | True  | UP    | neutron-dhcp-agent        |
    +--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
    

OVN インストール

OpenStack Docs: OVN Install Documentation

  • Linux Bridge を使う場合はいらない気がしたので無視して終了

おわり

以上で Newtron 編終了です
お疲れ様でした

関連記事一覧