Megosztás a következőn keresztül:


DNS-szolgáltatás az Azure Service Fabricben

A DNS-szolgáltatás egy választható rendszerszolgáltatás, amelyet a fürtben engedélyezhet, hogy más szolgáltatásokat is felfedezhessen a DNS protokoll használatával.

Számos szolgáltatás, különösen a tárolóalapú szolgáltatások, egy már meglévő URL-címen keresztül kezelhetők. Kívánatos, hogy ezeket a szolgáltatásokat a Standard DNS protokoll használatával oldja fel a Service Fabric elnevezési szolgáltatás protokollja helyett. A DNS-szolgáltatás lehetővé teszi a DNS-nevek szolgáltatásnévre való leképezését, és ezáltal a végponti IP-címek feloldását. Az ilyen funkciók fenntartják a tárolóalapú szolgáltatások hordozhatóságát a különböző platformokon, és egyszerűbbé tehetik a "felemelést és váltást" azáltal, hogy lehetővé teszik a meglévő szolgáltatás URL-címeinek használatát a kód átírása helyett az elnevezési szolgáltatás használatához.

A DNS-szolgáltatás leképezi a DNS-neveket a szolgáltatásnevekre, amelyet az elnevezési szolgáltatás felold a szolgáltatásvégpont visszaadásához. A szolgáltatás DNS-neve a létrehozáskor lesz megadva. Az alábbi ábra bemutatja, hogyan működik a DNS-szolgáltatás az állapot nélküli szolgáltatások esetében. A rövidség kedvéért a diagramok csak egy végpontot mutatnak a szolgáltatásokhoz, bár mindegyik szolgáltatás több végponttal is rendelkezhet.

Az állapot nélküli szolgáltatások DNS-szolgáltatása által a szolgáltatásnevekre leképezett DNS-neveket bemutató ábra.

A Service Fabric 6.3-ás verziójától kezdve a Service Fabric DNS-protokollja ki lett terjesztve a particionált állapotalapú szolgáltatások kezelésére szolgáló sémára. Ezek a bővítmények lehetővé teszik adott partíció IP-címek feloldását az állapotalapú szolgáltatás DNS-nevének és a partíciónévnek a kombinációjával. Mindhárom particionálási séma támogatott:

  • Elnevezett particionálás
  • Tartományos particionálás
  • Singleton particionálás

Az alábbi ábra bemutatja, hogyan működik a DNS-szolgáltatás a particionált állapotalapú szolgáltatásokhoz.

Diagram a DNS-nevek szolgáltatásnevekhez való hozzárendeléséről a DNS-szolgáltatás által a particionált állapotalapú szolgáltatásokhoz.

A particionált lekérdezésekkel kapcsolatos további információkért tekintse meg az alábbi szakaszt.

Operációs rendszer támogatása

A DNS-szolgáltatás windowsos és linuxos fürtökön is támogatott, bár a Linux támogatása jelenleg tárolóalapú szolgáltatásokra korlátozódik, és nem engedélyezhető az Azure Portalon keresztül. A Windows azonban támogatja az összes szolgáltatástípust és üzembe helyezési modellt.

A DNS-szolgáltatás engedélyezése

Feljegyzés

A DNS-szolgáltatás engedélyezése felülbírál bizonyos DNS-beállításokat a csomópontokon. Ha problémákat tapasztal az internethez való csatlakozás során, ellenőrizze a DNS-beállításokat.

Új fürtök

ARM-sablonokat használó fürtök

Ha arm-sablonokkal szeretne üzembe helyezni egy új fürtöt, használhatja a mintasablonokat , vagy sajátot írhat. Ha még nem tette meg, a DNS-szolgáltatás a minimálisan támogatott API-verziók használatával és a megfelelő beállítások hozzáadásával engedélyezhető a sablonokban. Ennek módjáról az alábbiakban a számozott lista 1. és 2. pontjából tájékozódhat.

Fürtök az Azure Portal használatával

Ha standard fürtöt hoz létre a portálon, a DNS-szolgáltatás alapértelmezés szerint engedélyezve van a Hozzáadás a szolgáltatásokon szakasz DNS-szolgáltatás belefoglalása lehetőségében.

Képernyőkép egy szabványos fürt DNS-szolgáltatásának a portálon keresztüli engedélyezéséről.

Ha felügyelt fürtöt hoz létre a portálon, a DNS-szolgáltatás alapértelmezés szerint engedélyezve van a DNS-szolgáltatás beállításában, a Szolgáltatások hozzáadása szakaszban.

Képernyőkép egy felügyelt fürt DNS-szolgáltatásának a portálon keresztüli engedélyezéséről.

Meglévő fürtök

Ha egy meglévő felügyelt fürtöt frissít a DNS-szolgáltatás engedélyezéséhez, ezt a portálon teheti meg a bővítményszolgáltatások lapjának a fürt erőforráslapján. Ellenkező esetben engedélyezheti a DNS-szolgáltatást az alábbi alternatív módszerek használatával:

  • Ha szükséges, használja a fürt üzembe helyezéséhez használt ARM-sablont.
  • Lépjen a fürtre az Azure Resource Explorerben , és frissítse a fürterőforrást az alábbi lépésekben leírtak szerint (a 2. lépéstől kezdve).
  • Lépjen a fürtre a portálon, és kattintson a Sablon exportálása gombra. További információ: A sablon exportálása erőforráscsoportból.

Miután létrehozott egy sablont, az alábbi lépésekkel engedélyezheti a DNS-szolgáltatást:

  1. Standard fürtök esetén ellenőrizze, hogy az apiVersion 2017-07-01-preview erőforrás értéke vagy újabb Microsoft.ServiceFabric/clusters értéke van-e, és ha nem, frissítse azt az alábbi példában látható módon:

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

    Felügyelt fürtök esetén ellenőrizze, hogy az apiVersion 2020-01-01-preview erőforrás értéke vagy újabb-e Microsoft.ServiceFabric/managedClusters , és ha nem, frissítse azt az alábbi példában látható módon:

    {
        "apiVersion": "2020-01-01-preview",
        "type": "Microsoft.ServiceFabric/managedClusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
    }
    
  2. Most engedélyezze a DNS-szolgáltatást az alábbi módok egyikével:

    • Ha alapértelmezett beállításokkal szeretné engedélyezni a DNS-szolgáltatást, adja hozzá a addonFeatures szakaszon belüli szakaszhoz az properties alábbi példában látható módon:

      "properties": {
        ...
        "addonFeatures": [
          "DnsService"
          ],
        ...
      }
      
    • Ha nem alapértelmezett beállításokkal szeretné engedélyezni a szolgáltatást, adjon hozzá egy szakaszt DnsService a fabricSettings properties szakaszon belüli szakaszhoz. Ebben az esetben nem kell hozzáadnia a DnsService-t a fájlhoz addonFeatures. A DNS-szolgáltatáshoz beállítható tulajdonságokról további információt a DNS-szolgáltatás beállításai között talál.

      "properties": {
       ...
       "fabricSettings": [
         ...
         {
           "name": "DnsService",
           "parameters": [
             {
               "name": "IsEnabled",
               "value": "true"
             },
             {
               "name": "<key>",
               "value": "<value>"
             }
           ]
         },
         ...
       ]
      }
      
  3. Miután frissítette a fürtsablont a módosításokkal, alkalmazza őket, és hagyja, hogy a frissítés befejeződjön. A frissítés befejezése után a DNS-rendszerszolgáltatás elindul a fürtben. A szolgáltatás neve fabric:/System/DnsServicea Service Fabric Explorer Rendszerszolgáltatás szakaszában található.

Feljegyzés

Ha a DNS-t letiltottról engedélyezettre frissíti, előfordulhat, hogy a Service Fabric Explorer nem tükrözi az új állapotot. A megoldáshoz indítsa újra a csomópontokat a sablon frissítési szabályzatának módosításával.

A szolgáltatás DNS-nevének beállítása

A szolgáltatások DNS-neveit ARM-sablonokkal, alapértelmezett szolgáltatásokkal a ApplicationManifest.xml fájlban vagy PowerShell-parancsokkal állíthatja be.

A szolgáltatás DNS-neve a teljes fürtben feloldható, ezért fontos biztosítani a DNS-név egyediségét a fürtben.

Erősen ajánlott például a ( ) service1.application1elnevezési sémáját <ServiceName>.<AppName>használni. Ha egy alkalmazás a Docker compose használatával van üzembe helyezve, a szolgáltatások automatikusan DNS-neveket kapnak ezzel az elnevezési sémával.

A DNS-név beállítása ARM-sablonnal

Ha ARM-sablonokat használ a szolgáltatások üzembe helyezéséhez, hozzáadhatja a serviceDnsName tulajdonságot a megfelelő szakaszhoz, és hozzárendelhet hozzá egy értéket. Példák az alábbiakban láthatók:

Standard fürtök

Standard fürtök esetén ellenőrizze, hogy az apiVersion 2019-11-01-preview erőforrás értéke vagy újabb Microsoft.ServiceFabric/clusters/applications/services értéke van-e, és ha nem, frissítse azt az alábbi példában látható módon:

{
  "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')]"
  }
}

Felügyelt fürtök

Felügyelt fürtök esetén ellenőrizze, hogy az apiVersion 2022-10-01-preview erőforrás értéke vagy újabb-e Microsoft.ServiceFabric/managedclusters/applications/services , és ha nem, frissítse azt az alábbi példában látható módon:

{
  "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')]"
  }
}

Alapértelmezett szolgáltatás DNS-nevének beállítása a ApplicationManifest.xml

Nyissa meg a projektet a Visual Studióban vagy a kedvenc szerkesztőjében, és nyissa meg a ApplicationManifest.xml fájlt. Lépjen az alapértelmezett szolgáltatások szakaszra, és minden szolgáltatáshoz adja hozzá az ServiceDnsName attribútumot. Az alábbi példa bemutatja, hogyan állíthatja be a szolgáltatás DNS-nevét a következőre: stateless1.application1

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

Az alábbi példa egy állapotalapú szolgáltatás DNS-nevét állítja be a következőre stateful1.application1: . A szolgáltatás nevesített particionálási sémát használ. Figyelje meg, hogy a partíciónevek kisbetűsek. Ez a DNS-lekérdezésekben megcélzott partíciókra vonatkozó követelmény; További információ: DNS-lekérdezések készítése állapotalapú szolgáltatáspartíción.

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

Szolgáltatás DNS-nevének beállítása a PowerShell-lel

A szolgáltatás DNS-nevét a PowerShell-paranccsal hozhatja létre New-ServiceFabricService . Az alábbi példa egy új állapot nélküli szolgáltatást hoz létre DNS-névvel stateless1.application1:

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

Meglévő szolgáltatást Update-ServiceFabricService a PowerShell-paranccsal is frissíthet. Az alábbi példa egy meglévő állapot nélküli szolgáltatást frissít a DNS-név stateless1.application1hozzáadásához:

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

Ellenőrizze, hogy a DNS-név be van-e állítva a Service Fabric Explorerben

Miután üzembe helyezte a szolgáltatást a DNS-névvel, a Service Fabric Explorer megjeleníti a szolgáltatás DNS-nevét az alábbi ábrán látható módon:

Képernyőkép a DNS-névről a Service Fabric Explorerben.

Feljegyzés

Ez a nézet a Service Fabric Explorer használt verziójától függően eltérő lehet, a DNS-név mezőnek azonban valamilyen formában láthatónak kell lennie a szolgáltatásoldalon.

DNS-lekérdezések készítése állapotalapú szolgáltatáspartíción

A Service Fabric 6.3-ás verziójától kezdve a DNS-szolgáltatás támogatja a szolgáltatáspartíciók lekérdezéseit. A particionált szolgáltatás lekérdezéseinek támogatásának engedélyezéséhez a DNS-szolgáltatás beállításait frissíteni kell a beállítás trueEnablePartitionedQuery beállításához.

A DNS-lekérdezésekben használt partíciókra az alábbi elnevezési korlátozások vonatkoznak:

  • A partícióneveknek DNS-kompatibilisnek kell lenniük.
  • A többcímkés partíciónevek, beleértve a pont vagy a "." nevet, nem használhatók.
  • A partícióneveknek kisbetűsnek kell lenniük.

A partíciót megcélzott DNS-lekérdezések a következőképpen vannak formázva:

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

Ahol:

  • A First-Label-Of-Partitioned-Service-DNSName a szolgáltatás DNS-nevének első része.
  • A PartitionPrefix egy olyan érték, amely a fürtjegyzék DnsService szakaszában vagy a fürt ARM-sablonján keresztül állítható be. Az alapértelmezett érték a "--". További információ: DNS-szolgáltatás beállításai.
  • A Target-Partition-Name a partíció neve.
  • A PartitionSuffix egy olyan érték, amely a fürtjegyzék DnsService szakaszában vagy a fürt ARM-sablonján keresztül állítható be. Az alapértelmezett érték üres sztring. További információ: DNS-szolgáltatás beállításai.
  • A fennmaradó particionált-service-DNSName a szolgáltatás DNS-nevének fennmaradó része.

Az alábbi példák a fürtön futó particionált szolgáltatások DNS-lekérdezéseit mutatják be, amelyek alapértelmezett beállításai PartitionPrefix a következők PartitionSuffix:

  • Egy tartományos particionálási sémát használó DNS-névvel backendrangedschemesvc.application rendelkező szolgáltatás "0" partíciójának feloldásához használja backendrangedschemesvc--0.applicationa következőt: .
  • A névvel ellátott particionálási sémát használó DNS-névvel backendnamedschemesvc.application rendelkező szolgáltatás "első" partíciójának feloldásához használja backendnamedschemesvc--first.applicationa következőt: .

A DNS-szolgáltatás a partíció elsődleges replikájához társított végpont IP-címét adja vissza. Ha nincs megadva partíció, a DNS-szolgáltatás véletlenszerűen kiválaszt egy partíciót.

DNS-nevek használata a szolgáltatásokban

Ha DNS-névvel telepít szolgáltatásokat, a DNS-névre hivatkozva megtalálhatja a közzétett végpontok IP-címét. A DNS-szolgáltatás állapot nélküli szolgáltatásokhoz, a Service Fabric 6.3-es és újabb verziójában pedig állapotalapú szolgáltatásokhoz használható. A Service Fabric 6.3 előtti verzióin futó állapotalapú szolgáltatások esetén a HTTP-hívásokhoz használt beépített fordított proxyszolgáltatással meghívhat egy adott szolgáltatáspartíciót.

A DNS-szolgáltatás nem támogatja a dinamikus portokat. A fordított proxyszolgáltatással feloldhatja a dinamikus portokat használó szolgáltatásokat.

Az alábbi kód bemutatja, hogyan hívhat meg állapot nélküli szolgáltatást DNS-sel. Ez egyszerűen egy rendszeres HTTP-hívás, ahol az URL-cím részeként megadja a DNS nevét, a portot és a választható elérési utakat.

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

Az alábbi kód egy állapotalapú szolgáltatás adott partíciójára irányuló hívást mutat be. Ebben az esetben a DNS-név tartalmazza a partíció nevét (partíció1). A hívás feltételezi, hogy a fürt alapértelmezett értékei és PartitionSuffixa PartitionPrefix .

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

Rekurzív lekérdezések

Azon DNS-nevek esetében, amelyeket a DNS-szolgáltatás önállóan nem tud feloldani (például nyilvános DNS-nevet), a lekérdezést továbbítja a csomópontok meglévő rekurzív DNS-kiszolgálóinak.

A nyilvános nevek DNS-lekérdezéseinek feloldását bemutató ábra.

A Service Fabric 9.0 előtt ezeket a kiszolgálókat a rendszer sorozatosan lekérdezte, amíg nem érkezett válasz, és a kettő között rögzített időtúllépési időszak 5 másodperc volt. Ha egy kiszolgáló nem válaszolt az időtúllépési időszakon belül, a rendszer lekérdezi a következő kiszolgálót (ha elérhető). Abban az esetben, ha ezek a DNS-kiszolgálók bármilyen problémát tapasztalnának, a DNS-lekérdezések végrehajtása 5 másodpercnél tovább tartana, ami nem ideális.

A Service Fabric 9.0-tól kezdve a párhuzamos rekurzív lekérdezések támogatása lett hozzáadva. Párhuzamos lekérdezések esetén az összes rekurzív DNS-kiszolgáló egyszerre érhető el, ahol az első válasz nyer. Ez gyorsabb válaszokat eredményez a korábban említett forgatókönyvben. Ez a beállítás alapértelmezés szerint nincs engedélyezve.

A Service Fabric 9.0-ban részletes beállításokat is bevezetnek a rekurzív lekérdezések viselkedésének szabályozásához, beleértve az időtúllépési időszakokat és a lekérdezési kísérleteket. Ezek a beállítások a DNS-szolgáltatás beállításaiban állíthatók be:

  • RecursiveQuerySerialMaxAttempts – Legfeljebb a megkísérlendő soros lekérdezések száma. Ha ez a szám nagyobb, mint a továbbító DNS-kiszolgálók száma, a lekérdezés leáll, ha az összes kiszolgálót pontosan egyszer kísérelték meg.
  • RecursiveQuerySerialTimeout – Az időtúllépési érték másodpercben az egyes megkísérelt soros lekérdezésekhez.
  • RecursiveQueryParallelMaxAttempts – A párhuzamos lekérdezések hányszor lesznek megkísérelve. A párhuzamos lekérdezések a soros lekérdezések maximális kísérleteinek kimerítése után lesznek végrehajtva.
  • RecursiveQueryParallelTimeout – Az időtúllépési érték másodpercben az egyes párhuzamos lekérdezésekhez.

Korlátozások és ismert problémák

  • A DNS-szolgáltatás nem támogatja a dinamikus portokat. A dinamikus portokon közzétett szolgáltatások feloldásához használja a fordított proxyszolgáltatást.
  • A Linux támogatása jelenleg tárolóalapú szolgáltatásokra korlátozódik. A Linuxon futó folyamatalapú szolgáltatások jelenleg nem tudják használni a DNS-szolgáltatást.
  • A Linux-fürtök DNS-szolgáltatása nem engedélyezhető az Azure Portalon keresztül.
  • Ha egy szolgáltatás DNS-neve módosul, előfordulhat, hogy egyes esetekben a névfrissítések nem jelennek meg azonnal. A probléma megoldásához a DNS-szolgáltatáspéldányokat újra kell indítani a fürtben.

Következő lépések

További információ a fürt szolgáltatáskommunikációjáról a csatlakozással és a szolgáltatásokkal való kommunikációval kapcsolatban