Az API-proxymodul konfigurálása az átjáróhierarchia forgatókönyvéhez
A következőkre vonatkozik: IoT Edge 1.5
Fontos
Az IoT Edge 1.5 LTS a támogatott kiadás. Az IoT Edge 1.4 LTS 2024. november 12-én megszűnik. Ha egy korábbi kiadáson dolgozik, olvassa el az IoT Edge frissítése című témakört.
Ez a cikk bemutatja az API-proxymodul konfigurációs beállításait, így testre szabhatja a modult az átjáróhierarchia követelményeinek megfelelően.
Az API-proxymodul leegyszerűsíti az IoT Edge-eszközök közötti kommunikációt, ha több olyan szolgáltatás van üzembe helyezve, amelyek mindegyike támogatja a HTTPS protokollt, és a 443-es porthoz kapcsolódik. Ez különösen fontos az IoT Edge-eszközök hierarchikus üzemelő példányaiban ISA-95-alapú, hálózat által izolált architektúrákban, például a Hálózateloszlott alsóbb rétegbeli eszközökben, mivel az alsóbb rétegbeli eszközök ügyfelei nem tudnak közvetlenül csatlakozni a felhőhöz.
Ha például engedélyezni szeretné az alsóbb rétegbeli IoT Edge-eszközök számára a Docker-rendszerképek lekérését, egy Docker-beállításjegyzék-modul üzembe helyezésére van szükség. A blobok feltöltésének engedélyezéséhez üzembe kell helyeznie egy Azure Blob Storage-modult ugyanazon az IoT Edge-eszközön. Mindkét szolgáltatás HTTPS-t használ a kommunikációhoz. Az API-proxy engedélyezi az ilyen üzembe helyezéseket egy IoT Edge-eszközön. Az API-proxymodul minden szolgáltatás helyett a gazdaeszköz 443-es portjához csatlakozik, és a kérést a felhasználó által konfigurálható szabályok szerint az eszközön futó megfelelő szolgáltatásmodulhoz irányítja. Az egyes szolgáltatások továbbra is felelősek a kérések kezeléséért, beleértve az ügyfelek hitelesítését és engedélyezését.
Az API-proxy nélkül minden szolgáltatásmodulnak külön porthoz kellene kapcsolódnia a gazdaeszközön, ami a szülő IoT Edge-eszközhöz csatlakozó minden gyermekeszközön fárasztó és hibalehetőséget igénylő konfigurációs módosítást igényel.
Feljegyzés
Az alsóbb rétegbeli eszközök közvetlenül az internetre vagy átjáróeszközökre bocsátanak ki adatokat (IoT Edge-kompatibilis vagy nem). A gyermekeszköz lehet alsóbb rétegbeli eszköz vagy átjáróeszköz beágyazott topológiában.
A proxymodul üzembe helyezése
Az API-proxymodul a Microsoft Container Registryből (MCR) érhető el, a rendszerkép URI-ja pedig .mcr.microsoft.com/azureiotedge-api-proxy:latest
A modul üzembe helyezéséhez használja az Azure Portalt vagy az Azure CLI-t.
A proxymodul ismertetése
Az API-proxymodul egy nginx fordított proxy használatával irányítja át az adatokat a hálózati rétegeken. A modulban proxy van beágyazva, ami azt jelenti, hogy a modul lemezképének támogatnia kell a proxykonfigurációt. Ha például a proxy egy adott portot figyel, akkor a modulnak nyitva kell lennie.
A proxy a modulba beágyazott alapértelmezett konfigurációs fájllal kezdődik. A modul ikermoduljával új konfigurációt adhat át a felhőből a modulnak. Emellett környezeti változókkal be- és kikapcsolhatja a konfigurációs beállításokat az üzembe helyezéskor.
Ez a cikk először az alapértelmezett konfigurációs fájlra és a környezeti változók használatára összpontosít a beállítások engedélyezéséhez. Ezután a konfigurációs fájl testreszabását tárgyaljuk a végén.
Alapértelmezett konfiguráció
Az API proxymodul egy alapértelmezett konfigurációval rendelkezik, amely támogatja a gyakori forgatókönyveket, és lehetővé teszi a testreszabást. Az alapértelmezett konfigurációt a modul környezeti változóival szabályozhatja.
Jelenleg az alapértelmezett környezeti változók a következők:
Környezeti változó | Leírás |
---|---|
PROXY_CONFIG_ENV_VAR_LIST |
Listázhatja az összes frissítendő változót egy vesszővel tagolt listában. Ez a lépés megakadályozza a helytelen konfigurációs beállítások véletlen módosítását. |
NGINX_DEFAULT_TLS |
Megadja az engedélyezendő TLS-protokollok listáját. Lásd az NGINX ssl_protocols. Az alapértelmezett érték a "TLSv1.2". |
NGINX_DEFAULT_PORT |
Módosítja azt a portot, amelyet az nginx-proxy figyel. Ha frissíti ezt a környezeti változót, közzé kell tennie a portot a modul dockerfile-jában, és deklarálnia kell a portkötést az üzembehelyezési jegyzékben. További információ: Proxyportok megjelenítése. Az alapértelmezett érték 443. Az Azure Marketplace-ről történő üzembe helyezéskor az alapértelmezett port 8000-re frissül, hogy megakadályozza az edgeHub-modullal való ütközéseket. További információ: Nyitott portok kis méretűre állítása. |
DOCKER_REQUEST_ROUTE_ADDRESS |
Docker-kérelmek átirányításának címe. Módosítsa ezt a változót a felső rétegbeli eszközön, hogy a beállításjegyzék-modulra mutasson. Alapértelmezés szerint a szülő gazdagép neve. |
BLOB_UPLOAD_ROUTE_ADDRESS |
Blob beállításjegyzék-kérelmek átirányításának címe. Módosítsa ezt a változót a felső rétegbeli eszközön, hogy a blobtároló modulra mutasson. Alapértelmezés szerint a szülő gazdagép neve. |
Nyitott portok kis méretűre állítása
A nyitott portok számának minimalizálása érdekében az API-proxymodulnak továbbítania kell az összes HTTPS-forgalmat (443-es port), beleértve az edgeHub-modult célzó forgalmat is. Az API proxymodul alapértelmezés szerint úgy van konfigurálva, hogy a 443-as porton az összes edgeHub-forgalmat átirányítsa.
A következő lépésekkel konfigurálhatja az üzembe helyezést a nyitott portok minimalizálása érdekében:
Frissítse az edgeHub-modul beállításait úgy, hogy ne legyenek kötések a 443-as porton, ellenkező esetben portkötési ütközések lépnek fel. Alapértelmezés szerint az edgeHub-modul a 443-as, az 5671-ös és a 8883-as porton köt. Törölje a 443-es port kötését, és hagyja a másik kettőt a helyén:
{ "HostConfig": { "PortBindings": { "5671/tcp": [ { "HostPort": "5671" } ], "8883/tcp": [ { "HostPort": "8883" } ] } } }
Konfigurálja az API proxymodult a 443-as porton való kötéshez.
Állítsa a NGINX_DEFAULT_PORT környezeti változó értékét a következőre
443
: .Frissítse a tároló létrehozási beállításait a 443-as porton való kötéshez.
{ "HostConfig": { "PortBindings": { "443/tcp": [ { "HostPort": "443" } ] } } }
Ha nem kell minimalizálnia a nyitott portokat, engedélyezheti, hogy az edgeHub-modul a 443-at használja, és konfigurálja az API-proxymodult egy másik port figyelésére. Az API-proxymodul például a 8000-es porton figyelheti a NGINX_DEFAULT_PORT környezeti változó 8000
értékét, és létrehoz egy portkötést a 8000-es porthoz.
Tárolórendszerkép letöltésének engedélyezése
Az API-proxymodul gyakori használati esete, ha engedélyezi az alsó rétegekben lévő IoT Edge-eszközök számára a tárolólemezképek lekérését. Ez a forgatókönyv a Docker regisztrációs modullal kéri le a tárolólemezképeket a felhőből, és gyorsítótárazza őket a legfelső rétegben. Az API-proxy továbbít minden HTTPS-kérést, hogy letöltsön egy tárolólemezképet az alsó rétegekből, amelyeket a beállításjegyzék-modul a felső rétegben fog kiszolgálni.
Ez a forgatókönyv megköveteli, hogy az alsóbb rétegbeli IoT Edge-eszközök a rendszerkép tárolóregisztrációs adatbázisa helyett a tartománynévre $upstream
, majd az API Proxy modul portszámára mutasson. Például: $upstream:8000/azureiotedge-api-proxy:1.1
Ezt a használati esetet mutatja be az oktatóanyag IoT Edge-eszközök hierarchiájának létrehozása átjárókkal.
Konfigurálja a következő modulokat a felső rétegben:
- Docker-beállításjegyzék-modul
- Konfigurálja a modult egy olyan emlékezetes névvel, mint a beállításjegyzék , és tegyen közzé egy portot a modulban a kérések fogadásához.
- Konfigurálja a modult a tárolóregisztrációs adatbázishoz való leképezéshez.
- API-proxymodul
Konfigurálja a következő környezeti változókat:
Név szerint Érték DOCKER_REQUEST_ROUTE_ADDRESS
A beállításjegyzék-modul neve és a megnyitott port. Például: registry:5000
.NGINX_DEFAULT_PORT
Az a port, amelyen az nginx-proxy figyeli az alsóbb rétegbeli eszközöktől érkező kéréseket. Például: 8000
.Konfigurálja a következő createOptionst:
{ "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "8000" } ] } } }
Konfigurálja a következő modult a forgatókönyv bármely alsó rétegén :
- API-proxymodul. Az API-proxymodul az alsó rétegbeli eszköz kivételével minden alsó rétegbeli eszközön kötelező.
Konfigurálja a következő környezeti változókat:
Név szerint Érték NGINX_DEFAULT_PORT
Az a port, amelyen az nginx-proxy figyeli az alsóbb rétegbeli eszközöktől érkező kéréseket. Például: 8000
.Konfigurálja a következő createOptionst:
{ "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "8000" } ] } } }
Proxyport elérhetővé helyezése
A 8000-s port alapértelmezés szerint ki van téve a Docker-rendszerképből. Ha másik nginx proxyportot használ, adja hozzá az ExposedPorts szakaszt, amely deklarálja a portot az üzembehelyezési jegyzékben. Ha például az nginx proxyportot 8001-re módosítja, adja hozzá a következőket az üzembehelyezési jegyzékhez:
{
"ExposedPorts": {
"8001/tcp": {}
},
"HostConfig": {
"PortBindings": {
"8001/tcp": [
{
"HostPort": "8001"
}
]
}
}
}
Blobfeltöltés engedélyezése
Az API-proxymodul másik használati esete, hogy engedélyezi az alsó rétegekben lévő IoT Edge-eszközöket a blobok feltöltéséhez. Ez a használati eset lehetővé teszi az alacsonyabb rétegű eszközök hibaelhárítási funkcióit, például a modulnaplók feltöltését vagy a támogatási csomag feltöltését.
Ez a forgatókönyv a legfelső réteg IoT Edge-alapú Azure Blob Storage-moduljának használatával kezeli a blobok létrehozását és feltöltését. Beágyazott forgatókönyv esetén legfeljebb öt réteg támogatott. Az IoT Edge-en futó Azure Blob Storage modul szükséges a felső rétegbeli eszközön, és nem kötelező az alsó rétegbeli eszközökhöz. A többrétegű üzembe helyezés mintájához tekintse meg az Azure IoT Edge for Industrial IoT-mintát .
Konfigurálja a következő modulokat a felső rétegben:
- Azure Blob Storage az IoT Edge-en modul.
- API-proxymodul
Konfigurálja a következő környezeti változókat:
Név szerint Érték BLOB_UPLOAD_ROUTE_ADDRESS
A blobtároló modul neve és a nyitott port. Például: azureblobstorageoniotedge:11002
.NGINX_DEFAULT_PORT
Az a port, amelyen az nginx-proxy figyeli az alsóbb rétegbeli eszközöktől érkező kéréseket. Például: 8000
.Konfigurálja a következő createOptionst:
{ "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "8000" } ] } } }
Konfigurálja a következő modult a forgatókönyv bármely alsó rétegén :
- API-proxymodul
Konfigurálja a következő környezeti változókat:
Név szerint Érték NGINX_DEFAULT_PORT
Az a port, amelyen az nginx-proxy figyeli az alsóbb rétegbeli eszközöktől érkező kéréseket. Például: 8000
.Konfigurálja a következő createOptionst:
{ "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "8000" } ] } } }
Az alábbi lépésekkel töltse fel a támogatási csomagot vagy a naplófájlt a legfelső rétegben található Blob Storage-modulba:
Hozzon létre egy blobtárolót az Azure Storage Explorer vagy a REST API-k használatával. További információ: Adatok tárolása a peremhálózaton az Azure Blob Storage-ban az IoT Edge-en.
Napló vagy támogatási csomag feltöltésének kérése az IoT Edge-környezetekből származó naplók lekérése lépésekkel, de használja a tartománynevet
$upstream
és a nyílt proxyportot a Blob Storage-modul címe helyett. Példa:{ "schemaVersion": "1.0", "sasUrl": "https://$upstream:8000/myBlobStorageName/myContainerName?SAS_key", "since": "2d", "until": "1d", "edgeRuntimeOnly": false }
A proxykonfiguráció szerkesztése
Az API-proxymodulba egy alapértelmezett konfigurációs fájl van beágyazva, de a modul ikermoduljával új konfigurációt adhat át a modulnak a felhőn keresztül.
Amikor saját konfigurációt ír, a környezettel továbbra is módosíthatja az üzemelő példányonkénti beállításokat. Alkalmazza a következő szintaxist:
Egy környezeti változó értékének lekérésére használható
${MY_ENVIRONMENT_VARIABLE}
.Feltételes utasítások használatával be- vagy kikapcsolhatja a beállításokat egy környezeti változó értéke alapján:
#if_tag ${MY_ENVIRONMENT_VARIABLE} statement to execute if environment variable evaluates to 1 #endif_tag ${MY_ENVIRONMENT_VARIABLE} #if_tag !${MY_ENVIRONMENT_VARIABLE} statement to execute if environment variable evaluates to 0 #endif_tag !${MY_ENVIRONMENT_VARIABLE}
Amikor az API proxymodul egy proxykonfigurációt elemez, először lecseréli a benne felsorolt összes környezeti változót a PROXY_CONFIG_ENV_VAR_LIST
megadott értékekre helyettesítéssel. Ezután minden egy és #endif_tag
pár #if_tag
között lecserélődik. A modul ezután biztosítja az elemzett konfigurációt az nginx fordított proxyhoz.
A proxykonfiguráció dinamikus frissítéséhez kövesse az alábbi lépéseket:
Írja meg a konfigurációs fájlt. Ezt az alapértelmezett sablont hivatkozásként használhatja: nginx_default_config.conf
Másolja ki a konfigurációs fájl szövegét, és konvertálja base64 formátumba.
Illessze be a kódolt konfigurációs fájlt a modul ikerpéldányában a
proxy_config
kívánt tulajdonság értékeként.
Következő lépések
Az API-proxymodullal csatlakoztathat egy alsóbb rétegbeli IoT Edge-eszközt egy Azure IoT Edge-átjáróhoz.