Экземпляр GCP возвращает ERR_CONNECTION_REFUSED для маршрута Ajax 127.0.0.1 - PullRequest
1 голос
/ 23 марта 2019

У меня есть приложение колбы, использующее bokeh , которое работает в контейнере Docker, и оно работает, когда я использую его на локальных машинах.

Однако при развертывании его на экземпляре GCP, даже если я могу связаться с сервером, у меня появляются некоторые объекты AjaxDataSource (), которые не могут подключиться.

Некоторые детали,

  • Все машины, локальные и gcp vm работают под управлением Ubuntu 18.04
  • Приложение для колб запускается так:

    app.run(host="0.0.0.0", port=6600, debug=False)

  • Маршрут Ajax выглядит следующим образом,

    http://127.0.0.1:6600/land/tmidemo/data_rate?name=ResultBaseKeysV1

  • Правила брандмауэра GCP выглядят так:

    Name                Type    Targets         Filters                 Protocols / ports       Action  Priority    Network
    tmiserver-egress    Egress  Apply to all    IP ranges: 0.0.0.0/0    tcp:6600    udp:6600    Allow   1000        default
    tmiserver-ingress   Ingress Apply to all    IP ranges: 0.0.0.0/0    tcp:6600    udp:6600    Allow   1000        default
    
  • Docker-контейнер работает так,

    docker run --net tminet --hostname=TEST -p 6600:6600 -v $(pwd):/app/public --name myserver --rm myserver
    
  • Я не использую сервер Bokeh. Вызовы AjaxDataSource () указывают на приложение-колбу, а не на другой (боке) сервер

Много чего работает,

  • может использовать внешний IP-адрес GCP и обращаться к серверу
  • переход с веб-страницы на веб-страницу работает, поэтому работает флеш-маршрутизация

То, что НЕ работает, это вызов Ajax (), который использует 127.0.0.1, хотя это работает, когда я запускаю контейнер на локальной машине.

Ошибка, которую я вижу в окне проверки: ERR_CONNECTION_REFUSED

Экземпляр GCP hosts.conf DOES включает строку для 127.0.0.1 localhost

Я пытался (с здесь ) на экземпляре виртуальной машины GCP, тот же результат,

    iptables -A INPUT -i docker0 -j ACCEPT

Я также пытался (с здесь ) изменить сеть запуска Docker на --net="host", и результат идентичен.

Я также пытался добавить --add-host localhost:127.0.0.1 в команду запуска Docker, тот же результат.

Я думаю, что проблема в настройке GCP, чтобы знать, как направить запрос на 127.0.0.1, но я не знаю, где проверить, настроить это, помимо того, что я уже сделал.

1 Ответ

0 голосов
/ 24 марта 2019

Я не смог конкретно решить проблему, с которой столкнулся, но я попробовал другой подход к URL для AjaxDataSource(), и он сработал, и я думаю, что лучший подход ...

Я использовал функцию Flask url_for(), чтобы создать ссылку на маршрут, который нужен AjaxDataSource(), и это сработало. Полученная ссылка выглядит примерно так:

    /land/tmidemo/data_rate/ResultBaseKeysV1

то есть, нет http://127.0.0.1, и, похоже, это работает во всех случаях, в моей среде разработки и GCP.

Я думаю, что попробовал это давным-давно, и это не сработало, потому что я использую "фляги" URL повсюду, но по какой-то причине я подумал, что мне нужно "http://127.0.0.1" для Ajax Работает сейчас .... движемся дальше!

...