ネットワーク

Azure Service Fabric のクラスターを作成し、管理するときには、ノードとアプリケーションにネットワーク接続を提供します。 ネットワーク リソースには、IP アドレス範囲、仮想ネットワーク、ロード バランサー、およびネットワーク セキュリティ グループが含まれます。 この記事では、これらのリソースのベスト プラクティスについて学習します。

Azure の「Service Fabric のネットワーク パターン」を調べ直して、次の機能を使用するクラスターの作成方法を学びます。既存の仮想ネットワークまたはサブネット、静的パブリック IP アドレス、内部専用ロード バランサー、内部および外部ロード バランサー。

インフラストラクチャ ネットワーク

Resource Manager テンプレートで enableAcceleratedNetworking プロパティを宣言することにより、高速ネットワークでの仮想マシンのパフォーマンスを最大にします。高速ネットワークを有効にする、仮想マシン スケール セットの NetworkInterfaceConfigurations のスニペットを次に示します。

"networkInterfaceConfigurations": [
  {
    "name": "[concat(variables('nicName'), '-0')]",
    "properties": {
      "enableAcceleratedNetworking": true,
      "ipConfigurations": [
        {
        <snip>
        }
      ],
      "primary": true
    }
  }
]

Service Fabric クラスターは、高速ネットワークを導入した Linux高速ネットワークを導入した Windows でプロビジョニングできます。

高速ネットワークは、Azure 仮想マシン シリーズの次の SKU でサポートされています。D/DSv2、D/DSv3、E/ESv3、F/FS、FSv2、Ms/Mms。 高速ネットワークのテストは、Service Fabric Windows クラスターについては 2019 年 1 月 23 日に Standard_DS8_v3 SKU を使用して、Service Fabric Linux クラスターについては 2019 年 1 月 29 日に Standard_DS12_v2 を使用して、問題なく行われました。 高速ネットワークには 4 つ以上の vCPU が必要であることに注意してください。

既存の Service Fabric クラスターで高速ネットワークを有効にするには、最初に仮想マシン スケール セットを追加することで Service Fabric クラスターをスケールアウトして、次の手順を実行する必要があります。

  1. 高速ネットワークを有効にして 1 つの NodeType をプロビジョニングします
  2. 高速ネットワークを有効にしてプロビジョニングした NodeType に、サービスとその状態を移行します

所定の位置で高速ネットワークを有効にするとダウンタイムが発生するため、既存のクラスターで高速ネットワークを有効にするためには、インフラストラクチャのスケール アウトが必要です。可用性セット内のすべての仮想マシンは、任意の既存 NIC で高速ネットワークを有効にする前に停止し、割り当てを解除する必要があるためです。

クラスター ネットワーク

  • Service Fabric クラスターは、「Service Fabric のネットワーク パターン」で概要が説明されている手順に従って、既存の仮想ネットワークにデプロイできます。

  • クラスターの受信および送信トラフィックを制限するには、ノードの種類に対してネットワーク セキュリティ グループ (NSG) を使用することをお勧めします。 NSG で、必要なポートが開かれていることを確認します。

  • Service Fabric システム サービスを含むプライマリのノードの種類は、外部ロード バランサーを介して公開する必要はなく、内部ロード バランサーによって公開できます

  • お使いのクラスターには静的パブリック IP アドレスを使用します。

ネットワーク セキュリティの規則

次に説明するルールは、典型的な構成における推奨最小限のものです。 また、省略可能な規則が不要な場合のために、運用クラスターに必須の規則を記載しています。 ネットワーク ピアリングや Azure Bastion のようなジャンプボックスの概念による完全なセキュリティ ロックダウンが可能です。 必須のポートを開かなかったり、IP/URL を許可しなかったりすると、クラスターの適切な動作が妨げられ、サポートされない可能性があります。

着信

Priority 名前 [ポート] プロトコル ソース Destination (公開先) アクション Mandatory
3900 Azure portal 19080 TCP ServiceFabric Any Allow はい
3910 クライアント API 19000 TCP インターネット Any Allow いいえ
3920 SFX + クライアント API 19080 TCP インターネット Any Allow いいえ
3930 クラスター 1025-1027 TCP VirtualNetwork Any Allow はい
3940 エフェメラル 49152-65534 TCP VirtualNetwork Any Allow はい
3950 Application 20000-30000 TCP VirtualNetwork Any Allow はい
3960 RDP 3389 TCP インターネット Any 拒否 いいえ
3970 SSH 22 TCP インターネット Any 拒否 いいえ
3980 カスタム エンドポイント 443 TCP インターネット Any 拒否 いいえ

受信セキュリティ規則に関する詳細:

  • Azure Portal このポートは、クラスターに関する情報のクエリを実行し、Azure 管理ポータルに表示する際に Service Fabric リソース プロバイダーによって使われます。 Service Fabric リソース プロバイダーからこのポートにアクセスできない場合、"ノードが見つかりません" や "UpgradeServiceNotReachable" といったメッセージが Azure portal に表示され、ノードとアプリケーションの一覧には何も表示されません。 つまり、Azure の管理ポータルにクラスターが表示されるようにするには、ロード バランサーでパブリック IP アドレスが公開されており、NSG で受信 19080 トラフィックが許可されている必要があります。 このポートは、より高い信頼性を保証するための Service Fabric リソース プロバイダーからの拡張管理操作に推奨されます。

  • クライアント API。 PowerShell に使われる API のクライアント接続エンドポイント。

  • SFX + クライアント API。 このポートは、Service Fabric Explorer からクラスターを参照して管理するために使われます。 同様に、REST/PowerShell (Microsoft.ServiceFabric.PowerShell.Http)/CLI/.NET などの一般的な API でも使われます。

  • クラスター。 ノード間通信を使用します。

  • エフェメラル。 Service Fabric がこれらのポートの一部をアプリケーション ポートとして使用し、残りは OS に使用できます。 また、この範囲が OS にある既存の範囲にマップされるため、ここのサンプルで指定した範囲はあらゆる用途に使用できます。 開始ポートと終了ポートの差は 255 以上にしてください。 この範囲は OS と共有されるため、この差が小さすぎると競合が発生する場合があります。 構成されている動的ポート範囲を確認するには、netsh int ipv4 show dynamicport tcp を実行します。 これらのポートは、Linux クラスターの場合は必要ありません。

  • アプリケーション。 アプリケーション ポートの範囲は、アプリケーションのエンドポイント要求に対応できるように十分な大きさにする必要があります。 この範囲は、マシン上の動的なポートの範囲 (つまり、構成で設定されている ephemeralPorts の範囲) とは排他的である必要があります。 Service Fabric では、新しいポートが必要なときはこれらのポートが常に使用され、ノード上でこれらのポートに対してファイアウォールを開く処理が行われます。

  • RDP。 省略可能。ジャンプボックスのシナリオでインターネットまたは VirtualNetwork から RDP が必要な場合。

  • SSH。 省略可能。ジャンプボックスのシナリオでインターネットまたは VirtualNetwork から SSH が必要な場合。

  • カスタム エンドポイント。 アプリケーションでインターネット アクセス可能なエンドポイントを有効にする例。

Note

インターネットをソースとするほとんどの規則では、既知のネットワークに制限することを検討してください (理想的には、CIDR ブロックで定義します)。

送信

Priority 名前 [ポート] プロトコル ソース Destination (公開先) アクション Mandatory
4010 リソース プロバイダー 443 TCP Any ServiceFabric Allow はい
4020 バイナリのダウンロード 443 TCP Any AzureFrontDoor.FirstParty Allow はい

送信セキュリティ規則に関する詳細:

  • リソース プロバイダー。 ARM デプロイなどの管理操作や、シード ノードの選択やプライマリ ノードの種類のアップグレードのような必須の操作を受け取るための、UpgradeService と Service Fabric リソース プロバイダー間の接続。

  • バイナリのダウンロード。 バイナリの取得にアドレス download.microsoft.com を使用しているアップグレード サービス。このリレーションシップは、セットアップ、再イメージ化、およびランタイム アップグレードに必要です。 "内部専用" ロード バランサーのシナリオでは、ポート 443 での送信トラフィックを許可する規則を指定して、追加の外部ロード バランサーを追加する必要があります。 必要に応じて、セットアップが成功した後でこのポートをブロックできますが、その場合、アップグレード パッケージをノードに配布するか、短時間だけポートを開く必要があり、後で手動アップグレードが必要になります。

Azure Firewall と共に NSG フロー ログトラフィック分析を使って、接続の問題を追跡します。 Service Fabric と NSG の ARM テンプレートは、始めるのに適した例です。

Note

ノード間の通信を確保するため、既定のネットワーク セキュリティ規則を上書きしないようにする必要があります。 ネットワーク セキュリティ グループ - しくみ。 もう 1 つ例を挙げると、証明書失効リスト チェックを実行するには、ポート 80 での送信接続が必要です。

追加のルールを必要とする一般的なシナリオ

追加のシナリオはすべて Azure サービス タグでカバーできます。

Azure DevOps

Azure DevOps (サービス タグ: AzureCloud) の従来の PowerShell タスクでは、クラスターへのクライアント API アクセスが必要です。たとえば、アプリケーションのデプロイや運用タスクです。 これは、ARM アプリケーション リソースを含む ARM テンプレートのみのアプローチ には適用されません。

Priority 名前 [ポート] プロトコル ソース Destination (公開先) アクション 方向
3915 Azure DevOps 19000 TCP AzureCloud Any Allow 受信

Windows の更新

Windowsオペレーティングシステムにパッチを適用するためのベストプラクティスは、OSディスクを自動OSイメージアップグレードに置き換えることです。追加のルールは必要ありません。 パッチオーケストレーションアプリケーションは、Windows Updateがオペレーティングシステムパッチを適用するVM内アップグレードを管理しています。これには、更新バイナリをダウンロードするためにダウンロードセンター(サービスタグ:AzureUpdateDelivery)にアクセスする必要があります。

Priority 名前 [ポート] プロトコル ソース Destination (公開先) アクション 方向
4015 Windows の更新プログラム 443 TCP Any AzureUpdateDelivery Allow 送信

API Management

Azure API Management (サービスタグ: ApiManagement) の統合には、クラスターからエンドポイント情報を照会するためのクライアント API アクセスが必要です。

Priority 名前 [ポート] プロトコル ソース Destination (公開先) アクション 方向
3920 API Management 19080 TCP ApiManagement Any Allow 受信

アプリケーション ネットワーク

  • Windows コンテナー ワークロードを実行するには、Open ネットワーク モードを使用してサービス間の通信を容易にします。

  • TraefikService Fabric リバース プロキシなどのリバース プロキシを使用して、80 や 443 などの一般的なアプリケーション ポートを公開します。

  • Azure クラウド ストレージからベース レイヤーをプルできない、インターネットから物理的に隔離されたエアギャップ マシン上でホストされている Windows コンテナーでは、Docker デーモンの --allow-nondistributable-artifacts フラグを使用して、外部レイヤーの動作を上書きします。

次のステップ