Hizmet bildiriminde kaynakları belirtme

Genel Bakış

Service Fabric uygulamaları ve hizmetleri, bildirim dosyaları kullanılarak tanımlanır ve sürüm oluşturulur. ServiceManifest.xml ve ApplicationManifest.xml daha üst düzey bir genel bakış için bkz. Service Fabric uygulama ve hizmet bildirimleri.

Hizmet bildirimi, derlenen kodu değiştirmeden hizmet tarafından kullanılan kaynakların bildirilmesine veya değiştirilmesine izin verir. Service Fabric, hizmet için uç nokta kaynaklarının yapılandırmasını destekler. Hizmet bildiriminde belirtilen kaynaklara erişim, uygulama bildirimindeki SecurityGroup aracılığıyla denetlenebilir. Kaynakların bildirimi, bu kaynakların dağıtım zamanında değiştirilmesini sağlar, yani hizmetin yeni bir yapılandırma mekanizması eklemesi gerekmez. ServiceManifest.xml dosyasının şema tanımı Service Fabric SDK'sı ve C:\Program Files\Microsoft SDKs\Service Fabric\schemas\ServiceFabricServiceModel.xsd araçlarıyla birlikte yüklenir ve ServiceFabricServiceModel.xsd şema belgelerinde belgelenmiştir.

Uç Noktalar

Hizmet bildiriminde bir uç nokta kaynağı tanımlandığında Service Fabric, bir bağlantı noktası açıkça belirtilmediğinde ayrılmış uygulama bağlantı noktası aralığından bağlantı noktaları atar. Örneğin, bu paragrafın ardından sağlanan bildirim parçacığında belirtilen ServiceEndpoint1 uç noktasına bakın. Ayrıca, hizmetler bir kaynakta belirli bir bağlantı noktası da isteyebilir. Farklı küme düğümlerinde çalışan hizmet çoğaltmalarına farklı bağlantı noktası numaraları atanabilirken, aynı düğümde çalışan bir hizmetin çoğaltmaları bağlantı noktasını paylaşır. Hizmet çoğaltmaları daha sonra çoğaltma ve istemci isteklerini dinlemek için gerektiğinde bu bağlantı noktalarını kullanabilir.

Https uç noktasını belirten bir hizmeti etkinleştirdikten sonra, Service Fabric bağlantı noktası için erişim denetimi girdisini ayarlar, belirtilen sunucu sertifikasını bağlantı noktasına bağlar ve ayrıca hizmetin çalıştığı kimliğe sertifikanın özel anahtarına izinler olarak verir. Etkinleştirme akışı Service Fabric her başlatıldığında veya uygulamanın sertifika bildirimi bir yükseltme yoluyla değiştirildiğinde çağrılır. Uç nokta sertifikası ayrıca değişiklikler/yenilemeler için de izlenir ve izinler gerektiğinde düzenli aralıklarla yeniden uygulanır.

Hizmet sonlandırdıktan sonra Service Fabric uç nokta erişim denetimi girdisini temizler ve sertifika bağlamasını kaldırır. Ancak, sertifikanın özel anahtarına uygulanan izinler temizlenmez.

Uyarı

Tasarım gereği statik bağlantı noktaları ClusterManifest'te belirtilen uygulama bağlantı noktası aralığıyla çakışmamalıdır. Statik bir bağlantı noktası belirtirseniz, bunu uygulama bağlantı noktası aralığının dışına atayın, aksi takdirde bağlantı noktası çakışmaları oluşur. 6.5CU2 sürümüyle, böyle bir çakışma tespit ettiğimizde ancak dağıtımın gönderilen 6.5 davranışıyla eşitlenmiş olarak devam etmesine izin aldığımızda Bir Sistem Durumu Uyarısı yayımlayacağız. Ancak, uygulama dağıtımını sonraki ana sürümlerden engelleyebiliriz.

Sürüm 7.0 ile, uygulama bağlantı noktası aralığı kullanımının HostingConfig::ApplicationPortExhaustThresholdPercentage(%80) değerinin ötesine geçeceğini algıladığımızda Bir Sistem Durumu Uyarısı veririz.

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

Tek bir hizmet paketinde birden çok kod paketi varsa, kod paketine Uç Noktalar bölümünde de başvurulmalıdır. Örneğin, ServiceEndpoint2a ve ServiceEndpoint2b farklı kod paketlerine başvuran aynı hizmet paketinden uç noktalarsa, her uç noktaya karşılık gelen kod paketi aşağıdaki gibi netleştirilir:

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

Yapılandırma paketi ayarları dosyasından (settings.xml) uç noktalara başvurma hakkında daha fazla bilgi edinmek için Durum bilgisi olan Reliable Services'ı yapılandırma bölümüne bakın.

Örnek: hizmetiniz için bir HTTP uç noktası belirtme

Aşağıdaki hizmet bildirimi, Resources> öğesinde <bir TCP uç noktası kaynağını ve iki HTTP uç noktası kaynağını tanımlar.

<?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>

Örnek: hizmetiniz için bir HTTPS uç noktası belirtme

HTTPS protokolü sunucu kimlik doğrulaması sağlar ve istemci-sunucu iletişimini şifrelemek için de kullanılır. Service Fabric hizmetinizde HTTPS'yi etkinleştirmek için hizmet bildiriminin Kaynaklar -> Uç Noktalar -> Uç Nokta bölümünde, serviceEndpoint3 uç noktası için daha önce gösterildiği gibi protokolü belirtin.

Not

Uygulama yükseltmesi sırasında hizmetin protokolü değiştirilemez. Yükseltme sırasında değiştirilirse, hataya neden olan bir değişikliktir.

Uyarı

HTTPS kullanırken, aynı düğüme dağıtılan farklı hizmet örnekleri (uygulamadan bağımsız) için aynı bağlantı noktasını ve sertifikayı kullanmayın. Farklı uygulama örneklerinde aynı bağlantı noktasını kullanarak iki farklı hizmetin yükseltilmesi yükseltme hatasına neden olur. Daha fazla bilgi için bkz . HTTPS uç noktalarıyla birden çok uygulamayı yükseltme .

Burada, BIR HTTPS uç noktası için gereken yapılandırmayı gösteren bir ApplicationManifest örneği verilmiştir. Sunucu/uç nokta sertifikası parmak izi veya konu ortak adıyla bildirilebilir ve bir değer sağlanmalıdır. EndpointRef, ServiceManifest'te EndpointResource'a yapılan bir başvurudur ve protokolü 'https' protokolüne ayarlanmış olmalıdır. Birden fazla EndpointCertificate ekleyebilirsiniz.

<?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 kümeleri için MY deposu varsayılan olarak /var/lib/sfcerts klasörünü kullanır.

HTTPS uç noktasını kullanan tam bir uygulama örneği için bkz. Kestrel kullanarak ASP.NET Core Web API'sinin ön uç hizmetine HTTPS uç noktası ekleme.

HTTP Uç Noktaları için Bağlantı Noktası Aklama

Service Fabric varsayılan olarak belirtilen ACL HTTP(S) uç noktalarını otomatik olarak kullanır. Bir uç noktayla ilişkilendirilmiş bir SecurityAccessPolicy yoksa ve Service Fabric Yönetici ayrıcalıklarına sahip bir hesap kullanılarak çalışacak şekilde yapılandırılmışsa otomatik ACL gerçekleştirmez.

ServiceManifest.xml'da Uç Noktaları Geçersiz Kılma

ApplicationManifest'te, ConfigOverrides bölümüne eşdüzey olacak bir ResourceOverrides bölümü ekleyin. Bu bölümde, Hizmet bildiriminde belirtilen kaynaklar bölümünde Uç Noktalar bölümünün geçersiz kılmasını belirtebilirsiniz. Uç noktaları geçersiz kılma, çalışma zamanı 5.7.217/SDK 2.7.217 ve üzeri sürümlerde desteklenir.

ApplicationParameters kullanarak ServiceManifest'te EndPoint'i geçersiz kılmak için ApplicationManifest'i şu şekilde değiştirin:

ServiceManifestImport bölümünde yeni bir "ResourceOverrides" bölümü ekleyin.

<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>

Parametreler'e aşağıdakini ekleyin:

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

Uygulamayı dağıtırken, bu değerleri ApplicationParameters olarak geçirebilirsiniz. Örnek:

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

Not: Belirli bir ApplicationParameter için sağlanan değer boşsa, karşılık gelen EndPointName için ServiceManifest'te sağlanan varsayılan değere geri döneriz.

Örnek:

ServiceManifest içinde belirttiyseniz

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

Uygulama parametreleri için Port1 ve Protocol1 değerinin null veya boş olduğunu varsayalım. Bağlantı noktası ServiceFabric tarafından belirlenir ve Protokol tcp olur.

Yanlış bir değer belirttiğinizi varsayalım. Bağlantı noktası için int yerine "Foo" dize değeri belirttiğinizi varsayalım. New-ServiceFabricApplication komutu bir hatayla başarısız olur: The override parameter with name 'ServiceEndpoint1' attribute 'Port1' in section 'ResourceOverrides' is invalid. The value specified is 'Foo' and required is 'int'.

Sonraki Adımlar

Bu makalede, Service Fabric'in hizmet bildiriminde uç noktaların nasıl tanımlanacağı açıklanmıştır. Daha ayrıntılı örnekler için bkz:

Service Fabric kümesinde var olan bir uygulamayı paketleme ve dağıtma adımları için bkz: