ロックダウンされたネットワークで動作する
CycleCloud アプリケーションノードとクラスター ノードは、インターネット アクセスが制限された環境で動作できますが、開いたままにする必要がある TCP ポートの数は最小限です。
ロックダウンされたネットワークへの Azure CycleCloud のインストール
CycleCloud VM は、クラスター VM を調整し、Azure Active Directory に対して認証するために、多数の Azure API に接続できる必要があります。 これらの API は HTTPS を使用するため、CycleCloud では次に対する送信 HTTPS アクセスが必要です。
- management.azure.com (Azure ARM 管理)
- login.microsoftonline.com (Azure AD)
- watson.telemetry.microsoft.com (Azure テレメトリ)
- dc.applicationinsights.azure.com (Azure アプリケーション Insights)
- dc.applicationinsights.microsoft.com (Azure アプリケーション Insights)
- dc.services.visualstudio.com (Azure アプリケーション Insights)
- ratecard.azure-api.net (Azure Price Data)
管理 API はリージョン別にホストされており、パブリック IP アドレスの範囲 については、こちらを参照してください。
Azure AD ログインは、Microsoft 365 の一般的な API の一部であり、サービスの IP アドレス範囲 については、こちらを参照してください。
Azure Insights と Log Analytics の IP アドレス範囲については、 こちらを参照してください。
Azure CycleCloud は、Azure Storage アカウントにアクセスできる必要があります。 このサービスとその他のサポートされている Azure サービスへのプライベート アクセスを提供する推奨される方法は、Virtual Networkサービス エンドポイントを介することです。
ネットワーク セキュリティ グループまたはAzure Firewallを使用して必要なドメインへの送信アクセスを制限する場合は、すべての要求を HTTPS プロキシ経由でルーティングするように Azure Cyclecloud を構成できます。 参照: Web プロキシの使用
CycleCloud VM の Azure ネットワーク セキュリティ グループの構成
Azure Firewallまたは HTTPS プロキシを構成せずに CycleCloud VM からの送信インターネット アクセスを制限する方法の 1 つは、CycleCloud VM のサブネット用に厳密な Azure ネットワーク セキュリティ グループを構成することです。 これを行う最も簡単な方法は、サブネットまたは VM レベルのネットワーク セキュリティ グループでサービス タグを使用して、必要な送信 Azure アクセスを許可することです。
CycleCloud から Azure Storage へのアクセスを許可するようにサブネットの ストレージ サービス エンドポイント を構成する
"インターネット" 宛先サービス タグを使用して、既定で送信アクセスを拒否するには、次の NSG 送信規則を追加します。
Priority | 名前 | Port | Protocol | ソース | 到着地 | アクション |
---|---|---|---|---|---|---|
4000 | BlockOutbound | Any | Any | Any | インターネット | 拒否 |
- 次の NSG 送信規則を追加して、宛先サービス タグによって必要な Azure サービスへの送信アクセスを 許可 します。
Priority | 名前 | Port | Protocol | ソース | 到着地 | アクション |
---|---|---|---|---|---|---|
100 | AllowAzureStorage | 443 | TCP | Any | 記憶域 | Allow |
101 | AllowActiveDirectory | 443 | TCP | Any | AzureActiveDirectory | Allow |
102 | AllowAzureMonitor | 443 | TCP | Any | AzureMonitor | Allow |
103 | AllowAzureRM | 443 | TCP | Any | AzureResourceManager | Allow |
クラスター ノードと CycleCloud 間の内部通信
クラスター ノードと CycleCloud サーバー間の通信を許可するには、次のポートを開く必要があります。
名前 | source | 宛先 | サービス | Protocol | ポート範囲 |
---|---|---|---|---|---|
amqp_5672 | クラスタ ノード | CycleCloud | AMQP | TCP | 5672 |
https_9443 | クラスタ ノード | CycleCloud | HTTPS | TCP | 9443 |
ロックダウンされたネットワークでの Azure CycleCloud クラスターの起動
注意
アウトバウンド インターネット アクセスのないサブネットでクラスター ノードを実行することは現在完全にサポートされていますが、多くの場合、カスタム イメージまたは既定の CycleCloud クラスターの種類とプロジェクトのカスタマイズ、またはその両方を必要とする高度なトピックです。
クラスターの種類とプロジェクトを積極的に更新して、その作業の大部分またはすべてを排除しています。 ただし、ロックダウンされた環境でクラスターの種類またはプロジェクトでエラーが発生した場合は、サポートリクエストを開いてサポートを依頼することを検討してください。
送信インターネット アクセスを使用して仮想ネットワークまたはサブネットで VM または Cyclecloud クラスターを実行するには、通常、次のものが必要です。
- 完全な機能を実現するには、クラスター VM から Azure Cyclecloud に到達できる必要があります。 次のいずれか:
- クラスター VM は、HTTPS と AMQP を介して Azure Cyclecloud に直接接続できる必要があります。
- クラスター作成時に Cyclecloud ReturnProxy 機能を有効にし、Cyclecloud 自体が SSH 経由で ReturnProxy VM に接続できる必要があります
- クラスターに必要なすべてのソフトウェア パッケージは、次のいずれかである必要があります。
- クラスター VM のカスタム マネージド イメージにプレインストールされているか、または
- VM からアクセス可能なパッケージ リポジトリ ミラーで使用できます。
- Azure Storage から VM にコピーされ、Cyclecloud プロジェクトによって直接インストールされる
- すべてのクラスター ノードが Azure Storage アカウントにアクセスできる必要があります。 このサービスとその他のサポートされている Azure サービスへのプライベート アクセスを提供する推奨される方法は、Azure Storage のVirtual Network サービス エンドポイントを有効にすることです。
GitHub からのプロジェクト 更新
Cyclecloud は、"ステージング" オーケストレーション フェーズ中に GitHub からクラスター プロジェクトをダウンロードします。 このダウンロードは、初期インストール後、Cyclecloud のアップグレード後、または特定の種類のクラスターを初めて起動したときに行われます。 ロックダウンされた環境では、 github.com への HTTPS 送信トラフィックがブロックされる可能性があります。 このような場合、ステージング リソース フェーズ中のノードの作成は失敗します。
最初のノードの作成時に GitHub へのアクセスを一時的に開くことができる場合、CycleCloud は後続のすべてのノードのローカル ファイルを準備します。 一時的なアクセスができない場合は、必要なファイルを別のマシンからダウンロードして CycleCloud にコピーできます。
まず、クラスターに必要なプロジェクトとバージョン (Slurm 2.5.0 など) を決定します。 通常は、特定のプロジェクトのデータベースで最も高いバージョン番号です。
/opt/cycle_server/cycle_server execute 'select * from cloud.project where name == "slurm"'
AdType = "Cloud.Project"
Version = "2.5.0"
ProjectType = "scheduler"
Url = "https://github.com/Azure/cyclecloud-slurm/releases/2.5.0"
AutoUpgrade = false
Name = "slurm"
このプロジェクトのバージョンとすべての依存関係は、[リリース タグ] (https://github.com/Azure/cyclecloud-slurm/releases/tag/2.5.0) にあります。 リリースのすべての成果物をダウンロードする必要があります。 最初にコード成果物をダウンロードし、追加の依存関係の BLOB ディレクトリを作成します。
wget https://github.com/Azure/cyclecloud-slurm/archive/refs/tags/2.5.0.tar.gz
tar -xf 2.5.0.tar.gz
cd cyclecloud-slurm-2.5.0 && mkdir blobs
#... download all other release artifacts to the /blobs directory with wget ...
wget -P "blobs/" https://github.com/Azure/cyclecloud-slurm/releases/download/2.6.1/cyclecloud_api-8.1.0-py2.py3-none-any.whl
#... copy all the files to the Cyclecloud server
#... then on the Cyclecloud server:
cyclecloud project build
mkdir -p /opt/cycle_server/work/staging/projects/slurm/2.5.0
mkdir -p /opt/cycle_server/work/staging/projects/slurm/blobs
cp build/slurm/* /opt/cycle_server/work/staging/projects/slurm/2.5.0/
cp blobs/* /opt/cycle_server/work/staging/projects/slurm/blobs/
chown -R cycle_server:cycle_server /opt/cycle_server/work/staging
これらのファイルがローカルでステージングされると、Cyclecloud はファイルを検出し、GitHub からダウンロードしようとしません。