Share via


DNS-szolgáltatás az Azure Service Fabricben

A DNS-szolgáltatás egy választható rendszerszolgáltatás, amelyet a fürtön engedélyezhet más szolgáltatások felderítéséhez a DNS-protokoll használatával.

Számos szolgáltatás, különösen a tárolóalapú szolgáltatások, egy 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ásprotokoll helyett. A DNS-szolgáltatás lehetővé teszi a DNS-nevek szolgáltatásnévhez való leképezését, és ezáltal a végpont IP-címeinek feloldását. Az ilyen funkciók megőrzik a tárolóalapú szolgáltatások hordozhatóságát a különböző platformokon, és egyszerűbbé tehetik a "lift and shift" forgatókönyveket azáltal, hogy lehetővé teszik a meglévő szolgáltatás URL-címeinek használatát a kód újraí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, amelyeket 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 van megadva. Az alábbi ábra bemutatja, hogyan működik a DNS-szolgáltatás az állapot nélküli szolgáltatásokhoz. A rövidség kedvéért a diagramok csak egy végpontot mutatnak a szolgáltatásokhoz, bár minden szolgáltatás több végponttal is rendelkezhet.

Ábra arról, hogy a DNS-nevek hogyan vannak leképezve szolgáltatásnevekre a DNS-szolgáltatás által az állapot nélküli szolgáltatások esetében.

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ó nevének 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, amely bemutatja, hogy a DNS-nevek hogyan vannak leképezve szolgáltatásnevekre a DNS-szolgáltatás által particionált állapotalapú szolgáltatások esetében.

A particionált lekérdezésekről az alábbi szakaszban talál további információt.

Operációs rendszer támogatása

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

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

Megjegyzés

A DNS-szolgáltatás engedélyezése felülbírál néhány DNS-beállítást 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 is írhat. Ha még nem tette meg, a DNS-szolgáltatás engedélyezhető a sablonokban a minimálisan támogatott API-verziók használatával és a megfelelő beállítások hozzáadásával. Ennek módjáról az alábbiakban a számozott lista 1. és 2. pontjából tájékozódhat.

Azure Portal használó fürtök

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ásokhoz szakasz DNS-szolgáltatás belefoglalása lehetőségében.

Képernyőkép a DNS-szolgáltatás standard fürtökhöz való engedélyezéséről a portálon keresztü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ásban 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 fürterőforrás-oldaláról. Ellenkező esetben engedélyezheti a DNS-szolgáltatást az alábbi alternatív módszerekkel:

  • 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).
  • Nyissa meg a fürtöt a portálon, és kattintson a Sablon exportálása elemre. További információ: 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 apiVersion2017-07-01-preview erőforrás értéke vagy újabb-e Microsoft.ServiceFabric/clusters , és ha nem, frissítse 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 a apiVersion vagy újabb értékre van-e állítva 2020-01-01-preview az Microsoft.ServiceFabric/managedClusters erőforráshoz, és ha nem, frissítse 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 engedélyezni szeretné a DNS-szolgáltatást az alapértelmezett beállításokkal, adja hozzá a addonFeatures szakasz szakaszához az properties alábbi példában látható módon:

      "properties": {
        ...
        "addonFeatures": [
          "DnsService"
          ],
        ...
      }
      
    • Ha az alapértelmezett beállításoktól eltérő beállításokkal szeretné engedélyezni a szolgáltatást, adjon hozzá egy szakaszt DnsService a fabricSettingsproperties 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 című témakörben 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/DnsService, és a Service Fabric Explorer Rendszerszolgáltatás szakaszában található.

Megjegyzés

Ha a DNS-t letiltottról engedélyezettre frissíti, előfordulhat, hogy 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-nevét ARM-sablonokkal, az alapértelmezett szolgáltatásokkal a ApplicationManifest.xml fájlban vagy PowerShell-parancsokkal állíthatja be.

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

Erősen ajánlott az elnevezési sémát <ServiceName>.<AppName>használni, például service1.application1: . 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óak:

Standard fürtök

Standard fürtök esetén ellenőrizze, hogy az apiVersion2019-11-01-preview erőforrás értéke vagy újabb-e Microsoft.ServiceFabric/clusters/applications/services , és ha nem, frissítse 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 a apiVersion vagy újabb értékre van-e állítva 2022-10-01-preview az Microsoft.ServiceFabric/managedclusters/applications/services erőforráshoz, és ha nem, frissítse 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. Nyissa meg az alapértelmezett szolgáltatások szakaszt, é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 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 a következőre állítja be: stateful1.application1. A szolgáltatás nevesített particionálási sémát használ. Figyelje meg, hogy a partíciónevek kisbetűk. 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 állíthatja be a New-ServiceFabricService létrehozásakor. Az alábbi példa egy új állapot nélküli szolgáltatást hoz létre a 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 Explorer

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

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

Megjegyzés

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

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

A Service Fabric 6.3-es 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 EnablePartitionedQuery beállításához.true

A DNS-lekérdezésekben használt partíciókra a következő elnevezési korlátozások vonatkoznak:

  • A partícióneveknek DNS-kompatibilisnek kell lenniük.
  • Nem szabad többcímke partícióneveket használni, beleértve a pont vagy a "." partícióneveket.
  • 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 érték, amely a fürt jegyzékfájljának 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ásbeállítások.
  • A Target-Partition-Name a partíció neve.
  • A PartitionSuffix egy é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 az üres sztring. További információ: DNS-szolgáltatásbeállítások.
  • A remaining-Partitioned-Service-DNSName a szolgáltatás DNS-nevének fennmaradó része.

Az alábbi példák a és alapértelmezett beállításokkal PartitionPrefixPartitionSuffixrendelkező fürtön futó particionált szolgáltatások DNS-lekérdezéseit mutatják be:

  • Egy tartományhoz tartozó 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 a következőt backendrangedschemesvc--0.application: .
  • A névvel ellátott particionálási sémát használó DNS-névvel backendnamedschemesvc.application rendelkező szolgáltatás "first" partíciójának feloldásához használja a következőt backendnamedschemesvc--first.application: .

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óiban pedig állapotalapú szolgáltatásokhoz használható. A Service Fabric 6.3-asnál korábbi verzióiban futó állapotalapú szolgáltatások esetén a HTTP-hívásokhoz a beépített fordított proxyszolgáltatással hívhat meg 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 normál HTTP-hívás, ahol meg kell adnia a DNS-nevet, a portot és bármely választható elérési utat az URL-cím részeként.

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 és PartitionSuffixaz alapértelmezett értékeit PartitionPrefix tartalmazó fürt.

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 önmagában nem tud feloldani (például egy nyilvános DNS-név), a lekérdezést a csomópontokon már meglévő rekurzív DNS-kiszolgálókra továbbítja.

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 a rendszer nem kapott választ, és az időkorlát 5 másodperc volt. Ha egy kiszolgáló nem válaszol 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 tapasztalnak, a DNS-lekérdezések végrehajtása 5 másodpercnél tovább tart, ami nem ideális.

A Service Fabric 9.0-tól kezdve bővült a párhuzamos rekurzív lekérdezések támogatása. 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 bevezetünk a rekurzív lekérdezések viselkedésének szabályozására, 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érelt 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 megkísérlésének száma. 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ésekre vonatkozóan.

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

  • A DNS-szolgáltatás nem támogatja a dinamikus portokat. A dinamikus portokon elérhető 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 használhatják a DNS-szolgáltatást.
  • A Linux-fürtök DNS-szolgáltatása nem engedélyezhető Azure Portal keresztül.
  • Ha egy szolgáltatás DNS-nevét módosítják, 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ön belüli szolgáltatáskommunikációról a csatlakozással és a szolgáltatásokkal való kommunikációval