Поделиться через


Краткое руководство. Развертывание подключенного реестра на устройстве IoT Edge (не рекомендуется)

В этом кратком руководстве с помощью Azure CLI подключенный реестр развертывается на устройстве Azure IoT Edge в качестве модуля. Устройство IoT Edge может получить доступ к родительскому реестру контейнеров Azure в облаке.

Общие сведения об использовании подключенного реестра с IoT Edge см. в статье Использование подключенного реестра с Azure IoT Edge. Этот сценарий относится к устройству на верхнем уровне иерархии IOT Edge.

Необходимые компоненты

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

Импорт образов в облачный реестр

Импортируйте следующие образы контейнеров в облачный реестр с помощью команды az acr import. Пропустите этот шаг, если вы уже импортировали эти образы.

Образ подключенного реестра

Чтобы обеспечить поддержку вложенных сценариев IoT Edge, образ контейнера для подключенной среды выполнения реестра должен быть доступным в частном реестре контейнеров Azure. С помощью команды az acr import импортируйте образ подключенного реестра в частный реестр.

# 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

Образы прокси-сервера API и IoT Edge

Для включения поддержки подключенного реестра во вложенных ресурсах IoT Edge необходимо развернуть модули для IoT Edge и прокси-сервера API. Импортируйте эти образы в свой частный реестр.

Модуль прокси-сервера API IoT Edge позволяет устройству IoT Edge предоставлять несколько служб с помощью протокола HTTPS на одном и том же порту, например 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

Образ hello-world

Для тестирования подключенного реестра импортируйте образ hello-world. Этот репозиторий синхронизируется с подключенным реестром и извлекается клиентами подключенного реестра.

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

Получение конфигурации подключенного реестра

Перед развертыванием подключенного реестра на устройстве IoT Edge необходимо получить параметры конфигурации из ресурса подключенного реестра в Azure.

Получить сведения о параметрах, необходимых для установки подключенного реестра, можно с помощью команды az acr connected-registry get-settings. В следующем примере в качестве родительского протокола указывается HTTPS. Этот протокол необходим, если родительский реестр является облачным.

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

По умолчанию сведения о параметрах не содержат пароль токена синхронизации, который также требуется для развертывания подключенного реестра. При необходимости вы можете создать один из паролей, передав параметр --generate-password 1 или generate-password 2. Сохраните созданный пароль в надежном расположении. Вы не сможете получить этот пароль повторно.

Предупреждение

При повторном создании пароля меняются учетные данные токена синхронизации. Если устройство настроено с использованием предыдущего пароля, нужно обновить конфигурацию.

Выходные данные команды включают строку подключения к реестру и связанные параметры. В следующем примере выходных данных показана строка подключения для подключенного реестра с именем myconnectedregistry с родительским реестром contosoregistry:

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

Настройка манифеста развертывания для IoT Edge

Манифест развертывания — это документ JSON, в котором указано, какие модули следует развернуть на устройстве IoT Edge. Подробную информацию см. в статье Сведения о развертывании модулей и установлении маршрутов в IoT Edge.

Чтобы развернуть подключенный реестр и модули прокси-сервера API с помощью Azure CLI, сохраните следующий манифест развертывания локально в виде файла manifest.json. В следующем разделе вам потребуется путь к файлу для запуска команды, применяющей конкретную конфигурацию к устройству.

Параметры модуля подключенного реестра

  • Используйте учетные данные маркера и строку подключения, указанные в предыдущих разделах, чтобы обновить соответствующие значения JSON в узле env.

  • В узле env следующие переменные среды являются необязательными:

    «Переменная» Description
    ACR_REGISTRY_LOGIN_SERVER Указывает уникальное имя узла или полное доменное имя. Если значение указано, подключенный реестр принимает только запросы, выполненные для этого значения сервера входа.

    Если значение не указано, доступ к подключенному реестру можно получить с помощью любого значения сервера входа.
    ACR_REGISTRY_CERTIFICATE_VOLUME Если подключенный реестр будет доступен по протоколу HTTPS, указывает на том, где хранятся сертификаты HTTPS.

    Если значение не задано, используется расположение по умолчанию /var/acr/certs.
    ACR_REGISTRY_DATA_VOLUME Перезаписывает расположение по умолчанию /var/acr/data, где подключенный реестр будет сохранять образы.

    Это расположение должно соответствовать привязке тома для контейнера.

    Внимание

    Если подключенный реестр прослушивает порт, отличный от 80 и 443, значение ACR_REGISTRY_LOGIN_SERVER (если оно указано) должно включать порт. Пример: 192.168.0.100:8080.

  • Необходимо установить привязку HostPort для подключенного реестра, если модуль прокси-сервера API не используется. Пример:

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

Параметры модуля прокси-сервера API

  • Прокси-сервер API будет прослушивать порт 8000, настроенный как NGINX_DEFAULT_PORT. Дополнительные сведения о параметрах прокси-сервера API см. в репозитории GitHub для IoT Edge.
{
    "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
                }
            }
        }
    }
}

Развертывание подключенного реестра и модулей прокси-сервера API в IoT Edge

Используйте следующую команду, чтобы развернуть подключенный реестр и модули прокси-сервера API на устройстве IoT Edge с помощью манифеста развертывания, созданного при работе с предыдущим разделом. Укажите идентификатор устройства IoT Edge верхнего уровня и имя центра Интернета вещей в указанных полях.

# 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

Дополнительные сведения см. в статье Развертывание модулей Azure IoT Edge с помощью Azure CLI.

Проверить состояние подключенного реестра можно с помощью следующей команды az acr connected-registry show. Имя подключенного реестра — это значение $CONNECTED_REGISTRY_RW.

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

После успешного развертывания для подключенного реестра отобразится состояние Online.

Следующие шаги

Из этого краткого руководства вы узнали, как развернуть подключенный реестр на устройстве IoT Edge. Перейдите к следующим руководствам, чтобы узнать, как извлечь образы из развернутого подключенного реестра или развернуть подключенный реестр на вложенных устройствах IoT Edge.