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.
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.
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.
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.
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:
Standard fürtök esetén ellenőrizze, hogy az
apiVersion
2017-07-01-preview
erőforrás értéke vagy újabb-eMicrosoft.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ítva2020-01-01-preview
azMicrosoft.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')]", ... }
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 azproperties
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
afabricSettings
properties
szakaszon belüli szakaszhoz. Ebben az esetben nem kell hozzáadnia a DnsService-t a fájlhozaddonFeatures
. 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>" } ] }, ... ] }
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 apiVersion
2019-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.application1
hozzá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:
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 PartitionPrefix
PartitionSuffix
rendelkező 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őtbackendrangedschemesvc--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őtbackendnamedschemesvc--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 PartitionSuffix
az 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 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