Aracılığıyla paylaş


Azure Service Fabric'te DNS hizmeti

DNS hizmeti, DNS protokolunu kullanarak diğer hizmetleri bulmak için kümenizde etkinleştirebileceğiniz isteğe bağlı bir sistem hizmetidir.

Kapsayıcılı hizmetler başta olmak üzere birçok hizmet önceden var olan bir URL aracılığıyla ele alınabilir. Service Fabric Adlandırma Hizmeti protokolü yerine standart DNS protokollerini kullanarak bu hizmetleri çözümleyebilmek tercih edilir. DNS hizmeti, DNS adlarını bir hizmet adıyla eşlemenize ve bu nedenle uç nokta IP adreslerini çözümlemenize olanak tanır. Bu tür işlevler, kapsayıcılı hizmetlerin farklı platformlarda taşınabilirliğini korur ve Adlandırma Hizmeti'ni kullanmak için kodu yeniden yazmak yerine mevcut hizmet URL'lerini kullanmanıza izin vererek "lift and shift" senaryolarını kolaylaştırabilir.

DNS hizmeti, DNS adlarını hizmet adlarına eşler ve bu adlar hizmet uç noktasını döndürmek için Adlandırma Hizmeti tarafından çözümlenir. Hizmetin DNS adı, oluşturma sırasında sağlanır. Aşağıdaki diyagramda, DNS hizmetinin durum bilgisi olmayan hizmetler için nasıl çalıştığı gösterilmektedir. Kısa olması için diyagramlar hizmetler için yalnızca bir uç nokta gösterir, ancak her hizmetin birden çok uç noktası olabilir.

Durum bilgisi olmayan hizmetler için DNS adlarının DNS hizmetine göre hizmet adlarına nasıl eşlendiği gösteren diyagram.

Service Fabric sürüm 6.3'le başlayarak, Service Fabric DNS protokolü bölümlenmiş durum bilgisi olan hizmetleri ele almak için bir düzen içerecek şekilde genişletilmiştir. Bu uzantılar, durum bilgisi olan hizmet DNS adı ve bölüm adı birleşimini kullanarak belirli bölüm IP adreslerini çözümlemeyi mümkün hale getirir. Üç bölümleme şeması da desteklenir:

  • Adlandırılmış bölümleme
  • Aralıklı bölümleme
  • Tek bölümleme

Aşağıdaki diyagramda, DNS hizmetinin bölümlenmiş durum bilgisi olan hizmetler için nasıl çalıştığı gösterilmektedir.

Bölümlenmiş durum bilgisi olan hizmetler için DNS adlarının DNS hizmetine göre hizmet adlarına nasıl eşlendiğini gösteren diyagram.

Bölümlenmiş sorgular hakkında daha fazla bilgi için aşağıdaki bölüme bakın.

İşletim sistemi desteği

DNS hizmeti hem Windows hem de Linux kümelerinde desteklenir, ancak Linux desteği şu anda kapsayıcılı hizmetlerle sınırlıdır ve Azure portalı aracılığıyla etkinleştirilemez. Ancak Windows, tüm hizmet türlerini ve dağıtım modellerini destekler.

DNS hizmetini etkinleştirme

Not

DNS hizmetinin etkinleştirilmesi düğümlerde bazı DNS ayarlarını geçersiz kılar. İnternet'e bağlanırken sorun yaşıyorsanız DNS ayarlarınızı denetleyin.

Yeni kümeler

ARM şablonlarını kullanan kümeler

ARM şablonlarıyla yeni bir küme dağıtmak için örnek şablonları kullanabilir veya kendi kümenizi yazabilirsiniz. Henüz yapılmadıysa, DNS hizmeti desteklenen en düşük API sürümleri kullanılarak ve uygun ayarlar eklenerek şablonlarda etkinleştirilebilir. Bunun nasıl gerçekleştirileceğine ilişkin ayrıntılar aşağıda numaralandırılmış listenin 1. ve 2. noktalarında görülebilir.

Azure portalını kullanan kümeler

Portalda standart bir küme oluşturuyorsanız, ÖZELLIKLERe ekle bölümünün altındaki DNS hizmetini dahil et seçeneğinde DNS hizmeti varsayılan olarak etkinleştirilir.

Portal aracılığıyla standart bir küme için DNS hizmetini etkinleştirme işleminin ekran görüntüsü.

Portalda yönetilen küme oluşturuyorsanız, ÖZELLIKLERe ekle bölümünün altındaki DNS hizmeti seçeneğinde DNS hizmeti varsayılan olarak etkinleştirilir.

Portal aracılığıyla yönetilen küme için DNS hizmetini etkinleştirme işleminin ekran görüntüsü.

Mevcut kümeler

DNS hizmetini etkinleştirmek için mevcut bir yönetilen kümeyi güncelleştiriyorsanız, bunu portaldan küme kaynak sayfasındaki Eklenti hizmetleri sayfasını ziyaret ederek yapabilirsiniz. Aksi takdirde, aşağıda başvurulabilecek alternatif yöntemleri kullanarak DNS hizmetini etkinleştirebilirsiniz:

  • Varsa, kümeyi dağıtmak için kullanılan ARM şablonunu kullanın.
  • Azure Kaynak Gezgini'nde kümeye gidin ve aşağıdaki adımlarda (2. ve sonraki adımlarda) görüldüğü gibi küme kaynağını güncelleştirin.
  • Portalda kümeye gidin ve Şablonu Dışarı Aktar'a tıklayın. Daha fazla bilgi edinmek için bkz . Şablonu kaynak grubundan dışarı aktarma.

Bir şablonunuz olduktan sonra, aşağıdaki adımlarla DNS hizmetini etkinleştirebilirsiniz:

  1. Standart kümeler için kaynağın apiVersion veya daha sonraki bir sürümüne 2017-07-01-preview ayarlanıp ayarlanmadığını Microsoft.ServiceFabric/clusters denetleyin ve ayarlanmadıysa aşağıdaki örnekte gösterildiği gibi güncelleştirin:

    {
        "apiVersion": "2017-07-01-preview",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
    }
    

    Yönetilen kümeler için kaynağın apiVersion veya daha sonraki bir sürümüne 2020-01-01-preview ayarlanıp ayarlanmadığını Microsoft.ServiceFabric/managedClusters denetleyin ve ayarlanmadıysa aşağıdaki örnekte gösterildiği gibi güncelleştirin:

    {
        "apiVersion": "2020-01-01-preview",
        "type": "Microsoft.ServiceFabric/managedClusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
    }
    
  2. Şimdi DNS hizmetini aşağıdaki yollardan biriyle etkinleştirin:

    • DNS hizmetini varsayılan ayarlarla etkinleştirmek için addonFeatures , aşağıdaki örnekte gösterildiği gibi bu hizmeti bölümün içindeki properties bölüme ekleyin:

      "properties": {
        ...
        "addonFeatures": [
          "DnsService"
          ],
        ...
      }
      
    • Hizmeti varsayılan ayarlar dışında etkinleştirmek için bölümün fabricSettings içindeki properties bölüme bir DnsService bölüm ekleyin. Bu durumda, DnsService'i öğesine addonFeatureseklemeniz gerekmez. DNS hizmeti için ayarlanabilen özellikler hakkında daha fazla bilgi edinmek için bkz . DNS hizmeti ayarları.

      "properties": {
       ...
       "fabricSettings": [
         ...
         {
           "name": "DnsService",
           "parameters": [
             {
               "name": "IsEnabled",
               "value": "true"
             },
             {
               "name": "<key>",
               "value": "<value>"
             }
           ]
         },
         ...
       ]
      }
      
  3. Küme şablonunu değişikliklerinizle güncelleştirdikten sonra bunları uygulayın ve yükseltmenin tamamlanmasını sağlayın. Yükseltme tamamlandığında, DNS sistem hizmeti kümenizde çalışmaya başlar. Hizmet adı şeklindedir fabric:/System/DnsServiceve Service Fabric gezginindeki Sistem hizmeti bölümünde bulabilirsiniz.

Not

DNS'yi devre dışı durumundan etkin duruma yükseltirken Service Fabric Explorer yeni durumu yansıtmayabilir. Çözmek için, şablonunuzda yükseltme ilkesini değiştirerek düğümleri yeniden başlatın.

Hizmetinizin DNS adını ayarlama

ARM şablonlarıyla, ApplicationManifest.xml dosyasındaki varsayılan hizmetlerle veya PowerShell komutlarıyla hizmetlerinizin DNS adlarını ayarlayabilirsiniz.

Hizmetinizin DNS adı küme genelinde çözümlenebilir, bu nedenle dns adının küme genelinde benzersiz olduğundan emin olmak önemlidir.

bir adlandırma düzeni <ServiceName>.<AppName>kullanmanız kesinlikle önerilir; örneğin, service1.application1. Bir uygulama Docker compose kullanılarak dağıtılırsa, hizmetlere bu adlandırma düzeni kullanılarak otomatik olarak DNS adları atanır.

ARM şablonuyla DNS adını ayarlama

Hizmetlerinizi dağıtmak için ARM şablonları kullanıyorsanız, özelliği uygun bölüme ekleyebilir serviceDnsName ve buna bir değer atayabilirsiniz. Örnekler aşağıda görülebilir:

Standart kümeler

Standart kümeler için kaynağın apiVersion veya daha sonraki bir sürümüne 2019-11-01-preview ayarlanıp ayarlanmadığını Microsoft.ServiceFabric/clusters/applications/services denetleyin ve ayarlanmadıysa aşağıdaki örnekte gösterildiği gibi güncelleştirin:

{
  "apiVersion": "2019-11-01-preview",
  "type": "Microsoft.ServiceFabric/clusters/applications/services",
  "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'), '/', parameters('serviceName'))]",
  "location": "[variables('clusterLocation')]",
  "dependsOn": [
    "[concat('Microsoft.ServiceFabric/clusters/', parameters('clusterName'), '/applications/', parameters('applicationName'))]"
  ],
  "properties": {
    "provisioningState": "Default",
    "serviceKind": "Stateless",
    "serviceTypeName": "[parameters('serviceTypeName')]",
    "instanceCount": "-1",
    "partitionDescription": {
      "partitionScheme": "Singleton"
    },
    "correlationScheme": [],
    "serviceLoadMetrics": [],
    "servicePlacementPolicies": [],
    "serviceDnsName": "[parameters('serviceDnsName')]"
  }
}

Yönetilen kümeler

Yönetilen kümeler için kaynağın apiVersion veya daha sonraki bir sürümüne 2022-10-01-preview ayarlanıp ayarlanmadığını Microsoft.ServiceFabric/managedclusters/applications/services denetleyin ve ayarlanmadıysa aşağıdaki örnekte gösterildiği gibi güncelleştirin:

{
  "apiVersion": "2022-10-01-preview",
  "type": "Microsoft.ServiceFabric/managedclusters/applications/services",
  "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'), '/', parameters('serviceName'))]",
  "location": "[variables('clusterLocation')]",
  "dependsOn": [
    "[concat('Microsoft.ServiceFabric/managedclusters/', parameters('clusterName'), '/applications/', parameters('applicationName'))]"
  ],
  "properties": {
    "serviceKind": "Stateless",
    "serviceTypeName": "[parameters('serviceTypeName')]",
    "instanceCount": "-1",
    "partitionDescription": {
      "partitionScheme": "Singleton"
    },
    "correlationScheme": [],
    "serviceLoadMetrics": [],
    "servicePlacementPolicies": [],
    "serviceDnsName": "[parameters('serviceDnsName')]"
  }
}

ApplicationManifest.xml varsayılan hizmet için DNS adını ayarlama

Projenizi Visual Studio'da veya sık kullandığınız düzenleyicide açın ve ApplicationManifest.xml dosyasını açın. Varsayılan hizmetler bölümüne gidin ve her hizmet için özniteliğini ServiceDnsName ekleyin. Aşağıdaki örnekte hizmetin DNS adının nasıl ayarlanacağı gösterilmektedir stateless1.application1

<Service Name="Stateless1" ServiceDnsName="stateless1.application1">
  <StatelessService ServiceTypeName="Stateless1Type" InstanceCount="[Stateless1_InstanceCount]">
    <SingletonPartition />
  </StatelessService>
</Service>

Aşağıdaki örnek, durum bilgisi olan bir hizmetin DNS adını olarak stateful1.application1ayarlar. Hizmet adlandırılmış bir bölümleme düzeni kullanır. Bölüm adlarının küçük harf olduğuna dikkat edin. Bu, DNS sorgularında hedeflenecek bölümler için bir gereksinimdir; daha fazla bilgi için bkz . Durum bilgisi olan bir hizmet bölümünde DNS sorguları yapma.

<Service Name="Stateful1" ServiceDnsName="stateful1.application1" />
  <StatefulService ServiceTypeName="Stateful1Type" TargetReplicaSetSize="2" MinReplicaSetSize="2">
    <NamedPartition>
      <Partition Name="partition1" />
      <Partition Name="partition2" />
    </NamedPartition>
  </StatefulService>
</Service>

PowerShell ile bir hizmetin DNS adını ayarlama

PowerShell komutunu kullanarak New-ServiceFabricService bir hizmetin DNS adını oluştururken ayarlayabilirsiniz. Aşağıdaki örnek, DNS adıyla stateless1.application1yeni bir durum bilgisi olmayan hizmet oluşturur:

New-ServiceFabricService `
    -Stateless `
    -PartitionSchemeSingleton `
    -ApplicationName fabric:/application1 `
    -ServiceName fabric:/application1/stateless1 `
    -ServiceTypeName Stateless1Type `
    -InstanceCount 1 `
    -ServiceDnsName stateless1.application1

PowerShell komutunu kullanarak Update-ServiceFabricService mevcut bir hizmeti de güncelleştirebilirsiniz. Aşağıdaki örnek, DNS adını stateless1.application1eklemek için mevcut durum bilgisi olmayan bir hizmeti güncelleştirir:

Update-ServiceFabricService `
    -Stateless `
    -ServiceName fabric:/application1/stateless1 `
    -ServiceDnsName stateless1.application1

Service Fabric Explorer'da bir DNS adının ayarlandığını doğrulayın

Hizmet DNS adıyla dağıtıldıktan sonra, Service Fabric Explorer aşağıdaki şekilde gösterildiği gibi hizmetin DNS adını gösterir:

Service Fabric Explorer'da DNS adının ekran görüntüsü.

Not

Bu görünüm, kullanılan Service Fabric Explorer sürümüne bağlı olarak farklı olabilir, ancak DNS adı alanı hizmet sayfasında bir biçimde görünür olmalıdır.

Durum bilgisi olan bir hizmet bölümünde DNS sorguları yapma

Service Fabric 6.3 sürümünden başlayarak, DNS hizmeti hizmet bölümleri için sorguları destekler. Bölümlenmiş hizmet sorguları için desteği etkinleştirmek için DNS hizmeti ayarlarının seçeneği EnablePartitionedQuery trueolarak ayarlanacak şekilde güncelleştirilmiş olması gerekir.

DNS sorgularında kullanılacak bölümler için aşağıdaki adlandırma kısıtlamaları geçerlidir:

  • Bölüm adları DNS uyumlu olmalıdır.
  • Nokta veya '.' dahil olmak üzere çok etiketli bölüm adları kullanılmamalıdır.
  • Bölüm adları küçük harf olmalıdır.

Bir bölümü hedefleyen DNS sorguları aşağıdaki gibi biçimlendirilir:

    <First-Label-Of-Partitioned-Service-DNSName><PartitionPrefix><Target-Partition-Name><PartitionSuffix>.<Remaining-Partitioned-Service-DNSName>

Where:

  • Bölümlenmiş-Hizmet-DNSName'in ilk etiketi, hizmet DNS adınızın ilk bölümüdür.
  • PartitionPrefix , küme bildiriminin DnsService bölümünde veya kümenin ARM şablonu aracılığıyla ayarlanabilen bir değerdir. Varsayılan değer :"--". Daha fazla bilgi için bkz . DNS hizmeti ayarları.
  • Target-Partition-Name bölümün adıdır.
  • PartitionSuffix , küme bildiriminin DnsService bölümünde veya kümenin ARM şablonu aracılığıyla ayarlanabilen bir değerdir. Varsayılan değer boş dizedir. Daha fazla bilgi için bkz . DNS hizmeti ayarları.
  • Kalan Bölümlenmiş-Hizmet-DNSName , hizmet DNS adınızın kalan bölümüdür.

Aşağıdaki örneklerde ve için varsayılan ayarlara sahip bir kümede çalışan bölümlenmiş hizmetler için PartitionPrefix DNS sorguları gösterilmektedir PartitionSuffix:

  • Bir hizmetin aralıklı bölümleme düzeni kullanan DNS adıyla backendrangedschemesvc.application "0" bölümünü çözümlemek için kullanın backendrangedschemesvc--0.application.
  • Bir hizmetin adlandırılmış bölümleme düzenini kullanan DNS adıyla backendnamedschemesvc.application "ilk" bölümünü çözümlemek için kullanın backendnamedschemesvc--first.application.

DNS hizmeti, bölümün birincil çoğaltmasıyla ilişkili uç noktanın IP adresini döndürür. Bölüm belirtilmezse, DNS hizmeti rastgele bir bölüm seçer.

Hizmetlerinizde DNS adlarını kullanma

Hizmetleri DNS adlarıyla dağıtırsanız, DNS adına başvurarak kullanıma sunulan uç noktaların IP adresini bulabilirsiniz. DNS hizmeti durum bilgisi olmayan hizmetler için ve Service Fabric sürüm 6.3 ve sonraki sürümlerde durum bilgisi olan hizmetler için çalışır. Service Fabric'in 6.3 öncesi sürümlerinde çalışan durum bilgisi olan hizmetler için, belirli bir hizmet bölümünü çağırmak üzere HTTP çağrıları için yerleşik ters proxy hizmetini kullanabilirsiniz.

Dinamik bağlantı noktaları DNS hizmeti tarafından desteklenmez. Dinamik bağlantı noktaları kullanan hizmetleri çözümlemek için ters ara sunucu hizmetini kullanabilirsiniz.

Aşağıdaki kodda, DNS aracılığıyla durum bilgisi olmayan bir hizmetin nasıl çağrılacakları gösterilmektedir. Yalnızca DNS adını, bağlantı noktasını ve URL'nin bir parçası olarak isteğe bağlı herhangi bir yolu sağladığınız normal bir HTTP çağrısıdır.

public class ValuesController : Controller
{
    // GET api
    [HttpGet]
    public async Task<string> Get()
    {
        string result = "";
        try
        {
            Uri uri = new Uri("http://stateless1.application1:8080/api/values");
            HttpClient client = new HttpClient();
            var response = await client.GetAsync(uri);
            result = await response.Content.ReadAsStringAsync();

        }
        catch (Exception e)
        {
            Console.Write(e.Message);
        }

        return result;
    }
}

Aşağıdaki kod, durum bilgisi olan bir hizmetin belirli bir bölümünde yapılan çağrıyı gösterir. Bu durumda, DNS adı bölüm adını (bölüm1) içerir. Çağrısı, ve PartitionSuffixiçin PartitionPrefix varsayılan değerlere sahip bir küme olduğunu varsayar.

public class ValuesController : Controller
{
    // GET api
    [HttpGet]
    public async Task<string> Get()
    {
        string result = "";
        try
        {
            Uri uri = new Uri("http://stateful1--partition1.application1:8080/api/values");
            HttpClient client = new HttpClient();
            var response = await client.GetAsync(uri);
            result = await response.Content.ReadAsStringAsync();

        }
        catch (Exception e)
        {
            Console.Write(e.Message);
        }

        return result;
    }
}

Özyinelemeli sorgular

DNS hizmetinin kendi başına çözümleyebildiği DNS adları için (örneğin, bir genel DNS adı), sorguyu düğümlerde önceden var olan özyinelemeli DNS sunucularına iletir.

Ortak adlar için DNS sorgularının nasıl çözümlendüğünü gösteren diyagram.

Service Fabric 9.0'dan önce, bu sunucular bir yanıt alınana kadar seri olarak sorgulandı ve arada 5 saniyelik sabit bir zaman aşımı süresi vardı. Bir sunucu zaman aşımı süresi içinde yanıt vermemişse, bir sonraki sunucu (varsa) sorgulanır. Bu DNS sunucularının herhangi bir sorunla karşılaşması durumunda, DNS sorgularının tamamlanması 5 saniyeden uzun sürebilir ve bu ideal değildir.

Service Fabric 9.0'da başlayarak paralel özyinelemeli sorgu desteği eklendi. Paralel sorgularla, tüm özyinelemeli DNS sunucularıyla aynı anda bağlantı kurulabilir ve burada ilk yanıt kazanır. Bu, daha önce bahsedilen senaryoda daha hızlı yanıtlar elde eder. Bu seçenek varsayılan olarak etkin değildir.

Service Fabric 9.0'da zaman aşımı süreleri ve sorgu denemeleri de dahil olmak üzere özyinelemeli sorguların davranışını denetlemek için ayrıntılı seçenekler de sunulur. Bu seçenekler DNS hizmeti ayarlarında ayarlanabilir:

  • RecursiveQuerySerialMaxAttempts - En fazla denenecek seri sorgu sayısı. Bu sayı iletme DNS sunucularının sayısından yüksekse, tüm sunucular tam olarak bir kez denendikten sonra sorgulama durdurulacaktır.
  • RecursiveQuerySerialTimeout - Denenen her seri sorgu için saniye olarak zaman aşımı değeri.
  • RecursiveQueryParallelMaxAttempts - Paralel sorgu deneme sayısı. Seri sorgular için en fazla deneme tükendikten sonra paralel sorgular yürütülür.
  • RecursiveQueryParallelTimeout - Her paralel sorgu için saniye olarak zaman aşımı değeri.

Sınırlamalar ve bilinen sorunlar

  • Dinamik bağlantı noktaları DNS hizmeti tarafından desteklenmez. Dinamik bağlantı noktalarında kullanıma sunulan hizmetleri çözmek için ters proxy hizmetini kullanın.
  • Linux desteği şu anda kapsayıcılı hizmetlerle sınırlıdır. Linux'ta işlem tabanlı hizmetler şu anda DNS hizmetini kullanamıyor.
  • Linux kümeleri için DNS hizmeti Azure portalı aracılığıyla etkinleştirilemez.
  • Bir hizmet için DNS adı değiştirilirse, ad güncelleştirmeleri bazı senaryolarda hemen görünmeyebilir. Sorunu çözmek için DNS hizmeti örnekleri küme genelinde yeniden başlatılmalıdır.

Sonraki adımlar

Bağlantı kurma ve hizmetlerle iletişim kurma ile küme içindeki hizmet iletişimi hakkında daha fazla bilgi edinin