Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

第8章 基本的なネットワーク分離

本章では、標準的なネットワーク分離構成のオーバークラウドを設定する方法について説明します。これには、以下の項目が含まれます。

  • ネットワーク分離を有効にするための環境ファイル (/usr/openstack-tripleo-heat-templates/environments/network-isolation.yaml)
  • ネットワークのデフォルト値を設定するための環境ファイル (/usr/openstack-tripleo-heat-templates/environments/network-environment.yaml)
  • IP 範囲、サブネット、および仮想 IP 等のネットワーク設定を定義するための network_data ファイル。以下の例では、デフォルトのファイルをコピーし、それをご自分のネットワークに合わせて編集する方法について説明します。
  • 各ノードの NIC レイアウトを定義するためのテンプレート。オーバークラウドのコアテンプレートコレクションには、さまざまなユースケースに対応する複数のデフォルトが含まれています。
  • NIC を有効にするための環境ファイル。以下の例では、environments ディレクトリーにあるデフォルトファイルを用いています。
  • ネットワーク設定パラメーターをカスタマイズするその他の環境ファイル

本章の以下のセクションでは、これらの各項目を定義する方法を説明します。

8.1. ネットワーク分離

デフォルトでは、オーバークラウドはサービスをプロビジョニングネットワークに割り当てます。ただし、director はオーバークラウドのネットワークトラフィックを分離したネットワークに分割することができます。分離ネットワークを使用するために、オーバークラウドにはこの機能を有効にする環境ファイルが含まれています。director のコア Heat テンプレートの environments/network-isolation.j2.yaml ファイルは Jinja2 形式のファイルで、コンポーザブルネットワークファイル内の各ネットワークのポートおよび仮想 IP をすべて定義します。レンダリングすると、すべてのリソースレジストリーと共に network-isolation.yaml ファイルが同じ場所に生成されます。以下に例を示します。

resource_registry:
  # networks as defined in network_data.yaml
  OS::TripleO::Network::Storage: ../network/storage.yaml
  OS::TripleO::Network::StorageMgmt: ../network/storage_mgmt.yaml
  OS::TripleO::Network::InternalApi: ../network/internal_api.yaml
  OS::TripleO::Network::Tenant: ../network/tenant.yaml
  OS::TripleO::Network::External: ../network/external.yaml

  # Port assignments for the VIPs
  OS::TripleO::Network::Ports::StorageVipPort: ../network/ports/storage.yaml
  OS::TripleO::Network::Ports::StorageMgmtVipPort: ../network/ports/storage_mgmt.yaml
  OS::TripleO::Network::Ports::InternalApiVipPort: ../network/ports/internal_api.yaml
  OS::TripleO::Network::Ports::ExternalVipPort: ../network/ports/external.yaml
  OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/vip.yaml

  # Port assignments by role, edit role definition to assign networks to roles.
  # Port assignments for the Controller
  OS::TripleO::Controller::Ports::StoragePort: ../network/ports/storage.yaml
  OS::TripleO::Controller::Ports::StorageMgmtPort: ../network/ports/storage_mgmt.yaml
  OS::TripleO::Controller::Ports::InternalApiPort: ../network/ports/internal_api.yaml
  OS::TripleO::Controller::Ports::TenantPort: ../network/ports/tenant.yaml
  OS::TripleO::Controller::Ports::ExternalPort: ../network/ports/external.yaml

  # Port assignments for the Compute
  OS::TripleO::Compute::Ports::StoragePort: ../network/ports/storage.yaml
  OS::TripleO::Compute::Ports::InternalApiPort: ../network/ports/internal_api.yaml
  OS::TripleO::Compute::Ports::TenantPort: ../network/ports/tenant.yaml

  # Port assignments for the CephStorage
  OS::TripleO::CephStorage::Ports::StoragePort: ../network/ports/storage.yaml
  OS::TripleO::CephStorage::Ports::StorageMgmtPort: ../network/ports/storage_mgmt.yaml

このファイルの最初のセクションには、OS::TripleO::Network::* リソースのリソースレジストリーの宣言が含まれます。デフォルトでは、これらのリソースは、ネットワークを作成しない OS::Heat::None リソースタイプを使用します。これらのリソースを各ネットワークの YAML ファイルにリダイレクトすると、それらのネットワークの作成が可能となります。

次の数セクションで、各ロールのノードに IP アドレスを指定します。コントローラーノードでは、ネットワークごとに IP が指定されます。コンピュートノードとストレージノードは、ネットワークのサブネットでの IP が指定されます。

オーバークラウドネットワークのその他の機能 (「9章カスタムコンポーザブルネットワーク」および「10章カスタムネットワークインターフェーステンプレート」を参照) は、このネットワーク分離の環境ファイルに依存します。したがって、デプロイメントコマンドにレンダリングしたファイルの名前を含める必要があります。以下に例を示します。

$ openstack overcloud deploy --templates \
    ...
    -e /usr/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
    ...

8.2. 分離ネットワーク設定の変更

network_data ファイルで、デフォルトの分離ネットワーク設定を定義します。本手順では、カスタム network_data ファイルを作成し、そのファイルを希望のネットワークに応じて設定する方法について説明します。

手順

  1. デフォルトの network_data ファイルのコピーします。

    $ cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml /home/stack/.
  2. network_data.yaml ファイルのローカルコピーを編集し、ご自分のネットワーク要件に応じてパラメーターを変更します。たとえば、内部 API ネットワークには以下のデフォルトネットワーク情報が含まれます。

    - name: InternalApi
      name_lower: internal_api
      vip: true
      vlan: 201
      ip_subnet: '172.16.2.0/24'
      allocation_pools: [{'start': '172.16.2.4', 'end': '172.16.2.250'}]

各ネットワークについて、以下の項目を編集します。

  • vlan は、このネットワークに使用する VLAN ID を定義します。
  • ip_subnet および ip_allocation_pools は、ネットワークのデフォルトサブネットおよび IP 範囲を設定します。
  • gatewayは、ネットワークのゲートウェイを設定します。主に外部ネットワークのデフォルトルートを定義するために使用されますが、必要であれば他のネットワークに使用することもできます。

-n オプションを使用して、デプロイメントにカスタム network_data ファイルを含めます。-n オプションを設定しないと、デプロイメントコマンドはデフォルトのネットワーク情報を使用します。

8.3. ネットワークインターフェースのテンプレート

オーバークラウドのネットワーク設定には、ネットワークインターフェースのテンプレートセットが必要です。これらのテンプレートは YAML 形式の標準の Heat テンプレートです。director がロール内の各ノードを正しく設定できるように、それぞれのロールには NIC のテンプレートが必要です。

すべての NIC のテンプレートには、標準の Heat テンプレートと同じセクションが含まれています。

heat_template_version
使用する構文のバージョン
description
テンプレートを説明する文字列
parameters
テンプレートに追加するネットワークパラメーター
resources
parameters で定義したパラメーターを取得し、それらをネットワークの設定スクリプトに適用します。
outputs
設定に使用する最終スクリプトをレンダリングします。

/usr/share/openstack-tripleo-heat-templates/networking/config のデフォルト NIC テンプレートは、Jinja2 構文のメリットを生かしてテンプレートを容易にレンダリングします。たとえば、single-nic-vlans 設定からの以下のスニペットにより、各ネットワークの VLAN セットがレンダリングされます。

{%- for network in networks if network.enabled|default(true) and network.name in role.networks %}
- type: vlan
  vlan_id:
    get_param: {{network.name}}NetworkVlanID
  addresses:
  - ip_netmask:
      get_param: {{network.name}}IpSubnet
{%- if network.name in role.default_route_networks %}

デフォルトのコンピュートノードでは、Storage、Internal API、および Tenant ネットワークのネットワーク情報だけがレンダリングされます。

- type: vlan
  vlan_id:
    get_param: StorageNetworkVlanID
  device: bridge_name
  addresses:
  - ip_netmask:
      get_param: StorageIpSubnet
- type: vlan
  vlan_id:
    get_param: InternalApiNetworkVlanID
  device: bridge_name
  addresses:
  - ip_netmask:
      get_param: InternalApiIpSubnet
- type: vlan
  vlan_id:
    get_param: TenantNetworkVlanID
  device: bridge_name
  addresses:
  - ip_netmask:
      get_param: TenantIpSubnet

デフォルトの Jinja2 ベースのテンプレートを標準の YAML バージョンにレンダリングする方法は、「10章カスタムネットワークインターフェーステンプレート」で説明します。この YAML バージョンを、カスタマイズのベースとして使用することができます。

8.4. デフォルトのネットワークインターフェーステンプレート

director の /usr/share/openstack-tripleo-heat-templates/network/config/ には、ほとんどの標準的なネットワークシナリオに適するテンプレートが含まれています。以下の表は、各 NIC テンプレートセットおよびテンプレートを有効にするために使用する環境ファイルの概要をまとめたものです。

注記

NIC テンプレートを有効にするそれぞれの環境ファイルには、接尾辞 .j2.yaml が使われます。これはレンダリング前の Jinja2 バージョンです。デプロイメントには、接尾辞に .yaml だけが使われるレンダリング済みのファイル名を指定するようにしてください。

NIC ディレクトリー説明環境ファイル

single-nic-vlans

単一の NIC (nic1) がコントロールプレーンネットワークにアタッチされ、VLAN 経由でデフォルトの Open vSwitch ブリッジにアタッチされる。

environments/net-single-nic-with-vlans.j2.yaml

single-nic-linux-bridge-vlans

単一の NIC (nic1) がコントロールプレーンネットワークにアタッチされ、VLAN 経由でデフォルトの Linux ブリッジにアタッチされる。

environments/net-single-nic-linux-bridge-with-vlans

bond-with-vlans

コントロールプレーンネットワークが nic1 にアタッチされる。ボンディング構成の NIC (nic2 および nic3) が VLAN 経由でデフォルトの Open vSwitch ブリッジにアタッチされる。

environments/net-bond-with-vlans.yaml

multiple-nics

コントロールプレーンネットワークが nic1 にアタッチされる。それ以降の NIC は network_data ファイルで定義されるネットワークに割り当てられる。デフォルトでは、Storage が nic2 に、Storage Management が nic3 に、Internal API が nic4 に、Tenant が br-tenant ブリッジ上の nic5 に、External がデフォルトの Open vSwitch ブリッジ上の nic6 に割り当てられる。

environments/net-multiple-nics.yaml

注記

外部ネットワークを使用しないネットワーク用の環境ファイル (例: net-bond-with-vlans-no-external.yaml) や IPv6 を使用するネットワーク用の環境ファイル (例: net-bond-with-vlans-v6.yaml) も存在します。これらは後方互換のために提供されるもので、コンポーザブルネットワークでは機能しません。

それぞれのデフォルト NIC テンプレートセットには、role.role.j2.yaml テンプレートが含まれます。このファイルは、Jinja2 を使用して各コンポーザブルロールのファイルをさらにレンダリングします。たとえば、オーバークラウドで Compute、Controller、および Ceph Storage ロールが使用される場合には、デプロイメントにより、role.role.j2.yaml をベースに以下のようなテンプレートが新たにレンダリングされます。

  • compute.yaml
  • controller.yaml
  • ceph-storage.yaml.

8.5. 基本的なネットワーク分離の有効化

この手順では、デフォルト NIC テンプレートの 1 つを使用して基本的なネットワーク分離を有効にする方法について説明します。ここでは、単一 NIC および VLAN のテンプレート (single-nic-vlans) を用いています。

手順

  1. openstack overcloud deploy コマンドを実行する際に、以下に示すレンダリング済みの環境ファイル名を含めるようにしてください。

    • カスタム network_data ファイル
    • デフォルトネットワーク分離のレンダリング済みファイル名
    • デフォルトネットワーク環境ファイルのレンダリング済みファイル名
    • デフォルトネットワークインターフェース設定のレンダリング済みファイル名
    • 設定に必要なその他の環境ファイル

以下に例を示します。

$ openstack overcloud deploy --templates \
    ...
    -n /home/stack/network_data.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml \
    ...