共用方式為


設定應用程式的存放庫認證以下載容器映像

RepositoryCredentials 新增至應用程式資訊清單的 ContainerHostPolicies 區段,以設定容器登錄驗證。 新增您的容器登錄 (以下範例中的 myregistry.azurecr.io) 的帳戶和密碼,讓服務從存放庫中下載容器映像。

<ServiceManifestImport>
    ...
    <Policies>
        <ContainerHostPolicies CodePackageRef="Code">
            <RepositoryCredentials AccountName="myregistry" Password="=P==/==/=8=/=+u4lyOB=+=nWzEeRfF=" PasswordEncrypted="false"/>
            <PortBinding ContainerPort="80" EndpointRef="Guest1TypeEndpoint"/>
        </ContainerHostPolicies>
    </Policies>
    ...
</ServiceManifestImport>

建議您使用已部署至叢集中所有節點的加密憑證來加密存放庫密碼。 當 Service Fabric 將服務套件部署至叢集時,會使用加密憑證將加密文字解密。 Invoke-ServiceFabricEncryptText Cmdlet 會用來建立密碼的加密文字,其已新增至 ApplicationManifest.xml 檔案。 如需憑證和加密語意的詳細資訊,請參閱秘密管理

設定整個叢集的認證

Service Fabric 可讓您設定整個叢集的認證,而這可用來作應用程式的預設存放庫認證。

此功能可以透過將 UseDefaultRepositoryCredentials 屬性新增到 ApplicationManifest.xml 中的 ContainerHostPolicies,使其具有 truefalse 值來啟用或停用。

<ServiceManifestImport>
    ...
    <Policies>
        <ContainerHostPolicies CodePackageRef="Code" UseDefaultRepositoryCredentials="true">
            <PortBinding ContainerPort="80" EndpointRef="Guest1TypeEndpoint"/>
        </ContainerHostPolicies>
    </Policies>
    ...
</ServiceManifestImport>

然後,Service Fabric 就會使用預設的存放庫認證,其可以在 ClusterManifest 中的 Hosting 區段下指定這些認證。 如果 UseDefaultRepositoryCredentialstrue,Service Fabric 會從 ClusterManifest 中讀取下列值:

  • DefaultContainerRepositoryAccountName (字串)
  • DefaultContainerRepositoryPassword (字串)
  • IsDefaultContainerRepositoryPasswordEncrypted (布林值)
  • DefaultContainerRepositoryPasswordType (字串)

以下是可以在 ClusterManifestTemplate.json 檔案的 Hosting 區段內新增的內容範例。 可以在建立叢集時或稍後在設定升級中新增 Hosting 區段。 如需詳細資訊,請參閱變更 Azure Service Fabric 叢集設定管理 Azure Service Fabric 應用程式祕密

"fabricSettings": [
	...,
	{
        "name": "Hosting",
        "parameters": [
          {
            "name": "EndpointProviderEnabled",
            "value": "true"
          },
          {
            "name": "DefaultContainerRepositoryAccountName",
            "value": "someusername"
          },
          {
            "name": "DefaultContainerRepositoryPassword",
            "value": "somepassword"
          },
          {
            "name": "IsDefaultContainerRepositoryPasswordEncrypted",
            "value": "false"
          },
          {
            "name": "DefaultContainerRepositoryPasswordType",
            "value": "PlainText"
          }
        ]
      },
]

使用權杖作為登錄認證

Service Fabric 支援使用權杖作為認證,以下載容器的映像。 此功能會利用基礎虛擬機器擴展集的受控識別來向登錄進行驗證,而不需要管理使用者認證。 如需詳細資訊,請參閱 Azure 資源的受控識別。 使用此功能需要遵循下列步驟:

  1. 確保已為 VM 啟用系統指派的受控識別

    Azure 入口網站:建立虛擬機擴展集身分識別選項

注意

若為使用者指派的受控識別,請略過此步驟。 只要擴展集只與單一使用者指派的受控識別相關聯,以下的其餘步驟就會相同。

  1. 授與權限給虛擬機器擴展集,以從登錄提取/讀取映像。 從 Azure 入口網站 Azure Container Registry 的 [存取控制 (IAM)] 刀鋒視窗,為您的虛擬機器新增角色指派

    將 VM 主體新增至 ACR

  2. 接下來,修改您的應用程式資訊清單。 在 ContainerHostPolicies 區段中,加入屬性 ‘UseTokenAuthenticationCredentials=”true”

      <ServiceManifestImport>
          <ServiceManifestRef ServiceManifestName="NodeServicePackage" ServiceManifestVersion="1.0"/>
      <Policies>
        <ContainerHostPolicies CodePackageRef="NodeService.Code" Isolation="process" UseTokenAuthenticationCredentials="true">
          <PortBinding ContainerPort="8905" EndpointRef="Endpoint1"/>
        </ContainerHostPolicies>
        <ResourceGovernancePolicy CodePackageRef="NodeService.Code" MemoryInMB="256"/>
      </Policies>
      </ServiceManifestImport>
    

    注意

    UseTokenAuthenticationCredentials 為 true 時,將旗標 UseDefaultRepositoryCredentials 設為 true 會在部署期間導致錯誤。

下一步