ステートレスセキュリティグループ#

本構成はFJcloud-O 東日本/西日本リージョン3向けとなります。

要求事項#

ステートレスセキュリティグループ(セキュリティグループ:以降「SG」と記載)は、以下のようなユースケースにおいて利用します。

  • IPCOMのロードバランサ機能と組み合わせたWebアクセスにおいて、より高いトランザクション性能(400TPS以上)を引き出したい
  • クライアント端末からの大量同時アクセス(10,000コネクション以上)を受け付けたい

対応するデザインパターン概要#

FJcloud-Oの東日本第3/西日本第3リージョンにおいては、以下2つのSGを選択できます。

  • stateful:true(ステートフルSG=デフォルト)
  • stateful:false(ステートレスSG=オプション)

ステートフルSGは要求した通信に対して戻りのルールが動的に生成されるもので、多くのクラウドやネットワークアプライアンスで利用されています。
ステートレスSGは動的に戻りのルールを生成しないため、戻りのルールを予め記載しておく必要がありますが、多数の通信が同時に利用される場合、以下のような性能上のメリットがあります。

  • ステートフルSGのように逆方向ルールを動的に生成/削除する必要がないため、ネットワーク上の負荷が比較的軽い

このため、より高いトランザクション性能が要求されるケースや、大量の同時アクセスのあるケースにおいて、特に性能改善が見込まれます。

実装サンプル#

構成例1:シンプルパターン#

シンプルなユースケースとなります。
image

上記構成に対応した、ステートフルSGとステートレスSGの実装サンプルは、以下のとおりです。
ステートレスSGを指定する場合は、APIから設定してください。(ポータル操作では実行できません)
SGに関するグループの作成、ルールの編集については、APIリファレンスをご覧ください。

「SG_WEB_external」を ステートフルSG(stateful:true) で設定する場合

方向 ポートレンジmax ポートレンジmin プロトコル セキュリティグループまたはCIDR ethertype
受信 80 80 tcp 0.0.0.0/0 IPv4

「SG_WEB_external」を ステートレスSG(stateful:false)で設定する場合

方向 ポートレンジmax ポートレンジmin プロトコル セキュリティグループまたはCIDR ethertype
受信 80 80 tcp 0.0.0.0/0 IPv4
送信 65535 1 tcp 0.0.0.0/0 IPv4

Note

クライアント側の送信元ポートで何が使われるか不明の場合、全ポート指定(1~65535)を推奨します。

構成例2:ロードバランサーによる負荷分散パターン#

IPCOMを含んだ構成となります。
IPCOMの設定については、IPCOMスタートガイドをご覧ください。

image

FJcloud-O上でIPCOMを利用する場合、例外的にステートフルSG・ステートレスSGとも双方向の設定になります。
このため、IPCOMに関する部分はステートフルSG・ステートレスSGともにルール数は変わりません。

「SG_LB」を ステートフルSG(stateful:true) で設定する場合

方向 ポートレンジmax ポートレンジmin プロトコル セキュリティグループまたはCIDR ethertype
送信 Null Null Null ::/0 IPv6
送信 Null Null Null 0.0.0.0/0 IPv4
受信 Null Null icmp 0.0.0.0/0 IPv4
受信 65535 1 tcp 0.0.0.0/0 IPv4
受信 65535 1 udp 0.0.0.0/0 IPv4
受信 Null Null 112(VRRP) 0.0.0.0/0 IPv4

「SG_LB」を ステートレスSG(stateful:false)で設定する場合

方向 ポートレンジmax ポートレンジmin プロトコル セキュリティグループまたはCIDR ethertype
送信 Null Null Null ::/0 IPv6
送信 Null Null Null 0.0.0.0/0 IPv4
受信 Null Null icmp 0.0.0.0/0 IPv4
受信 65535 1 tcp 0.0.0.0/0 IPv4
受信 65535 1 udp 0.0.0.0/0 IPv4
受信 Null Null 112(VRRP) 0.0.0.0/0 IPv4

「SG WEB internal」は、負荷分散対象仮想サーバ向け通信の送信元IPアドレスをIPCOMのIPアドレスに変換する設定例(src-napt)となります。

「SG WEB internal」を ステートフルSG(stateful:true) で設定する場合

方向 ポートレンジmax ポートレンジmin プロトコル セキュリティグループまたはCIDR ethertype
受信 80 80 tcp 192.168.10.10/32 IPv4

「SG WEB internal」を ステートレスSG(stateful:false)で設定する場合

方向 ポートレンジmax ポートレンジmin プロトコル セキュリティグループまたはCIDR ethertype受信
受信 80 80 tcp 192.168.10.10/32 IPv4
送信 65535 1 tcp 192.168.10.10/32 IPv4

Note

IPCOM(192.168.10.10)へ戻る通信も、送信ポートを特定できないため、1~65535を指定しています。

メリット・効果#

ステートレスSGを使用した場合、ステートフルSGに比べて以下のようなメリットがあります。

  • より高いトランザクション性能を出せる
  • より多くのコネクション(対地間接続、同時アクセス)を可能にする

それぞれのメリット・デメリットは以下のとおりです

ステートフル ステートレス
メリット ・SGルール数を減らせる
・戻りの通信の記述が不要なため分かりやすい
・ポータル、APIともに設定可能
・ステートフルが持つ性能上のボトルネックを回避できる
デメリット ・通信量が多い場合、性能面でボトルネックになる可能性がある ・行きと戻り双方向のルールを常に記載するため、管理が煩雑
・ステートフルに対して単純にルール数が2倍になるため、設定上限数を気にする必要あり
・ポータル上で設定不可(2020年9月時点)、APIのみ設定可能

注意事項#

  • 本パターンは、2020年9月時点のFJcloud-O 東日本/西日本リージョン3検証環境で動作検証しています。

  • ステートレスとステートフルのSGを同時に設定しないでください。FJcloud-O内に構築された同一システム内(=同一プロジェクト内)ではどちらかのSGに統一してください。 同時に設定した場合、ステートレスとステートフルのルール適用順序が保証されません。

  • FJcloud-Oの他システム(=別プロジェクト)、およびFJcloud-O以外のシステムと連携する場合、他システム側のSGがステートフルかステートレスかは影響しません。

  • ステートレスSGの場合、EgressとIngressのルールを両方記述する必要があります。SGの上限値を超えないようご注意ください。
    東日本/西日本リージョン3における、1プロジェクトあたりのセキュリティグループルール数の上限値はデフォルト100となります。
    上限の値が問題になりそうな場合は、ヘルプデスクまでご相談ください。
    ステートレスSGの場合、逆方向ルールを動的に生成できず予め記載しておくことになるため、ファイアーウォールで保護された環境か、インターネット接続のないプライベート空間での使用が前提 となります。

その他#

検証時の構成例#

2020年6月時点のFJcloud-O 検証環境で性能測定した例となります。

  • 疑似Internet環境にて、TPS性能測定を実施
  • 負荷試験機:JMeter
  • Load Balancer:IPCOM (フレーバ:C3-4)
  • Webサーバ:CentOS 7.3 (フレーバ:C3-4)
  • SGルール:構成例②に示したSGルールを踏襲

性能測定の構成例にて、SGルールをStatefulとStatelessに設定した際のTPS性能を比較した場合、Statefulに比べてStatelessにて3.5倍程度の性能向上が見込まれます。

image

  • コネクション数の算出方法
    仮想サーバあたり、送信IPアドレス×受信IPアドレス×送信ポート数×受信ポート数×プロトコル数の組み合わせ×VMにアタッチされているポート数 で算出します。