Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Přehled
Aplikace a služby Service Fabric jsou definovány a verzovány pomocí souborů manifestu. Přehled ServiceManifest.xml a ApplicationManifest.xmlna vyšší úrovni najdete v manifestech aplikací a služeb Service Fabric.
Manifest služby umožňuje deklarovat nebo měnit prostředky používané službou beze změny zkompilovaného kódu. Service Fabric podporuje konfiguraci prostředků koncových bodů pro službu. Přístup k prostředkům zadaným v manifestu služby je možné řídit prostřednictvím skupiny zabezpečení v manifestu aplikace. Deklarace prostředků umožňuje, aby se tyto prostředky v době nasazení měnily, což znamená, že služba nemusí zavést nový konfigurační mechanismus. Definice schématu pro soubor ServiceManifest.xml je nainstalována se sadou Service Fabric SDK a nástroji pro C:\Program Files\Microsoft SDKs\Service Fabric\schemas\ServiceFabricServiceModel.xsd a je zdokumentovaná v dokumentaci ke schématu ServiceFabricServiceModel.xsd.
Koncové uzly
Pokud je prostředek koncového bodu definovaný v manifestu služby, Service Fabric přiřadí porty z vyhrazeného rozsahu portů aplikace, pokud není port explicitně zadaný. Podívejte se například na koncový bod ServiceEndpoint1 zadaný v fragmentu manifestu poskytnutém po tomto odstavci. Kromě toho mohou služby také žádat o konkrétní port v rámci prostředku. Repliky služeb spuštěné na různých uzlech clusteru je možné přiřadit různá čísla portů, zatímco repliky služby spuštěné na stejném uzlu sdílejí port. Repliky služby pak můžou tyto porty podle potřeby používat pro replikaci a naslouchání klientským požadavkům.
Po aktivaci služby, která seznamuje koncový bod HTTPS, Service Fabric nastaví položku řízení přístupu pro port, vytvoří vazbu zadaného certifikátu serveru na port a také udělí identitě, pod kterým služba běží, oprávnění k privátnímu klíči certifikátu. Tok aktivace se vyvolá při každém spuštění Service Fabric nebo při změně deklarace certifikátu aplikace prostřednictvím upgradu. Certifikát koncového bodu se také bude monitorovat kvůli změnám nebo prodloužením platnosti a oprávnění se budou podle potřeby pravidelně znovu použít.
Po ukončení služby Service Fabric vyčistí položku řízení přístupu koncového bodu a odebere vazbu certifikátu. Všechna oprávnění použitá pro privátní klíč certifikátu se ale nevyčistí.
Výstraha
Statické porty by se neměly překrývat s rozsahem portů aplikace zadaným v ClusterManifestu. Pokud zadáte statický port, přiřaďte ho mimo rozsah portů aplikace, jinak dojde ke konfliktům portů. Ve verzi 6.5CU2 vydáme upozornění na stav , když zjistíme takový konflikt, ale necháme nasazení pokračovat v synchronizaci s chováním expedované verze 6.5. Nasazení aplikace však můžeme zabránit v dalších hlavních verzích.
Ve verzi 7.0 vydáme upozornění na stav , když zjistíme, že využití rozsahu portů aplikace přesahuje HostingConfig::ApplicationPortExhaustThresholdPercentage(výchozí 80%).
<Resources>
<Endpoints>
<Endpoint Name="ServiceEndpoint1" Protocol="http"/>
<Endpoint Name="ServiceEndpoint2" Protocol="http" Port="80"/>
<Endpoint Name="ServiceEndpoint3" Protocol="https"/>
</Endpoints>
</Resources>
Pokud v jednom balíčku služby existuje více balíčků kódu, je potřeba na balíček kódu odkazovat také v části Koncové body . Pokud jsou například koncové body ServiceEndpoint2a a ServiceEndpoint2b ze stejného balíčku služby, ale odkazující na různé balíčky kódu, je balíček kódu odpovídající každému koncovému bodu vysvětlen takto:
<Resources>
<Endpoints>
<Endpoint Name="ServiceEndpoint2a" Protocol="http" Port="802" CodePackageRef="Code1"/>
<Endpoint Name="ServiceEndpoint2b" Protocol="http" Port="801" CodePackageRef="Code2"/>
</Endpoints>
</Resources>
V tématu Konfigurace stavových služeb Reliable Services najdete více informací o tom, jak odkazovat na koncové body ze souboru nastavení konfiguračního balíčku (settings.xml).
Příklad: Zadání koncového bodu HTTP pro vaši službu
Následující manifest služby definuje jeden prostředek koncového bodu TCP a dva prostředky koncového bodu HTTP v elementu <Resources> .
<?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říklad: Zadání koncového bodu HTTPS pro vaši službu
Protokol HTTPS poskytuje ověřování serveru a používá se také k šifrování komunikace mezi klientem a serverem. Pokud chcete ve službě Service Fabric povolit https, zadejte protokol v části Prostředky –> Koncové body –> Koncový bod manifestu služby, jak je znázorněno výše pro koncový bod ServiceEndpoint3.
Poznámka:
Protokol služby nelze během upgradu aplikace změnit. Pokud se během upgradu změní, jedná se o zásadní změnu.
Výstraha
Při použití protokolu HTTPS nepoužívejte stejný port a certifikát pro různé instance služby (nezávisle na aplikaci) nasazené do stejného uzlu. Upgrade dvou různých služeb pomocí stejného portu v různých instancích aplikace způsobí selhání upgradu. Další informace naleznete v tématu Aktualizace více aplikací pomocí koncových bodů HTTPS .
Tady je příklad ApplicationManifest demonstrující konfiguraci vyžadovanou pro koncový bod HTTPS. Certifikát serveru nebo koncového bodu může být deklarován kryptografickým otiskem nebo běžným názvem subjektu a musí být zadaná hodnota. EndpointRef je odkaz na EndpointResource ve službě ServiceManifest, jehož protokol musí být nastavený na protokol https. Můžete přidat více než jeden certifikát koncového bodu.
<?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>
V případě linuxových clusterů se úložiště MY ve výchozím nastavení nachází ve složce /var/lib/sfcerts.
Příklad úplné aplikace, která využívá koncový bod HTTPS, najdete v tématu Přidání koncového bodu HTTPS do front-endové služby webového rozhraní API ASP.NET Core pomocí Kestrel.
Ochrana portů pomocí ACL pro koncové body HTTP
Service Fabric automaticky nastaví řízení přístupu (ACL) pro HTTP(S) koncové body, které jsou specifikovány ve výchozím nastavení. Pokud nemá koncový bod přidruženou zásadu SecurityAccessPolicy a Service Fabric je nakonfigurován k běhu na účtu s oprávněními správce, nebude provádět automatické řízení přístupu.
Přepsání koncových bodů v ServiceManifest.xml
V souboru ApplicationManifest přidejte oddíl ResourceOverrides, který bude na stejné úrovni jako ConfigOverrides oddíl. V této části můžete zadat překrytí oddílu Koncové body v části prostředky určené v manifestu služby. Přepsání koncových bodů je podporováno v běhovém prostředí 5.7.217/SDK 2.7.217 a vyšším.
Pokud chcete přepsat koncový bod v ServiceManifest pomocí ApplicationParameters, změňte ApplicationManifest takto:
V části ServiceManifestImport přidejte nový oddíl ResourceOverrides.
<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>
V části Parametry přidejte následující:
<Parameters>
<Parameter Name="Port" DefaultValue="" />
<Parameter Name="Protocol" DefaultValue="" />
<Parameter Name="Type" DefaultValue="" />
<Parameter Name="Port1" DefaultValue="" />
<Parameter Name="Protocol1" DefaultValue="" />
</Parameters>
Při nasazování aplikace můžete tyto hodnoty předat jako ApplicationParameters. Například:
PS C:\> New-ServiceFabricApplication -ApplicationName fabric:/myapp -ApplicationTypeName "AppType" -ApplicationTypeVersion "1.0.0" -ApplicationParameter @{Port='1001'; Protocol='https'; Type='Input'; Port1='2001'; Protocol='http'}
Poznámka: Pokud je hodnota zadaná pro danou hodnotu ApplicationParameter prázdná, vrátíme se k výchozí hodnotě zadané v ServiceManifest pro odpovídající Název Koncového bodu.
Například:
Pokud jste zadali v ServiceManifestu
<Resources>
<Endpoints>
<Endpoint Name="ServiceEndpoint1" Protocol="tcp"/>
</Endpoints>
</Resources>
Předpokládejme, že hodnota Port1 a Protocol1 pro parametry aplikace je null nebo prázdná. O portu se rozhodne ServiceFabric a protokol bude tcp.
Předpokládejme, že zadáte nesprávnou hodnotu. Řekněme, že pro port jste místo int zadali řetězcovou hodnotu Foo. New-ServiceFabricApplication příkaz selže s chybou: The override parameter with name 'ServiceEndpoint1' attribute 'Port1' in section 'ResourceOverrides' is invalid. The value specified is 'Foo' and required is 'int'.
Další kroky
Tento článek vysvětluje, jak definovat koncové body v manifestu služby Service Fabric. Podrobnější příklady najdete tady:
Postup balení a nasazení existující aplikace v clusteru Service Fabric najdete tady: