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


Az API-proxymodul konfigurálása az átjáróhierarchia forgatókönyvéhez

A következőkre vonatkozik:IoT Edge 1.5 pipa 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:

  1. 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"
            }
          ]
        }
      }
    }
    
  2. Konfigurálja az API proxymodult a 443-as porton való kötéshez.

    1. Állítsa a NGINX_DEFAULT_PORT környezeti változó értékét a következőre 443: .

    2. 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:

  1. 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.

  2. 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:

  1. Írja meg a konfigurációs fájlt. Ezt az alapértelmezett sablont hivatkozásként használhatja: nginx_default_config.conf

  2. Másolja ki a konfigurációs fájl szövegét, és konvertálja base64 formátumba.

  3. 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épernyőkép a kódolt konfigurációs fájl beillesztéséről proxy_config 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.