Share via


Erőforrások megadása egy szolgáltatásjegyzékben

Áttekintés

A Service Fabric-alkalmazások és -szolgáltatások jegyzékfájlokkal vannak definiálva és verziószámozottak. A ServiceManifest.xml és a ApplicationManifest.xml magasabb szintű áttekintéséért lásd: Service Fabric-alkalmazás- és szolgáltatásjegyzékek.

A szolgáltatásjegyzék lehetővé teszi a szolgáltatás által használt erőforrások deklarálását vagy módosítását a lefordított kód módosítása nélkül. A Service Fabric támogatja a szolgáltatás végponterőforrásainak konfigurálását. A szolgáltatásjegyzékben megadott erőforrásokhoz való hozzáférés az alkalmazásjegyzékben található SecurityGroup használatával szabályozható. Az erőforrások deklarálása lehetővé teszi az erőforrások módosítását az üzembe helyezéskor, ami azt jelenti, hogy a szolgáltatásnak nem kell új konfigurációs mechanizmust bevezetnie. A ServiceManifest.xml fájl sémadefiníciója a Service Fabric SDK-val és a C:\Program Files\Microsoft SDKs\Service Fabric\schemas\ServiceFabricServiceModel.xsd eszközökkel együtt van telepítve, és a ServiceFabricServiceModel.xsd sémadokumentációjában van dokumentálva.

Végpontok

Amikor egy végponterőforrást definiál a szolgáltatásjegyzékben, a Service Fabric portokat rendel a fenntartott alkalmazás porttartományához, ha a port nincs explicit módon megadva. Tekintse meg például az e bekezdés után megadott jegyzékrészletben megadott ServiceEndpoint1 végpontot. Emellett a szolgáltatások egy adott portot is kérhetnek egy erőforrásban. A különböző fürtcsomópontokon futó szolgáltatásreplikákhoz különböző portszámok rendelhetők, míg az ugyanazon a csomóponton futó szolgáltatás replikái osztoznak a porton. A szolgáltatásreplikák ezután szükség szerint használhatják ezeket a portokat a replikációhoz és az ügyfélkérések figyeléséhez.

Egy https-végpontot meghatározó szolgáltatás aktiválásakor a Service Fabric beállítja a port hozzáférés-vezérlési bejegyzését, a megadott kiszolgálótanúsítványt a porthoz köti, és engedélyt ad a szolgáltatás által futtatott identitásnak a tanúsítvány titkos kulcsához. Az aktiválási folyamat minden alkalommal meg lesz hívva, amikor a Service Fabric elindul, vagy amikor az alkalmazás tanúsítványdeklarációja frissítéssel módosul. A végponttanúsítványt is figyeli a rendszer a módosítások/megújítások esetében, és szükség esetén rendszeresen újra alkalmazza az engedélyeket.

A szolgáltatás leállítása után a Service Fabric törli a végpont hozzáférés-vezérlési bejegyzését, és eltávolítja a tanúsítványkötést. A tanúsítvány titkos kulcsára alkalmazott engedélyek azonban nem törlődnek.

Figyelmeztetés

A tervezés során a statikus portok nem lehetnek átfedésben a ClusterManifestben megadott alkalmazásport-tartománnyal. Ha statikus portot ad meg, rendelje hozzá az alkalmazás porttartományán kívülre, ellenkező esetben portütközésekhez vezet. A 6.5CU2-es kiadással állapotriasztást adunk ki, ha ilyen ütközést észlelünk, de hagyja, hogy az üzembe helyezés szinkronban legyen a 6.5-ös verzióval. Azonban megakadályozhatjuk, hogy az alkalmazás üzembe helyezése a következő fő kiadásokban szerepel.

A 7.0-s kiadással állapotriasztást adunk ki, ha azt észleljük, hogy az alkalmazásporttartomány használata meghaladja a HostingConfig::ApplicationPortExhaustThresholdPercentage(alapértelmezett 80%).

<Resources>
  <Endpoints>
    <Endpoint Name="ServiceEndpoint1" Protocol="http"/>
    <Endpoint Name="ServiceEndpoint2" Protocol="http" Port="80"/>
    <Endpoint Name="ServiceEndpoint3" Protocol="https"/>
  </Endpoints>
</Resources>

Ha egyetlen szolgáltatáscsomagban több kódcsomag is található, akkor a kódcsomagra a Végpontok szakaszban is hivatkozni kell. Ha például a ServiceEndpoint2a és a ServiceEndpoint2b ugyanabból a szolgáltatáscsomagból származó végpontok, amelyek különböző kódcsomagokra hivatkoznak, az egyes végpontoknak megfelelő kódcsomag a következőképpen lesz tisztázva:

<Resources>
  <Endpoints>
    <Endpoint Name="ServiceEndpoint2a" Protocol="http" Port="802" CodePackageRef="Code1"/>
    <Endpoint Name="ServiceEndpoint2b" Protocol="http" Port="801" CodePackageRef="Code2"/>
  </Endpoints>
</Resources>

Az állapotalapú Reliable Services konfigurálása című témakörben további információt talál a végpontokra való hivatkozásról a konfigurációs csomag beállításfájljából (settings.xml).

Példa: HTTP-végpont megadása a szolgáltatáshoz

Az alábbi szolgáltatásjegyzék egy TCP-végponti erőforrást és két HTTP-végponti erőforrást határoz meg az <Erőforrások> elemben.

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="Stateful1Pkg"
                 Version="1.0.0"
                 xmlns="http://schemas.microsoft.com/2011/01/fabric"
                 xmlns:xsd="https://www.w3.org/2001/XMLSchema"
                 xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
  <ServiceTypes>
    <!-- This is the name of your ServiceType.
         This name must match the string used in the RegisterServiceType call in Program.cs. -->
    <StatefulServiceType ServiceTypeName="Stateful1Type" HasPersistedState="true" />
  </ServiceTypes>

  <!-- Code package is your service executable. -->
  <CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
      <ExeHost>
        <Program>Stateful1.exe</Program>
      </ExeHost>
    </EntryPoint>
  </CodePackage>

  <!-- Config package is the contents of the Config directory under PackageRoot that contains an
       independently updateable and versioned set of custom configuration settings for your service. -->
  <ConfigPackage Name="Config" Version="1.0.0" />

  <Resources>
    <Endpoints>
      <!-- This endpoint is used by the communication listener to obtain the port number on which to
           listen. Note that if your service is partitioned, this port is shared with
           replicas of different partitions that are placed in your code. -->
      <Endpoint Name="ServiceEndpoint1" Protocol="http"/>
      <Endpoint Name="ServiceEndpoint2" Protocol="http" Port="80"/>
      <Endpoint Name="ServiceEndpoint3" Protocol="https"/>
      <Endpoint Name="ServiceEndpoint4" Protocol="https" Port="14023"/>

      <!-- This endpoint is used by the replicator for replicating the state of your service.
           This endpoint is configured through the ReplicatorSettings config section in the Settings.xml
           file under the ConfigPackage. -->
      <Endpoint Name="ReplicatorEndpoint" />
    </Endpoints>
  </Resources>
</ServiceManifest>

Példa: HTTPS-végpont megadása a szolgáltatáshoz

A HTTPS protokoll kiszolgálóhitelesítést biztosít, és az ügyfél-kiszolgáló kommunikáció titkosítására is használható. Ha engedélyezni szeretné a HTTPS-t a Service Fabric-szolgáltatásban, adja meg a protokollt a szolgáltatásjegyzék Resources – Endpoints – Endpoint (Erőforrások –> Végpontok –> Végpont ) szakaszában, ahogy az a ServiceEndpoint3 végpont esetében korábban is látható.

Megjegyzés

A szolgáltatás protokollja nem módosítható az alkalmazásfrissítés során. Ha a frissítés során megváltozik, az kompatibilitástörő változás.

Figyelmeztetés

HTTPS használata esetén ne használja ugyanazt a portot és tanúsítványt az ugyanazon a csomóponton üzembe helyezett különböző szolgáltatáspéldányokhoz (az alkalmazástól függetlenül). Ha két különböző szolgáltatást ugyanazon a porton keresztül frissít a különböző alkalmazáspéldányokban, az frissítési hibát fog eredményezni. További információ: Több alkalmazás frissítése HTTPS-végpontokkal .

Íme egy példa az ApplicationManifestre, amely a HTTPS-végponthoz szükséges konfigurációt mutatja be. A kiszolgáló/végpont tanúsítványa ujjlenyomattal vagy tulajdonosi köznapi névvel deklarálható, és meg kell adni egy értéket. Az EndpointRef a ServiceManifest EndpointResource-jára mutató hivatkozás, amelynek protokollját https protokollra kell állítani. Több EndpointCertificate is hozzáadható.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest ApplicationTypeName="Application1Type"
                     ApplicationTypeVersion="1.0.0"
                     xmlns="http://schemas.microsoft.com/2011/01/fabric"
                     xmlns:xsd="https://www.w3.org/2001/XMLSchema"
                     xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
  <Parameters>
    <Parameter Name="Stateful1_MinReplicaSetSize" DefaultValue="3" />
    <Parameter Name="Stateful1_PartitionCount" DefaultValue="1" />
    <Parameter Name="Stateful1_TargetReplicaSetSize" DefaultValue="3" />
  </Parameters>
  <!-- Import the ServiceManifest from the ServicePackage. The ServiceManifestName and ServiceManifestVersion
       should match the Name and Version attributes of the ServiceManifest element defined in the
       ServiceManifest.xml file. -->
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateful1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <EndpointBindingPolicy CertificateRef="SslCertByTP" EndpointRef="ServiceEndpoint3"/>
      <EndpointBindingPolicy CertificateRef="SslCertByCN" EndpointRef="ServiceEndpoint4"/>
    </Policies>
  </ServiceManifestImport>
  <DefaultServices>
    <!-- The section below creates instances of service types when an instance of this
         application type is created. You can also create one or more instances of service type by using the
         Service Fabric PowerShell module.

         The attribute ServiceTypeName below must match the name defined in the imported ServiceManifest.xml file. -->
    <Service Name="Stateful1">
      <StatefulService ServiceTypeName="Stateful1Type" TargetReplicaSetSize="[Stateful1_TargetReplicaSetSize]" MinReplicaSetSize="[Stateful1_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[Stateful1_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
      </StatefulService>
    </Service>
  </DefaultServices>
  <Certificates>
    <EndpointCertificate Name="SslCertByTP" X509FindValue="FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0" X509StoreName="MY" />  
    <EndpointCertificate Name="SslCertByCN" X509FindType="FindBySubjectName" X509FindValue="ServiceFabric-EndpointCertificateBinding-Test" X509StoreName="MY" />  
  </Certificates>
</ApplicationManifest>

Linux-fürtök esetén a MY store alapértelmezett értéke a /var/lib/sfcerts mappa.

Egy HTTPS-végpontot használó teljes alkalmazásra vonatkozó példa: HTTPS-végpont hozzáadása egy ASP.NET Core Webes API előtér-szolgáltatáshoz a Kestrel használatával.

Port ACLing HTTP-végpontokhoz

A Service Fabric alapértelmezés szerint automatikusan ACL HTTP(S) végpontokat ad meg. Nem hajtja végre az automatikus hitelesítést, ha egy végponthoz nincs társítva SecurityAccessPolicy , és a Service Fabric rendszergazdai jogosultságokkal rendelkező fiókkal való futtatásra van konfigurálva.

Végpontok felülírása ServiceManifest.xml

Az ApplicationManifestben adjon hozzá egy ResourceOverrides szakaszt, amely a ConfigOverrides szakasz testvére lesz. Ebben a szakaszban megadhatja a Szolgáltatásjegyzékben megadott erőforrások szakasz Végpontok szakaszának felülbírálását. A felülíró végpontok az 5.7.217/SDK 2.7.217-s és újabb futtatókörnyezetekben támogatottak.

Ha felül szeretné bírálni az EndPointot a ServiceManifestben az ApplicationParameters használatával, módosítsa az ApplicationManifestet a következőképpen:

A ServiceManifestImport szakaszban adjon hozzá egy új "ResourceOverrides" szakaszt.

<ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <ResourceOverrides>
      <Endpoints>
        <Endpoint Name="ServiceEndpoint" Port="[Port]" Protocol="[Protocol]" Type="[Type]" />
        <Endpoint Name="ServiceEndpoint1" Port="[Port1]" Protocol="[Protocol1] "/>
      </Endpoints>
    </ResourceOverrides>
        <Policies>
           <EndpointBindingPolicy CertificateRef="SslCertByTP" EndpointRef="ServiceEndpoint"/>
        </Policies>
  </ServiceManifestImport>

A Paraméterek területen adja hozzá az alábbiakat:

  <Parameters>
    <Parameter Name="Port" DefaultValue="" />
    <Parameter Name="Protocol" DefaultValue="" />
    <Parameter Name="Type" DefaultValue="" />
    <Parameter Name="Port1" DefaultValue="" />
    <Parameter Name="Protocol1" DefaultValue="" />
  </Parameters>

Az alkalmazás üzembe helyezése során ezeket az értékeket ApplicationParameters értékként adhatja meg. Például:

PS C:\> New-ServiceFabricApplication -ApplicationName fabric:/myapp -ApplicationTypeName "AppType" -ApplicationTypeVersion "1.0.0" -ApplicationParameter @{Port='1001'; Protocol='https'; Type='Input'; Port1='2001'; Protocol='http'}

Megjegyzés: Ha egy adott ApplicationParameterhez megadott érték üres, visszatérünk a ServiceManifestben a megfelelő EndPointName elemhez megadott alapértelmezett értékhez.

Például:

Ha a Megadott ServiceManifestben

  <Resources>
    <Endpoints>
      <Endpoint Name="ServiceEndpoint1" Protocol="tcp"/>
    </Endpoints>
  </Resources>

Tegyük fel, hogy az Alkalmazásparaméterek Port1 és Protocol1 értéke null értékű vagy üres. A portról a ServiceFabric dönt, a protokoll pedig tcp lesz.

Tegyük fel, hogy helytelen értéket ad meg. Tegyük fel, hogy a Port esetében egy "Foo" sztringértéket adott meg int helyett. New-ServiceFabricApplication parancs a következő hibával fog meghiúsulni: The override parameter with name 'ServiceEndpoint1' attribute 'Port1' in section 'ResourceOverrides' is invalid. The value specified is 'Foo' and required is 'int'.

Következő lépések

Ez a cikk azt ismertette, hogyan definiálhat végpontokat a Service Fabric szolgáltatásjegyzékében. Részletesebb példákért lásd:

Egy meglévő alkalmazás Service Fabric-fürtön való csomagolásának és üzembe helyezésének részletes útmutatójáért lásd: