Как разрешить Azure пограничным модулям Интернета вещей выполнять HTTP-запросы? - PullRequest
0 голосов
/ 06 мая 2020

работает curl -m 20 https://www.google.com работает, однако при запуске из контейнера пограничного модуля время ожидания истекает:

docker exec myModule sh -c 'curl -m 20 https://www.google.com'

curl: (28) Operation timed out after 20000 milliseconds with 0 out of 0 bytes received

У нас такое же ребро среда, запущенная на нескольких виртуальных машинах, где она работает должным образом. Он возвращает результат. Я предполагаю, что правило брандмауэра или другой параметр блокирует запрос? Поэтому я сравнил результаты sudo iptables -L -v между двумя виртуальными машинами, и они похожи.

Есть какие-нибудь предложения о том, что может вызвать такое поведение? Или что мне не хватает?

1 Ответ

1 голос
/ 20 мая 2020

Мы нашли проблему. Устройство, на котором истекло время ожидания запроса, имело две сети: Ethe rnet и GSM-модем. Docker был подключен к сети Ethe rnet, в которой не было подключения inte rnet. Это должен был быть модем GSM. Мы решили эту проблему, запустив сеть azure -iot-edge в качестве «хостовой» сети . Таким образом, он использует ту же конфигурацию, что и главный компьютер.

"createOptions": {
  "NetworkingConfig": {
    "EndpointsConfig": {
      "host": {}
    }
  },
  "HostConfig": {
    "NetworkMode": "host"
  }
}

Работа в качестве хост-сети решила проблему на большинстве машин. На некоторых других машинах мы получили другое исключение, а именно:

System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (00000005, 0xFFFDFFFF): Name or service                                                                        not known

Это было связано с несоответствием между /etc/hosts и /etc/hostname, см. Эту проблему , чтобы исправить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...