Service function chain (SFC) essentially refers to the software-defined networking (SDN) version of policy-based routing (PBR). In many cases, SFC involves security, although it can include a variety of other features.
基本的には、 SFC は、宛先 IP アドレスを使ってパケットを転送する従来のルーティングではなく、パケットを 1 つ以上のサービス機能 (service function) 群を順に通過させます。サービス機能群は、本質的には、互いにケーブルで接続される物理ネットワークデバイスのつながりをエミュレートするものです。
SFC の基本的な例としては、パケットをある場所から別の場所へ、従来のルーティングで言うところの「ネクストホップ」 IP アドレスを持たないファイアウォールを経由して転送する例があります。もっと複雑な例としては、複数のサービス機能の列を順番に通すケースで、それぞれのサービス機能は複数のインスタンス (VM) を使って実装されているというものです。パケットは各ホップで必ず 1 つのインスタンスを経由し、複数のインスタンスがある場合は各ホップにおいてハッシュアルゴリズムを使ってそれらのインスタンスに分散されます。
すべての OpenStack Networking サービスと OpenStack Compute インスタンスは、ポートを経由して仮想ネットワークに接続されます。このため、ポートだけを使ってサービスチェイニング用のトラフィックステアリングのモデルを作成できます。ポートチェインにこれらのポートを含めることで、サービス機能を提供する 1 つ以上のインスタンスを経由するようにトラフィックをステアリングできます。
ポートチェイン、すなわちサービス機能パス、は以下から構成されます。
サービス機能がポートペアを持つ場合、最初のポートはサービス機能の入力ポートとして機能し、 2 つ目のポートは出力ポートとして機能します。両方のポートが同じ値の場合、これららは 1 つの双方向の仮想ポートとして動作します。
ポートチェインは単方向のサービスチェインです。最初のポートはサービス機能チェインの先頭となり、2 つ目のポートはサービス機能チェインの末尾となります。双方向のサービス機能チェインは 2 つの単方向のポートチェインで構成されます。
1 つの Flow Classifier が所属できるポートチェインは 1 つだけです。これは、フローのパケットをどのチェインが処理するかを判定する際の曖昧さを避けるためです。チェック機構があり、このような曖昧さを防止できます。一方で、複数の Flow Classifier を 1 つのポートチェインに関連付けできます。これは、複数のフローを同じサービス機能パスを通すためです。
現時点では、 SFC は、複数のプロジェクトに属するサービス機能を扱うことはできません。
ポートチェインプラグインは、OVS ドライバーや各種 SDN コントローラードライバーなど、さまざまなサービスプロバイダーに対応しています。共通ドライバー API により、それぞれのドライバーがサービスチェインパスの異なる方法で実装できるようになっています。
See the developer documentation for more information.
id
- ポートチェイン IDtenant_id
- プロジェクト IDname
- 分かりやすい名前description
- 分かりやすい説明port_pair_groups
- ポートペアグループ ID のリストflow_classifiers
- flow classifier ID のリストchain_parameters
- チェインパラメーターの dictポートチェインは、ポートペアグループの列で構成されます。各ポートペアグループは、そのポートチェインでの各ホップに対応します。ポートペアのグループは、等価な機能を提供するサービス機能を表現します。例えば、ファイアウォールのサービス機能のグループなどです。
Flow Classifier はフローを特定します。ポートチェインには複数の Flow Classifier を含めることができます。 Flow Classifier を指定しなかった場合、そのポートチェインによるトラフィックのステアリング (steering) は実際には行われません。
The chain_parameters
attribute contains one or more parameters for the
port chain. Currently, it only supports a correlation parameter that
defaults to mpls
for consistency with Open vSwitch (OVS)
capabilities. Future values for the correlation parameter may include
the network service header (NSH).
id
- ポートペアグループ IDtenant_id
- プロジェクト IDname
- 分かりやすい名前description
- 分かりやすい説明port_pairs
- サービス機能のポートペアのリストポートペアグループには、ポートペアが 1 つ以上含まれます。複数のポートペアを指定すると、機能的に等価なサービス機能集合間で負荷分散が行われます。
id
- ポートペア IDtenant_id
- プロジェクト IDname
- 分かりやすい名前description
- 分かりやすい説明ingress
- 入力ポートegress
- 出力ポートservice_function_parameters
- サービス機能パラメーターの dictポートペアは、入力ポートと出力ポートを持つサービス機能を表現します。入出力の両方向のポートを持つサービス機能の場合は、入力ポートと出力ポートとして同じポートを指定します。
service_function_parameters
属性は、サービス機能に関連するパラメーターが 1 つ以上含まれます。現時点では、パケットをチェインに関連付ける correlation (関連付け) パラメーターのみがサポートされています。 NSH などのチェインへの関連付けに対応していない従来のサービス機能では、このパラメーターのデフォルト値は none
になります。 none
に設定する場合、データプレーンの実装でサービス機能のプロキシー機能が提供されている必要があります。
id
- Flow Classifier IDtenant_id
- プロジェクト IDname
- 分かりやすい名前description
- 分かりやすい説明ethertype
- Ethernet タイプ (IPv4/IPv6)protocol
- IP プロトコルsource_port_range_min
- 送信元プロトコルポートの最小値source_port_range_max
- 送信元プロトコルポートの最大値destination_port_range_min
- 宛先プロトコルポートの最小値destination_port_range_max
- 宛先プロトコルポートの最大値source_ip_prefix
- 送信元 IP アドレスもしくはプレフィックスdestination_ip_prefix
- 宛先 IP アドレスもしくはプレフィックスlogical_source_port
- 送信元ポートlogical_destination_port
- 宛先ポートl7_parameters
- L7 パラメーターの dict“source” 関連の属性の組み合わせで、フローの入力元が定義されます。 “destination” 関連の属性の組み合わせで、フローの宛先が定義されます。 l7_parameters
属性は、URL などのレイヤー 7 のフィールドを使ったフロー分類をサポートする際に使用するための予約場所です。 logical_source_port
と logical_destination_port
属性は、指定されなかった場合はデフォルトで none``になります。 ``ethertype
属性のデフォルトは IPv4
で、それ以外の属性のデフォルト値はすべてワイルドカード値です。
The following example uses the neutron
command-line interface (CLI) to
create a port chain consisting of three service function instances to handle
HTTP (TCP) traffic flows from 192.0.2.11:1000 to 198.51.100.11:80.
注釈
サンプルのネットワーク net1
は、そのネットワークにポートを作成する前に存在している必要があります。
ネットワーク net1
を所有するプロジェクトの認証情報を読み込みます。
ネットワーク net1
にポートを作成し、その UUID 値を記録しておきます。
$ openstack port create p1 --network net1
$ openstack port create p2 --network net1
$ openstack port create p3 --network net1
$ openstack port create p4 --network net1
$ openstack port create p5 --network net1
$ openstack port create p6 --network net1
サービス機能インスタンス vm1
をポート p1
と p2
を使って作成します。 vm2
をポート p3
と p4
を使って作成します。 vm3
をポート p5
と p6
を使って作成します。
$ openstack server create --nic port-id=P1_ID --nic port-id=P2_ID vm1
$ openstack server create --nic port-id=P3_ID --nic port-id=P4_ID vm2
$ openstack server create --nic port-id=P5_ID --nic port-id=P6_ID vm3
P1_ID
, P2_ID
, P3_ID
, P4_ID
, P5_ID
, P6_ID
は、それぞれのポートの UUID に置き換えてください。
注釈
This command requires additional options to successfully launch an instance. See the CLI reference for more information.
ネットワークインターフェース 1 つで各インスタンスを起動し、後で追加のポートを接続することもできます。
必要なパケットヘッダーに一致する Flow Classifier FC1
を作成します。
$ neutron flow-classifier-create \
--description "HTTP traffic from 192.0.2.11 to 198.51.100.11" \
--ethertype IPv4 \
--source-ip-prefix 192.0.2.11/32 \
--destination-ip-prefix 198.51.100.11/32 \
--protocol tcp \
--source-port 1000:1000 \
--destination-port 80:80 FC1
ポート p1
と p2
でポートペア PP1
を作成します。同様に、ポート p3
と p4
でポートペア PP2
を、ポート p5
と p6
でポートペア PP3
を作成します。
$ neutron port-pair-create \
--description "Firewall SF instance 1" \
--ingress p1 \
--egress p2 PP1
$ neutron port-pair-create \
--description "Firewall SF instance 2" \
--ingress p3 \
--egress p4 PP2
$ neutron port-pair-create \
--description "IDS SF instance" \
--ingress p5 \
--egress p6 PP3
ポートペア PP1
と PP2
でポートペアグループ PPG1
を作成します。また、ポートペア PP3
でポートペアグループ PPG2
を作成します。
$ neutron port-pair-group-create \
--port-pair PP1 --port-pair PP2 PPG1
$ neutron port-pair-group-create \
--port-pair PP3 PPG2
注釈
--port-pair
オプションを複数指定することで、機能的に等価なサービス機能のポートペアを複数追加できます。
ポートペアグループ PPG1
, PPG2
と Flow Classifier FC1
を使って、ポートチェイン PC1
を作成します。
$ neutron port-chain-create \
--port-pair-group PPG1 --port-pair-group PPG2 \
--flow-classifier FC1 PC1
注釈
--port-pair-group
オプションを複数個指定することで、ポートチェインに追加のポートペアグループを指定できます。 1 つのポートチェインには、少なくとも 1 つポートペアグループを含める必要があります。
--flow-classifier
オプションを複数個指定することで、 1 つのポートチェインに複数の Flow Classifier を指定できます。各 Flow Classifier でフローが特定されます。
Use the neutron port-chain-update command to dynamically add or remove port pair groups or flow classifiers on a port chain.
例えば、ポートペアグループ PPG3
をポートチェイン PC1
に追加します。
$ neutron port-chain-update \
--port-pair-group PPG1 --port-pair-group PPG2 --port-pair-group PPG3 \
--flow-classifier FC1 PC1
例えば、 Flow Classifier FC2
をポートチェイン PC1
に追加します。
$ neutron port-chain-update \
--port-pair-group PPG1 --port-pair-group PPG2 \
--flow-classifier FC1 --flow-classifier FC2 PC1
SFC は、追加された Flow Classifier に一致したトラフィックを、ポートチェインのポートペアグループに転送します。
Use the neutron port-pair-group-update command to perform dynamic scale-out or scale-in operations by adding or removing port pairs on a port pair group.
$ neutron port-pair-group-update \
--port-pair PP1 --port-pair PP2 --port-pair PP4 PPG1
SFC は、ポートペアグループに新たに追加されたサービス機能に負荷の分散を行います。
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.