Предоставление нескольких портов из ManagedVM
Я использую функцию управляемой виртуальной машины для запуска сервера WebSocket, который я хотел бы открыть в Интернете на любом порту (предпочтительно на порту 80) через URL-адрес, например: mvm.mydomain.com
У меня пока нет особого успеха. Вот соответствующие части различных файлов, которые я использую для достижения этой цели:
Dockerfile:
EXPOSE 8080 8081
В конце Dockerfile запускается приложение Python: оно отвечает на проверки работоспособности на порте 8080 (я могу убедиться, что это работает) и отвечает на запросы WebSocket на порте 8081.
app.yaml:
module: mvm
version: 1
runtime: custom
vm: true
api_version: 1
network:
forwarded_ports: ["8081"]
Я развернул это приложение в облаке, используя:
$ gcloud preview app deploy .
В облачной консоли я проверяю, что TCP-порты 8080 и 8081 принимаются для входящего трафика. Я также наблюдаю IP-адрес, назначенный экземпляру GCE (mvm: 1): x.y.z.z.
$ curl http://x.y.z.z:8080/_ah/health
$ curl http://mvm.my-app-id.appspot.com/_ah/health
Отвечать как с200 OK
.
Подключение сервера WebSocket с использованием некоторого JavaScript также работает:
new WebSocket('ws://x.y.z.z:8081');
Все идет нормально. За исключением того, что это не сработало (тайм-аут):
new WebSocket('ws://mvm.my-app-id.appspot.com:8081');
Я хотел бы знать, почему вышеупомянутая команда WebSocket не работает. Может быть, что-то я не понимаю во взаимодействии перенаправления портов GAE / GCE?
Если бы это можно было как-то сработать, я предполагаю, что последними шагами по его завершении будут следующие.
dispatch.yaml:
dispatch:
# Send all websocket traffic to the ManagedVM module.
- url: "mvm.mydomain.com/*"
module: mvm
Я также настроил пользовательский домен GAAME CNAME на mvm.mydomain.com.
Подключение сервера WebSocket с использованием JavaScript должно работать следующим образом:
new WebSocket('ws://mvm.mydomain.com:8081');