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


Fordított proxy az Azure Service Fabricben

Az Azure Service Fabricbe beépített fordított proxy segít a Service Fabric-fürtben futó mikroszolgáltatások felderítésében és a http-végpontokkal rendelkező más szolgáltatásokkal való kommunikációban.

Mikroszolgáltatások kommunikációs modellje

A Service Fabric mikroszolgáltatásai a fürt csomópontjainak egy részhalmazán futnak, és különböző okokból migrálhatók a csomópontok között. Ennek eredményeképpen a mikroszolgáltatások végpontjai dinamikusan változhatnak. A fürt más szolgáltatásaival való kommunikációhoz a mikroszolgáltatásnak az alábbi lépéseket kell végrehajtania:

  1. A szolgáltatás helyének feloldása az elnevezési szolgáltatáson keresztül.
  2. Csatlakozzon a szolgáltatáshoz.
  3. Az előző lépések körbefuttatása egy olyan hurokban, amely szolgáltatásfeloldási és újrapróbálkozási szabályzatokat implementál a kapcsolati hibákra való alkalmazáshoz

További információ: Csatlakozás és kommunikáció a szolgáltatásokkal.

Kommunikáció fordított proxy használatával

A fordított proxy egy olyan szolgáltatás, amely minden csomóponton fut, és kezeli a végpontfeloldásokat, az automatikus újrapróbálkozási és egyéb csatlakozási hibákat az ügyfélszolgáltatások nevében. A fordított proxy konfigurálható úgy, hogy különböző szabályzatokat alkalmazzon az ügyfélszolgáltatások kéréseinek kezelésekor. Fordított proxy használatával az ügyfélszolgáltatás bármilyen ügyféloldali HTTP-kommunikációs kódtárat használhat, és nem igényel speciális feloldási és újrapróbálkozási logikát a szolgáltatásban.

A fordított proxy egy vagy több végpontot tesz elérhetővé a helyi csomóponton ahhoz, hogy az ügyfélszolgáltatások kéréseket küldjenek más szolgáltatásoknak.

Belső kommunikáció

Feljegyzés

Támogatott platformok

A Fordított proxy a Service Fabricben jelenleg az alábbi platformokat támogatja

  • Windows-fürt: Windows 8 vagy újabb vagy Windows Server 2012 és újabb
  • Linux-fürt: A fordított proxy jelenleg nem érhető el Linux-fürtökhöz

Mikroszolgáltatások elérése a fürtön kívülről

A mikroszolgáltatások alapértelmezett külső kommunikációs modellje egy olyan opt-in modell, amelyben az egyes szolgáltatások nem érhetők el közvetlenül külső ügyfelekről. Az Azure Load Balancer, amely a mikroszolgáltatások és a külső ügyfelek közötti hálózati határ, elvégzi a hálózati címfordítást, és továbbítja a külső kéréseket a belső IP:portvégpontoknak. Ahhoz, hogy egy mikroszolgáltatás végpontja közvetlenül elérhető legyen a külső ügyfelek számára, először konfigurálnia kell a Load Balancert, hogy a forgalmat a fürtben használt portra továbbítsa. A legtöbb mikroszolgáltatás, különösen az állapotalapú mikroszolgáltatások azonban nem a fürt összes csomópontján élnek. A mikroszolgáltatások feladatátvételkor a csomópontok között mozoghatnak. Ilyen esetekben a Load Balancer nem tudja hatékonyan meghatározni azon replikák célcsomópontjának helyét, amelyekre a forgalmat továbbítania kell.

Mikroszolgáltatások elérése fordított proxyn keresztül a fürtön kívülről

A Load Balancerben az egyes szolgáltatások portjának konfigurálása helyett csak a fordított proxy portját konfigurálhatja a Load Balancerben. Ez a konfiguráció lehetővé teszi, hogy a fürtön kívüli ügyfelek további konfiguráció nélkül elérjék a fürtön belüli szolgáltatásokat a fordított proxy használatával.

Külső kommunikáció

Figyelmeztetés

Ha a fordított proxy portját konfigurálja a Load Balancerben, a fürt minden olyan mikroszolgáltatása, amely HTTP-végpontot tesz elérhetővé, a fürtön kívülről kezelhető. Ez azt jelenti, hogy a belsőnek szánt mikroszolgáltatások felderíthetők egy meghatározott rosszindulatú felhasználó számára. Ez potenciálisan súlyos biztonsági réseket jelent, amelyeket ki lehet használni; például:

  • A rosszindulatú felhasználók szolgáltatásmegtagadási támadást indíthatnak, ha ismételten meghívnak egy belső szolgáltatást, amely nem rendelkezik megfelelően megerősített támadási felülettel.
  • A rosszindulatú felhasználók helytelenül formázott csomagokat kézbesíthetnek egy belső szolgáltatásnak, ami nem szándékos viselkedést eredményez.
  • A belsőnek szánt szolgáltatások olyan privát vagy bizalmas információkat adhatnak vissza, amelyeket nem a fürten kívüli szolgáltatásoknak kívánnak közzétenni, így ezeket a bizalmas információkat rosszindulatú felhasználónak adhatja ki.

Mielőtt nyilvánossá teszi a fordított proxyportot, győződjön meg arról, hogy teljes mértékben tisztában van a fürt és a rajta futó alkalmazások lehetséges biztonsági következményeival.

URI-formátum a szolgáltatások címzéséhez fordított proxy használatával

A fordított proxy egy adott egységes erőforrás-azonosító (URI) formátumot használ annak a szolgáltatáspartíciónak a azonosításához, amelyre a bejövő kérést továbbítani kell:

http(s)://<Cluster FQDN | internal IP>:Port/<ServiceInstanceName>/<Suffix path>?PartitionKey=<key>&PartitionKind=<partitionkind>&ListenerName=<listenerName>&TargetReplicaSelector=<targetReplicaSelector>&Timeout=<timeout_in_seconds>
  • http(k): A fordított proxy konfigurálható HTTP- vagy HTTPS-forgalom elfogadására. A HTTPS-továbbításhoz tekintse meg a Connect to a secure service with the reverse proxyt , miután a fordított proxy beállításával figyeli a HTTPS-t.

  • Fürt teljes tartományneve (FQDN) | belső IP-cím: Külső ügyfelek esetén konfigurálhatja a fordított proxyt úgy, hogy az elérhető legyen a fürttartományon keresztül, például mycluster.eastus.cloudapp.azure.com. Alapértelmezés szerint a fordított proxy minden csomóponton fut. Belső forgalom esetén a fordított proxy elérhető a localhoston vagy bármely belső csomópont IP-címén, például a 10.0.0.1-en.

  • Port: Ez az a port, például 19081, amely a fordított proxyhoz van megadva.

  • ServiceInstanceName: Ez annak az üzembe helyezett szolgáltatáspéldánynak a teljes neve, amelyet a "fabric:/" séma nélkül próbál elérni. Ha például el szeretné érni a hálót:/myapp/myservice/szolgáltatás, a myapp/myservice szolgáltatást használná.

    A szolgáltatáspéldány neve megkülönbözteti a kis- és nagybetűk nevét. Ha a szolgáltatáspéldány nevének eltérő burkolatát használja az URL-címben, a kérések sikertelenek lesznek a 404-zel (nem található).

  • Utótag elérési útja: Ez a tényleges URL-elérési út( például myapi/values/add/3) ahhoz a szolgáltatáshoz, amelyhez csatlakozni szeretne.

  • PartitionKey: Particionált szolgáltatás esetén ez annak a partíciónak a számítási partíciókulcsa, amelyet el szeretne érni. Vegye figyelembe, hogy ez nem a partícióazonosító GUID azonosítója. Ez a paraméter nem szükséges az egyszeri partíciós sémát használó szolgáltatásokhoz.

  • PartitionKind: Ez a szolgáltatáspartíciós séma. Ez lehet "Int64Range" vagy "Named". Ez a paraméter nem szükséges az egyszeri partíciós sémát használó szolgáltatásokhoz.

  • ListenerName A szolgáltatás végpontjai {"Endpoints":{"Listener1":"Endpoint1","Listener2":"Endpoint2" ...}} formában vannak. Ha a szolgáltatás több végpontot tesz elérhetővé, ez azonosítja azt a végpontot, amelyre az ügyfélkérelmet továbbítani kell. Ez kihagyható, ha a szolgáltatásnak csak egy figyelője van.

  • TargetReplicaSelector Ez a célreplika vagy -példány kiválasztásának módját adja meg.

    • Ha a célszolgáltatás állapotalapú, a TargetReplicaSelector a következők egyike lehet: "PrimaryReplica", "RandomSecondaryReplica" vagy "RandomReplica". Ha ez a paraméter nincs megadva, az alapértelmezett érték a "PrimaryReplica".
    • Ha a célszolgáltatás állapot nélküli, a fordított proxy kiválasztja a szolgáltatáspartíció véletlenszerű példányát a kérés továbbításához.
  • Időtúllépés: Ez a fordított proxy által a szolgáltatásnak az ügyfélkérés nevében létrehozott HTTP-kérés időtúllépését adja meg. Az alapértelmezett érték 120 másodperc. Ez egy nem kötelező paraméter.

Példa használatra

Vegyük például a hálót:/MyApp/MyService szolgáltatás, amely megnyitja a HTTP-figyelőt a következő URL-címen:

http://10.0.0.5:10592/3f0d39ad-924b-4233-b4a7-02617c6308a6-130834621071472715/

A szolgáltatás erőforrásai a következők:

  • /index.html
  • /api/users/<userId>

Ha a szolgáltatás az egyszeri particionálási sémát használja, a PartitionKey és a PartitionKind lekérdezési sztring paraméterei nem szükségesek, és a szolgáltatás az átjáróval a következőképpen érhető el:

  • Külsőleg: http://mycluster.eastus.cloudapp.azure.com:19081/MyApp/MyService
  • Belsőleg: http://localhost:19081/MyApp/MyService

Ha a szolgáltatás az Egységes Int64 particionálási sémát használja, a PartitionKey és a PartitionKind lekérdezési sztring paramétereit kell használni a szolgáltatás partíciójának eléréséhez:

  • Külsőleg: http://mycluster.eastus.cloudapp.azure.com:19081/MyApp/MyService?PartitionKey=3&PartitionKind=Int64Range
  • Belsőleg: http://localhost:19081/MyApp/MyService?PartitionKey=3&PartitionKind=Int64Range

A szolgáltatás által elérhető erőforrások eléréséhez egyszerűen helyezze az erőforrás elérési útját a szolgáltatás neve után az URL-címre:

  • Külsőleg: http://mycluster.eastus.cloudapp.azure.com:19081/MyApp/MyService/index.html?PartitionKey=3&PartitionKind=Int64Range
  • Belsőleg: http://localhost:19081/MyApp/MyService/api/users/6?PartitionKey=3&PartitionKind=Int64Range

Az átjáró ezután továbbítja ezeket a kéréseket a szolgáltatás URL-címére:

  • http://10.0.0.5:10592/3f0d39ad-924b-4233-b4a7-02617c6308a6-130834621071472715/index.html
  • http://10.0.0.5:10592/3f0d39ad-924b-4233-b4a7-02617c6308a6-130834621071472715/api/users/6

Speciális kezelés portmegosztási szolgáltatásokhoz

A Service Fabric fordított proxyja megpróbálja újból feloldani a szolgáltatás címét, és újrapróbálkozza a kérést, ha egy szolgáltatás nem érhető el. Ha egy szolgáltatás nem érhető el, a szolgáltatáspéldány vagy a replika a normál életciklus részeként egy másik csomópontra került. Ilyen esetben a fordított proxy hálózati kapcsolati hibát kaphat, amely azt jelzi, hogy a végpont már nem nyílik meg az eredetileg feloldott címen.

A replikák vagy szolgáltatáspéldányok azonban megoszthatnak egy gazdagépfolyamatot, és egy portot is megoszthatnak, ha egy http.sys-alapú webkiszolgáló üzemelteti, beleértve a következőket:

Ebben az esetben valószínű, hogy a webkiszolgáló elérhető a gazdagép folyamatában, és válaszol a kérelmekre, de a feloldott szolgáltatáspéldány vagy -replika már nem érhető el a gazdagépen. Ebben az esetben az átjáró HTTP 404-választ kap a webkiszolgálótól. Így a HTTP 404-válasznak két különböző jelentése lehet:

  • 1. eset: A szolgáltatás címe helyes, de a felhasználó által kért erőforrás nem létezik.
  • 2. eset: A szolgáltatás címe helytelen, és a felhasználó által kért erőforrás egy másik csomóponton is létezhet.

Az első eset egy normál HTTP 404, amely felhasználói hibának minősül. A második esetben azonban a felhasználó olyan erőforrást kért, amely létezik. A fordított proxy nem tudta megtalálni, mert maga a szolgáltatás áthelyeződött. A fordított proxynak újra meg kell oldania a címet, és újra meg kell próbálkoznia a kéréssel.

A fordított proxynak tehát meg kell különböztetnie ezt a két esetet. A különbségtételhez egy tippre van szükség a kiszolgálótól.

  • Alapértelmezés szerint a fordított proxy a 2. esetet feltételezi, és megkísérli feloldani és ismét kiadni a kérést.

  • Az 1. esetnek a fordított proxyra való jelzéséhez a szolgáltatásnak a következő HTTP-válaszfejlécet kell visszaadnia:

    X-ServiceFabric : ResourceNotFound

Ez a HTTP-válaszfejléc egy normál HTTP 404-helyzetet jelez, amelyben a kért erőforrás nem létezik, és a fordított proxy nem próbálja meg újból feloldani a szolgáltatás címét.

Speciális kezelés a tárolókban futó szolgáltatásokhoz

A tárolókon belül futó szolgáltatások esetében a környezeti változóval Fabric_NodeIPOrFQDN létrehozhatja a fordított proxy URL-címét az alábbi kód szerint:

    var fqdn = Environment.GetEnvironmentVariable("Fabric_NodeIPOrFQDN");
    var serviceUrl = $"http://{fqdn}:19081/DockerSFApp/UserApiContainer";

A helyi fürt Fabric_NodeIPOrFQDN esetében alapértelmezés szerint a "localhost" érték van beállítva. Indítsa el a helyi fürtöt a -UseMachineName paraméterrel, hogy a tárolók elérjék a csomóponton futó fordított proxyt. További információ: A fejlesztői környezet konfigurálása tárolók hibakeresésére.

A Docker Compose-tárolókban futó Service Fabric-szolgáltatásokhoz speciális docker-compose.yml Portok szakasz http: vagy https: konfiguráció szükséges. További információ: Docker Compose üzembe helyezés támogatása az Azure Service Fabricben.

Következő lépések