Szybki start: wdrażanie połączonego rejestru na urządzeniu IoT Edge

W tym przewodniku Szybki start użyjesz interfejsu wiersza polecenia platformy Azure do wdrożenia połączonego rejestru jako modułu na urządzeniu azure IoT Edge. Urządzenie IoT Edge może uzyskać dostęp do nadrzędnego rejestru kontenerów platformy Azure w chmurze.

Aby zapoznać się z omówieniem używania połączonego rejestru z IoT Edge, zobacz Using connected registry with Azure IoT Edge (Używanie połączonego rejestru z usługą Azure IoT Edge). Ten scenariusz odpowiada urządzeniu w górnej warstwie hierarchii IoT Edge.

Wymagania wstępne

Importowanie obrazów do rejestru w chmurze

Zaimportuj następujące obrazy kontenerów do rejestru w chmurze przy użyciu polecenia az acr import . Pomiń ten krok, jeśli te obrazy zostały już zaimportowane.

Obraz połączonego rejestru

Aby obsługiwać zagnieżdżone scenariusze IoT Edge, obraz kontenera dla połączonego środowiska uruchomieniowego rejestru musi być dostępny w prywatnym rejestrze kontenerów platformy Azure. Za pomocą polecenia az acr import zaimportuj połączony obraz rejestru do rejestru prywatnego.

# Use the REGISTRY_NAME variable in the following Azure CLI commands to identify the registry
REGISTRY_NAME=<container-registry-name>

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/acr/connected-registry:0.8.0

obrazy serwera proxy IoT Edge i interfejsu API

Aby obsługiwać połączony rejestr na zagnieżdżonych IoT Edge, należy wdrożyć moduły dla serwera proxy IoT Edge i interfejsu API. Zaimportuj te obrazy do rejestru prywatnego.

Moduł proxy interfejsu API IoT Edge umożliwia urządzeniu IoT Edge uwidocznienie wielu usług przy użyciu protokołu HTTPS na tym samym porcie, takim jak 443.

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/azureiotedge-agent:1.2.4

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/azureiotedge-hub:1.2.4

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/azureiotedge-api-proxy:1.1.2

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/azureiotedge-diagnostics:1.2.4

Obraz hello-world

Do testowania połączonego rejestru zaimportuj hello-world obraz. To repozytorium zostanie zsynchronizowane z połączonym rejestrem i pobrane przez połączonych klientów rejestru.

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/hello-world:1.1.2

Pobieranie konfiguracji połączonego rejestru

Przed wdrożeniem połączonego rejestru na urządzeniu IoT Edge należy pobrać ustawienia konfiguracji z połączonego zasobu rejestru na platformie Azure.

Użyj polecenia az acr connected-registry get-settings , aby uzyskać informacje o ustawieniach wymaganych do zainstalowania połączonego rejestru. Poniższy przykład określa protokół HTTPS jako protokół nadrzędny. Ten protokół jest wymagany, gdy rejestr nadrzędny jest rejestrem w chmurze.

az acr connected-registry get-settings \
  --registry $REGISTRY_NAME \
  --name $CONNECTED_REGISTRY_RW \
  --parent-protocol https

Domyślnie informacje o ustawieniach nie zawierają hasła tokenu synchronizacji , które jest również wymagane do wdrożenia połączonego rejestru. Opcjonalnie wygeneruj jedno z haseł, przekazując --generate-password 1 parametr or generate-password 2 . Zapisz wygenerowane hasło w bezpiecznej lokalizacji. Nie można go pobrać ponownie.

Ostrzeżenie

Ponowne generowanie hasła obraca poświadczenia tokenu synchronizacji. Jeśli urządzenie zostało skonfigurowane przy użyciu poprzedniego hasła, należy zaktualizować konfigurację.

Dane wyjściowe polecenia obejmują parametry połączenia rejestru i powiązane ustawienia. W poniższych przykładowych danych wyjściowych przedstawiono parametry połączenia dla połączonego rejestru o nazwie myconnectedregistry z rejestrem nadrzędnym contosoregistry:

{
  "ACR_REGISTRY_CONNECTION_STRING": "ConnectedRegistryName=myconnectedregistry;SyncTokenName=myconnectedregistry-sync-token;SyncTokenPassword=xxxxxxxxxxxxxxxx;ParentGatewayEndpoint=contosoregistry.eastus.data.azurecr.io;ParentEndpointProtocol=https"
}

Konfigurowanie manifestu wdrożenia dla IoT Edge

Manifest wdrożenia to dokument JSON opisujący moduły do wdrożenia na urządzeniu IoT Edge. Aby uzyskać więcej informacji, zobacz Omówienie sposobu używania, konfigurowania i ponownego używania modułów IoT Edge.

Aby wdrożyć połączone moduły rejestru i serwera proxy interfejsu API przy użyciu interfejsu wiersza polecenia platformy Azure, zapisz następujący manifest wdrożenia lokalnie jako manifest.json plik. Ścieżka pliku zostanie użyta w następnej sekcji podczas uruchamiania polecenia w celu zastosowania konfiguracji do urządzenia.

Ustawienia połączonego modułu rejestru

  • Użyj poświadczeń tokenu i parametrów połączenia z poprzednich sekcji, aby zaktualizować odpowiednie wartości JSON w węźle env .

  • Następujące zmienne środowiskowe są opcjonalne w węźle env :

    Zmienna Opis
    ACR_REGISTRY_LOGIN_SERVER Określa unikatową nazwę hosta lub nazwę FQDN. Jeśli jest używany, połączony rejestr akceptuje tylko żądania wysyłane do tej wartości serwera logowania.

    Jeśli nie podano żadnej wartości, można uzyskać dostęp do połączonego rejestru przy użyciu dowolnej wartości serwera logowania.
    ACR_REGISTRY_CERTIFICATE_VOLUME Jeśli połączony rejestr będzie dostępny za pośrednictwem protokołu HTTPS, wskazuje wolumin, w którym przechowywane są certyfikaty HTTPS.

    Jeśli nie zostanie ustawiona, domyślna lokalizacja to /var/acr/certs.
    ACR_REGISTRY_DATA_VOLUME Zastępuje domyślną lokalizację /var/acr/data , w której obrazy będą przechowywane przez połączony rejestr.

    Ta lokalizacja musi być zgodna z powiązaniem woluminu dla kontenera.

    Ważne

    Jeśli połączony rejestr nasłuchuje na porcie innym niż 80 i 443, ACR_REGISTRY_LOGIN_SERVER wartość (jeśli określono) musi zawierać port. Przykład: 192.168.0.100:8080.

  • Powiązanie HostPort dla połączonego rejestru powinno być ustawione, jeśli moduł serwera proxy interfejsu API nie jest używany. Przykład:

     "createOptions": "{\"HostConfig\":{\"Binds\":[\"/home/azureuser/connected-registry:/var/acr/data\"],\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"8080\"}]}}}"
    

Ustawienia modułu proxy interfejsu API

  • Serwer proxy interfejsu API będzie nasłuchiwać na porcie 8000 skonfigurowanym jako NGINX_DEFAULT_PORT. Aby uzyskać więcej informacji na temat ustawień serwera proxy interfejsu API, zobacz repozytorium IoT Edge GitHub.
{
    "modulesContent": {
        "$edgeAgent": {
            "properties.desired": {
                "modules": {
                    "connected-registry": {
                        "settings": {
                            "image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/acr/connected-registry:0.8.0",
                            "createOptions": "{\"HostConfig\":{\"Binds\":[\"/home/azureuser/connected-registry:/var/acr/data\"]}}"
                        },
                        "type": "docker",
                        "env": {
                            "ACR_REGISTRY_CONNECTION_STRING": {
                                "value": "ConnectedRegistryName=<REPLACE_WITH_CONNECTED_REGISTRY_NAME>;SyncTokenName=<REPLACE_WITH_SYNC_TOKEN_NAME>;SyncTokenPassword=REPLACE_WITH_SYNC_TOKEN_PASSWORD;ParentGatewayEndpoint=<REPLACE_WITH_CLOUD_REGISTRY_NAME>.<REPLACE_WITH_CLOUD_REGISTRY_REGION>.data.azurecr.io;ParentEndpointProtocol=https"
                            }
                        },
                        "status": "running",
                        "restartPolicy": "always",
                        "version": "1.0"
                    },
                    "IoTEdgeAPIProxy": {
                        "settings": {
                            "image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/azureiotedge-api-proxy:1.1.2",
                            "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8000/tcp\":[{\"HostPort\":\"8000\"}]}}}"
                        },
                        "type": "docker",
                        "env": {
                            "NGINX_DEFAULT_PORT": {
                                "value": "8000"
                            },
                            "CONNECTED_ACR_ROUTE_ADDRESS": {
                                "value": "connected-registry:8080"
                            },
                            "BLOB_UPLOAD_ROUTE_ADDRESS": {
                                "value": "AzureBlobStorageonIoTEdge:11002"
                            }
                        },
                        "status": "running",
                        "restartPolicy": "always",
                        "version": "1.0"
                    }
                },
                "runtime": {
                    "settings": {
                        "minDockerVersion": "v1.25",
                        "registryCredentials": {
                            "cloudregistry": {
                                "address": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io",
                                "password": "<REPLACE_WITH_SYNC_TOKEN_PASSWORD>",
                                "username": "<REPLACE_WITH_SYNC_TOKEN_NAME>"
                            }
                        }
                    },
                    "type": "docker"
                },
                "schemaVersion": "1.1",
                "systemModules": {
                    "edgeAgent": {
                        "settings": {
                            "image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/azureiotedge-agent:1.2.4",
                            "createOptions": ""
                        },
                        "type": "docker",
                        "env": {
                            "SendRuntimeQualityTelemetry": {
                                "value": "false"
                            }
                        }
                    },
                    "edgeHub": {
                        "settings": {
                            "image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/azureiotedge-hub:1.2.4",
                            "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
                        },
                        "type": "docker",
                        "status": "running",
                        "restartPolicy": "always"
                    }
                }
            }
        },
        "$edgeHub": {
            "properties.desired": {
                "routes": {
                    "route": "FROM /messages/* INTO $upstream"
                },
                "schemaVersion": "1.1",
                "storeAndForwardConfiguration": {
                    "timeToLiveSecs": 7200
                }
            }
        }
    }
}

Wdrażanie połączonych modułów rejestru i serwera proxy interfejsu API na IoT Edge

Użyj następującego polecenia, aby wdrożyć połączone moduły rejestru i serwera proxy interfejsu API na urządzeniu IoT Edge przy użyciu manifestu wdrożenia utworzonego w poprzedniej sekcji. Podaj identyfikator urządzenia IoT Edge górnej warstwy oraz nazwę IoT Hub, gdzie jest to wskazane.

# Set the IOT_EDGE_TOP_LAYER_DEVICE_ID and IOT_HUB_NAME environment variables for use in the following Azure CLI command
IOT_EDGE_TOP_LAYER_DEVICE_ID=<device-id>
IOT_HUB_NAME=<hub-name>

az iot edge set-modules \
  --device-id $IOT_EDGE_TOP_LAYER_DEVICE_ID \
  --hub-name $IOT_HUB_NAME \
  --content manifest.json

Aby uzyskać szczegółowe informacje, zobacz Wdrażanie modułów usługi Azure IoT Edge przy użyciu interfejsu wiersza polecenia platformy Azure.

Aby sprawdzić stan połączonego rejestru, użyj następującego polecenia az acr connected-registry show . Nazwa połączonego rejestru to wartość $CONNECTED_REGISTRY_RW.

az acr connected-registry show \
  --registry $REGISTRY_NAME \
  --name $CONNECTED_REGISTRY_RW \
  --output table

Po pomyślnym wdrożeniu połączony rejestr wyświetla stan Online.

Następne kroki

W tym przewodniku Szybki start przedstawiono sposób wdrażania połączonego rejestru na urządzeniu IoT Edge. Przejdź do następnych przewodników, aby dowiedzieć się, jak ściągać obrazy z nowo wdrożonego połączonego rejestru lub wdrożyć połączony rejestr na urządzeniach zagnieżdżonych IoT Edge.