Service Fabric クラスターを Azure Stack Hub にデプロイする

セキュリティで保護された Service Fabric クラスターを Azure Stack Hub にデプロイするには、Azure Marketplace の [Service Fabric クラスター] 項目を使用します。

Service Fabric を使った作業の詳細については、Azure ドキュメントの「Azure Service Fabric の概要」および「Service Fabric クラスターのセキュリティに関するシナリオ」を参照してください。

Azure Stack Hub の Service Fabric クラスターでは、リソース プロバイダー Microsoft.ServiceFabric は使用しません。 代わりに、Azure Stack Hub では、Service Fabric クラスターは、DSC (Desired State Configuration) を使用してソフトウェアがプレインストールされた仮想マシン スケール セットとなります。

前提条件

Service Fabric クラスターをデプロイするには、次のものが必要です。

  1. クラスター証明書
    これは、Service Fabric のデプロイ時に Key Vault に追加する X.509 サーバー証明書です。

    • この証明書の CN が、作成する Service Fabric クラスターの完全修飾ドメイン名 (FQDN) と一致している必要があります。

    • 公開キーと秘密キーの両方が必要なため、証明書の形式は PFX である必要があります。 このサーバー側証明書の作成に関する要件を参照してください。

      Note

      テスト目的で、x.509 サーバー証明書の代わりに自己署名証明書を使用することができます。 自己署名証明書は、クラスターの FQDN と一致している必要はありません。

  2. 管理用クライアント証明書
    これは、クライアントで Service Fabric クラスターに対して認証を行う場合に使用される証明書であり、自己署名されたものでもかまいません。 このクライアント証明書の作成に関する要件を参照してください。

  3. Azure Stack Hub Marketplace に次の項目が用意されている必要があります。

    • Windows Server 2016 - このテンプレートでは、Windows Server 2016 イメージを使用してクラスターを作成します。
    • カスタム スクリプト拡張機能 - Microsoft の仮想マシン拡張機能。
    • PowerShell Desired State Configuration - Microsoft の仮想マシン拡張機能。

Key Vault にシークレットを追加する

Service Fabric クラスターをデプロイするには、Service Fabric クラスターに対して正しい Key Vault のシークレット ID または URL を指定する必要があります。 Azure Resource Manager テンプレートでは、入力として Key Vault を受け取ります。 その後、テンプレートは、Service Fabric クラスターをインストールするときに、クラスター証明書を取得します。

重要

Service Fabric で使用するシークレットは、PowerShell を使って Key Vault に追加する必要があります。 ポータルは使用しないでください。

Key Vault を作成してそこにクラスター証明書 を追加するには、以下のスクリプトを使用します。 (「前提条件」を参照してください。)このスクリプトを実行する前に、サンプル スクリプトを確認し、前述のパラメーターを実際の環境に合わせて更新してください。 また、このスクリプトでは、Azure Resource Manager テンプレートに渡す必要のある値が出力されます。

ヒント

スクリプトを正常に実行するには、Compute、Network、Storage、Key Vault の各サービスを含むパブリック オファーが必要です。

   function Get-ThumbprintFromPfx($PfxFilePath, $Password) 
      {
         return New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($PfxFilePath, $Password)
      }
   
   function Publish-SecretToKeyVault ($PfxFilePath, $Password, $KeyVaultName)
      {
         $keyVaultSecretName = "ClusterCertificate"
         $certContentInBytes = [io.file]::ReadAllBytes($PfxFilePath)
         $pfxAsBase64EncodedString = [System.Convert]::ToBase64String($certContentInBytes)
   
         $jsonObject = ConvertTo-Json -Depth 10 ([pscustomobject]@{
               data     = $pfxAsBase64EncodedString
               dataType = 'pfx'
               password = $Password
         })
   
         $jsonObjectBytes = [System.Text.Encoding]::UTF8.GetBytes($jsonObject)
         $jsonEncoded = [System.Convert]::ToBase64String($jsonObjectBytes)
         $secret = ConvertTo-SecureString -String $jsonEncoded -AsPlainText -Force
         $keyVaultSecret = Set-AzureKeyVaultSecret -VaultName $KeyVaultName -Name $keyVaultSecretName -SecretValue $secret
         
         $pfxCertObject = Get-ThumbprintFromPfx -PfxFilePath $PfxFilePath -Password $Password
   
         Write-Host "KeyVault id: " -ForegroundColor Green
         (Get-AzKeyVault -VaultName $KeyVaultName).ResourceId
         
         Write-Host "Secret Id: " -ForegroundColor Green
         (Get-AzureKeyVaultSecret -VaultName $KeyVaultName -Name $keyVaultSecretName).id
   
         Write-Host "Cluster Certificate Thumbprint: " -ForegroundColor Green
         $pfxCertObject.Thumbprint
      }
   
   #========================== CHANGE THESE VALUES ===============================
   $armEndpoint = "https://management.local.azurestack.external"
   $tenantId = "your_tenant_ID"
   $location = "local"
   $clusterCertPfxPath = "Your_path_to_ClusterCert.pfx"
   $clusterCertPfxPassword = "Your_password_for_ClusterCert.pfx"
   #==============================================================================
   
   Add-AzEnvironment -Name AzureStack -ARMEndpoint $armEndpoint
   Connect-AzAccount -Environment AzureStack -TenantId $tenantId
   
   $rgName = "sfvaultrg"
   Write-Host "Creating Resource Group..." -ForegroundColor Yellow
   New-AzResourceGroup -Name $rgName -Location $location
   
   Write-Host "Creating Key Vault..." -ForegroundColor Yellow
   $Vault = New-AzKeyVault -VaultName sfvault -ResourceGroupName $rgName -Location $location -EnabledForTemplateDeployment -EnabledForDeployment -EnabledForDiskEncryption
   
   Write-Host "Publishing certificate to Vault..." -ForegroundColor Yellow
   Publish-SecretToKeyVault -PfxFilePath $clusterCertPfxPath -Password $clusterCertPfxPassword -KeyVaultName $vault.VaultName

詳細については、PowerShell を使用した Azure Stack Hub での Key Vault の管理に関するページを参照してください。

Marketplace 項目のデプロイ

  1. ユーザー ポータルで [+ リソースの作成]>[Compute]>[Service Fabric クラスター] の順に移動します。

    Select Service Fabric Cluster

  2. [基本] をはじめとする各ページのデプロイ フォームに必要事項を入力します。 指定すべき値がわからない場合は、既定値を使用してください。

    切断された Azure Stack Hub へのデプロイ、または別のバージョンの Service Fabric のデプロイについては、Service Fabric 展開パッケージとそれに対応するランタイム パッケージをダウンロードし、Azure Stack Hub BLOB でホストします。 これらの値を [Service Fabric deployment package URL](Service Fabric 展開パッケージの URL) フィールドと [Service Fabric runtime package URL](Service Fabric ランタイム パッケージの URL) フィールドに指定します。

    Note

    Service Fabric の最新リリースとそれに対応する SDK との間に互換性の問題があります。 その問題が解決されるまで、展開パッケージの URL とランタイム パッケージの URL には次のパラメーターを指定してください。 そうしないと、デプロイは失敗します。

    切断されたデプロイについては、これらのパッケージを指定された場所からダウンロードし、Azure Stack Hub BLOB でローカルにホストします。

    Basics

  3. [ネットワーク設定] ページでは、アプリケーション用に開放するポートを具体的に指定できます。

    Network Settings

  4. [セキュリティ] ページには、Azure Key Vault の作成とシークレットのアップロードによって得られた値を追加します。

    [Admin Client Certificate Thumbprint](管理用クライアント証明書の拇印) には、"管理用クライアント証明書" の拇印を入力します (「前提条件」を参照してください。)

    • [ソース Key Vault]: スクリプトの結果から得られる keyVault id 文字列全体を指定します。
    • [Cluster Certificate URL](クラスター証明書 URL): スクリプトの結果から得られる Secret Id の URL 全体を指定します。
    • [Cluster Certificate thumbprint](クラスター証明書の拇印): スクリプトの実行結果から得られる "クラスター証明書の拇印" を指定します。
    • [Server Certificate URL](サーバー証明書 URL):クラスター証明書とは別の証明書を使用する場合は、証明書を keyVault にアップロードし、シークレットの完全な URL を指定します。
    • [Server Certificate thumbprint](サーバー証明書の拇印):サーバー証明書の拇印を指定します
    • [Admin Client Certificate Thumbprints](管理用クライアント証明書の拇印): 「前提条件」で作成した "管理用クライアント証明書の拇印" を指定します。

    Script output

    Security

  5. ウィザードを完了し、 [作成] を選択して Service Fabric クラスターをデプロイします。

Service Fabric クラスターへのアクセス

Service Fabric クラスターには、Service Fabric Explorer または Service Fabric PowerShell を使用してアクセスできます。

Service Fabric Explorer の使用

  1. ブラウザーから管理用クライアント証明書にアクセスできること、Service Fabric クラスターに対して認証できることを確認します。

    a. Internet Explorer を開いて [インターネット オプション]>[コンテンツ]>[証明書] の順に移動します。

    b. [証明書] の [インポート] を選択して "証明書のインポート ウィザード" を開始し、 [次へ] をクリックします。 [インポートするファイル] ページの [参照] をクリックして、Azure Resource Manager テンプレートに指定した管理用クライアント証明書を選択します。

    Note

    この証明書は、以前に Key Vault に追加されたクラスター証明書ではありません。

    c. エクスプローラー ウィンドウの拡張子ドロップダウンで [個人情報の交換] が選択されていることを確認してください。

    Personal information exchange

    d. [証明書ストア] ページの [個人用] を選択してウィザードを完了します。
    Certificate store

  2. Service Fabric クラスターの FQDN を特定するには、次の手順を実行します。

    a. Service Fabric クラスターに関連付けられているリソース グループに移動し、 [パブリック IP アドレス] リソースを探します。 パブリック IP アドレスに関連付けられているオブジェクトを選択し、 [パブリック IP アドレス] ブレードを開きます。

    Public IP address

    b. [パブリック IP アドレス] ブレードに [DNS 名] として FQDN が表示されます。

    DNS name

  3. Service Fabric Explorer の URL とクライアント接続のエンドポイントを見つけるには、Template deployment の結果を確認します。

  4. ブラウザーで https://*FQDN*:19080 に移動します。 FQDN の部分は、手順 2. で調べた実際の Service Fabric クラスターの FQDN に置き換えてください。
    自己署名証明書を使用した場合は、接続が安全ではないことを示す警告が表示されます。 Web サイトに進むには、 [詳細情報][Web ページへ移動] の順に選択します。

  5. サイトに対する認証を行うには、使用する証明書を選択する必要があります。 [More choices](その他の選択肢) を選択して適切な証明書を選び、 [OK] をクリックして Service Fabric Explorer に接続します。

    Authenticate

Service Fabric PowerShell の使用

  1. Azure Service Fabric ドキュメントの「Windows で開発環境を準備する」から Microsoft Azure Service Fabric SDK をインストールします。

  2. インストールが完了したら、Service Fabric のコマンドレットに PowerShell から確実にアクセスできるようシステム環境変数を構成します。

    a. [コントロール パネル]>[システムとセキュリティ]>[システム] に移動し、 [システムの詳細設定] を選択します。

    Control panel

    b. [システムのプロパティ][詳細設定] タブで [環境変数] を選択します。

    c. [システム環境変数][Path] を編集し、C:C:\Program Files\Microsoft Service Fabric\bin\Fabric\Fabric.Code が一連の環境変数の先頭にあることを確認します。

    Environment variable list

  3. 環境変数の順序を変更したら、PowerShell を再起動し、次の PowerShell スクリプトを実行して Service Fabric クラスターにアクセスします。

     Connect-ServiceFabricCluster -ConnectionEndpoint "\[Service Fabric
     CLUSTER FQDN\]:19000" \`
    
     -X509Credential -ServerCertThumbprint
     761A0D17B030723A37AA2E08225CD7EA8BE9F86A \`
    
     -FindType FindByThumbprint -FindValue
     0272251171BA32CEC7938A65B8A6A553AA2D3283 \`
    
     -StoreLocation CurrentUser -StoreName My -Verbose
    

    Note

    スクリプトでは、クラスター名の前に https:// を付けません。 ポート 19000 は必須です。

次のステップ

Kubernetes を Azure Stack Hub にデプロイする